쿠버네티스 네임스페이스

날아올라돼지야·2024년 9월 4일

쿠버네티스 마스터

목록 보기
11/27

안녕하세요! 오늘은 쿠버네티스 네임스페이스(Namespace)에 대해 깊이 있게 알아보겠습니다. 네임스페이스는 쿠버네티스에서 자주 사용되는 개념으로, 클러스터를 논리적으로 분리하고 관리하기 위한 중요한 도구입니다.

1. 네임스페이스란 무엇인가?

쿠버네티스 클러스터는 기본적으로 여러 애플리케이션을 함께 실행할 수 있도록 설계되어 있습니다. 하지만, 여러 팀이 동일한 클러스터를 사용하는 경우, 리소스 관리나 충돌 방지 등의 문제가 발생할 수 있습니다. 이를 해결하기 위해 쿠버네티스는 네임스페이스라는 개념을 도입했습니다.

네임스페이스는 클러스터 내에서 리소스들을 논리적으로 분리하는 가상 클러스터라고 생각하면 됩니다. 각각의 네임스페이스는 독립적인 환경을 제공하여, 애플리케이션 간의 이름 충돌을 방지하고, 리소스 관리를 더 체계적으로 할 수 있도록 도와줍니다.

쉽게 말해, 네임스페이스는 쿠버네티스 리소스들을 그룹화하고 분리하는 방법입니다.

2. 네임스페이스의 주요 기능

네임스페이스는 다음과 같은 기능을 제공합니다:

  • 이름 충돌 방지: 네임스페이스는 클러스터 내에서 리소스들의 이름 충돌을 방지합니다. 예를 들어, 서로 다른 네임스페이스에서 같은 이름의 서비스나 파드를 생성할 수 있습니다.

  • 리소스 격리: 각 네임스페이스는 자체적으로 파드, 서비스, 컨피그맵(ConfigMap), 시크릿(Secret) 등 다양한 리소스를 갖출 수 있습니다. 이를 통해 여러 애플리케이션이 같은 클러스터 내에서 격리된 환경에서 실행됩니다.

  • 접근 제어: 네임스페이스는 쿠버네티스 RBAC(Role-Based Access Control)를 사용해 사용자나 그룹이 특정 네임스페이스에만 접근할 수 있도록 제어할 수 있습니다. 이를 통해 팀 간의 리소스 접근 권한을 쉽게 관리할 수 있습니다.

  • 리소스 할당: 네임스페이스는 CPU, 메모리 등 클러스터 리소스의 사용량을 제한하는데도 유용합니다. 이를 통해 네임스페이스별로 할당된 자원 범위 내에서 리소스가 사용되도록 보장할 수 있습니다.

3. 네임스페이스의 구조

쿠버네티스 네임스페이스는 클러스터 내에서 리소스를 논리적으로 그룹화하고 분리하는 데 사용됩니다. 기본적으로 쿠버네티스는 네 가지 기본 네임스페이스를 제공합니다:

  • default: 네임스페이스를 명시하지 않고 리소스를 생성할 때 자동으로 할당되는 기본 네임스페이스입니다.
  • kube-system: 쿠버네티스가 내부적으로 사용하는 리소스(예: API 서버, 스케줄러 등)가 저장되는 네임스페이스입니다.
  • kube-public: 모든 사용자가 읽을 수 있는 리소스가 저장되는 네임스페이스입니다. 이 네임스페이스는 주로 클러스터 정보와 같이 공개적으로 접근 가능한 데이터를 저장합니다.
  • kube-node-lease: 각 노드의 상태 정보를 저장하는 네임스페이스입니다. 노드의 상태와 관련된 정보들이 여기에 저장되어 노드 상태 모니터링에 사용됩니다.

사용자는 위의 기본 네임스페이스 외에도 필요에 따라 새로운 네임스페이스를 만들 수 있습니다.

4. 네임스페이스 사용법

네임스페이스를 직접 사용해보면서 이해해볼까요?

4.1 네임스페이스 목록 확인

현재 클러스터에서 사용 가능한 네임스페이스를 확인하려면 다음 명령을 사용합니다:

kubectl get namespaces

이 명령을 실행하면 현재 클러스터에 있는 모든 네임스페이스의 목록을 볼 수 있습니다.

4.2 네임스페이스 생성

새로운 네임스페이스를 생성하려면 다음 명령을 사용할 수 있습니다:

kubectl create namespace <네임스페이스 이름>

예를 들어, dev라는 네임스페이스를 생성하려면:

kubectl create namespace dev

이제 dev라는 새로운 네임스페이스가 생성되었습니다.

4.3 특정 네임스페이스에서 리소스 생성

리소스를 특정 네임스페이스에 생성하려면, 해당 네임스페이스를 명시해야 합니다. 예를 들어, dev 네임스페이스에 파드를 생성하려면 다음과 같이 할 수 있습니다:

kubectl run nginx-pod --image=nginx --namespace=dev

이 명령어는 nginx 이미지를 사용해 dev 네임스페이스에 파드를 생성하는 예입니다.

4.4 네임스페이스 삭제

네임스페이스를 삭제하면 그 안에 있는 모든 리소스도 함께 삭제됩니다. 네임스페이스를 삭제하려면 다음 명령을 사용합니다:

kubectl delete namespace <네임스페이스 이름>

예를 들어, dev 네임스페이스를 삭제하려면:

kubectl delete namespace dev

4.5 네임스페이스 별 리소스 확인

특정 네임스페이스에 있는 리소스만 보고 싶다면, kubectl 명령에서 --namespace 옵션을 사용합니다. 예를 들어, dev 네임스페이스에서 실행 중인 파드를 확인하려면:

kubectl get pods --namespace=dev

5. 네임스페이스와 리소스 쿼터

쿠버네티스는 네임스페이스마다 사용할 수 있는 리소스를 제한하는 기능도 제공합니다. 이를 리소스 쿼터(Resource Quota)라고 합니다. 리소스 쿼터를 사용하면, 네임스페이스별로 사용할 수 있는 CPU, 메모리, 스토리지의 양을 제한할 수 있습니다.

리소스 쿼터는 YAML 파일로 정의되며, 다음과 같은 형태로 설정할 수 있습니다:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: dev
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 1Gi
    limits.cpu: "4"
    limits.memory: 2Gi

이 예시는 dev 네임스페이스에서 사용할 수 있는 CPU와 메모리를 제한하는 설정입니다. 리소스 쿼터를 적용하면 각 네임스페이스는 지정된 자원 범위 내에서만 리소스를 사용할 수 있습니다.

6. 네임스페이스와 RBAC

쿠버네티스는 RBAC(Role-Based Access Control)을 사용해 네임스페이스 별로 접근 권한을 제어할 수 있습니다. 이를 통해 특정 사용자나 팀이 특정 네임스페이스에만 접근하도록 설정할 수 있습니다.

예를 들어, 다음과 같은 RBAC 설정을 사용하면 dev 네임스페이스에 대한 접근 권한을 부여할 수 있습니다:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-user-binding
  namespace: dev
subjects:
- kind: User
  name: "user1"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: "developer"
  apiGroup: rbac.authorization.k8s.io

이 설정은 user1이라는 사용자가 dev 네임스페이스에서 특정 권한을 갖도록 설정하는 예입니다.

7. 네임스페이스의 활용 사례

네임스페이스는 주로 다음과 같은 경우에 유용합니다:

  1. 다중 사용자 환경: 여러 팀이 하나의 클러스터를 사용하는 경우, 네임스페이스를 통해 팀별로 리소스를 분리하고 관리할 수 있습니다.

  2. 테스트 및 프로덕션 환경 분리: 동일한 클러스터에서 개발, 테스트, 프로덕션 환경을 분리할 수 있습니다. 각 환경별로 네임스페이스를 생성하고, 리소스를 분리하면 더 안전하고 효율적으로 클러스터를 운영할 수 있습니다.

  3. 리소스 격리: 특정 애플리케이션이 사용하는 리소스를 다른 애플리케이션과 격리하여 관리하고자 할 때 네임스페이스를 활용할 수 있습니다.

8. 마무리

쿠버네티스 네임스페이스는 대규모 클러스터에서 여러 애플리케이션과 사용자 간의 리소스를 효율적으로 관리하고 격리하는 데 매우 유용한 도구입니다. 네임스페이스를 활용하면

클러스터를 논리적으로 분리하여 관리할 수 있고, 리소스 할당 및 접근 제어를 더 쉽게 할 수 있습니다.

이제 네임스페이스를 실제로 활용해보고, 여러분의 클러스터 운영에 맞는 네임스페이스 전략을 세워보세요.

profile
무슨 생각하며 사니

0개의 댓글