쿠버네티스 네임스페이스 2

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

쿠버네티스 마스터

목록 보기
12/27

안녕하세요, 오늘은 쿠버네티스 네임스페이스(Namespace)에 대해 자세히 알아보고, 실습을 통해 개념을 확실히 익혀보겠습니다.

1. 네임스페이스란?

쿠버네티스 네임스페이스는 클러스터 내에서 리소스들을 논리적으로 분리하여 사용할 수 있도록 도와주는 중요한 기능입니다. 네임스페이스를 활용하면, 하나의 클러스터에서 여러 애플리케이션이나 팀, 혹은 환경을 분리하여 관리할 수 있습니다. 이는 리소스 간의 충돌을 방지하고, 보다 체계적인 운영이 가능하도록 해줍니다.

2. 네임스페이스의 필요성

하나의 클러스터에서 여러 팀이 동시에 개발하고 배포하는 경우, 각 팀이 같은 이름의 리소스를 사용할 때 문제가 발생할 수 있습니다. 예를 들어, 각 팀이 같은 이름의 파드나 서비스를 생성하면 충돌이 일어나겠죠. 이럴 때 네임스페이스를 이용해 이름 공간을 분리함으로써 각 팀이 독립적으로 리소스를 사용할 수 있게 됩니다.

3. 예시로 이해하는 네임스페이스

여기서 예시를 들어볼게요. 가상의 에코미디어(EcoMedia)라는 회사가 있다고 가정해봅시다. 이 회사는 다양한 디지털 미디어 서비스와 커뮤니티를 운영합니다. 에코미디어는 세 가지 주요 서비스 라인을 가지고 있습니다.

  • 에코TV: 동영상 스트리밍 서비스
  • 에코뉴스: 뉴스 콘텐츠 제공 서비스
  • 에코커뮤니티: 사용자 간의 소통을 위한 커뮤니티 플랫폼

이 각각의 서비스가 독립적으로 관리될 필요가 있기 때문에, 쿠버네티스에서 이를 위한 각각의 네임스페이스를 만들 수 있습니다.

  • tv-namespace: 에코TV 관련 리소스를 관리
  • news-namespace: 에코뉴스 관련 리소스를 관리
  • community-namespace: 에코커뮤니티 관련 리소스를 관리

이렇게 네임스페이스를 분리하면, 동일한 클러스터 내에서도 각 서비스의 리소스가 충돌 없이 운영될 수 있습니다. 각 네임스페이스에서 동일한 이름의 파드, 서비스, 컨피그맵 등이 생성되더라도 문제없이 작동합니다.

4. 네임스페이스 생성 및 관리 실습

4.1. 네임스페이스 확인하기

먼저, 현재 클러스터에 어떤 네임스페이스가 있는지 확인해봅시다.

kubectl get namespaces

이 명령어를 실행하면 기본 네임스페이스인 default, kube-system, kube-public 등이 출력될 것입니다.

4.2. 새로운 네임스페이스 생성

이제 에코미디어의 세 가지 서비스 라인을 위한 네임스페이스를 만들어보겠습니다.

kubectl create namespace tv-namespace
kubectl create namespace news-namespace
kubectl create namespace community-namespace

이 명령어를 통해 각각의 네임스페이스가 생성됩니다.

생성된 네임스페이스를 다시 확인해봅시다.

kubectl get namespaces

생성된 tv-namespace, news-namespace, community-namespace가 리스트에 포함되어 있는지 확인할 수 있습니다.

4.3. 네임스페이스에 리소스 배포하기

이제 네임스페이스에 파드를 배포해보겠습니다. tv-namespace에 Nginx 웹 서버를 배포해보겠습니다.

kubectl run nginx-tv --image=nginx --namespace=tv-namespace

파드가 제대로 생성되었는지 확인하기 위해 tv-namespace에서 실행 중인 파드를 확인해봅니다.

kubectl get pods --namespace=tv-namespace

4.4. 다른 네임스페이스에 동일한 리소스 배포하기

이제 같은 Nginx 파드를 news-namespace에도 배포해보겠습니다.

kubectl run nginx-news --image=nginx --namespace=news-namespace

배포 후 news-namespace에서 실행 중인 파드도 확인해봅시다.

kubectl get pods --namespace=news-namespace

이렇게 동일한 nginx 이미지를 각각 다른 네임스페이스에 배포해도 리소스 충돌 없이 독립적으로 운영되는 것을 확인할 수 있습니다.

5. 네임스페이스 관련 중요한 개념

5.1. 네임스페이스의 리소스 격리

네임스페이스는 리소스를 논리적으로 분리할 뿐 아니라, 리소스 격리 기능을 제공합니다. 예를 들어, CPU와 메모리 같은 자원을 네임스페이스별로 할당하여 관리할 수 있습니다. 이를 통해 각 네임스페이스가 클러스터 자원을 공평하게 사용할 수 있도록 보장할 수 있습니다.

다음은 news-namespace에서 사용할 CPU와 메모리를 제한하는 리소스 쿼터(Resource Quota)의 예시입니다.

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

이 YAML 파일을 통해 news-namespace에 할당할 자원을 제한할 수 있습니다. 이 리소스 쿼터를 적용하려면 다음 명령을 사용합니다.

kubectl apply -f resource-quota.yaml

5.2. 네임스페이스와 Role-Based Access Control (RBAC)

네임스페이스는 RBAC(Role-Based Access Control)와도 밀접하게 연관됩니다. 각 네임스페이스별로 접근 권한을 설정하여 특정 사용자나 팀이 특정 네임스페이스에만 접근하도록 제한할 수 있습니다. 이를 통해 클러스터 보안과 관리가 더욱 강화됩니다.

다음은 tv-namespace에 대한 권한을 설정하는 RBAC 예시입니다.

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

이 설정을 통해 tv-user라는 사용자가 tv-namespace에서만 리소스를 조회할 수 있는 권한을 부여받게 됩니다.

6. 네임스페이스 삭제 및 주의사항

6.1. 네임스페이스 삭제

네임스페이스를 삭제할 때는 그 안에 있는 모든 리소스도 함께 삭제됩니다. 예를 들어, community-namespace를 삭제하려면 다음 명령을 실행합니다.

kubectl delete namespace community-namespace

삭제 전에 해당 네임스페이스 안에 중요한 리소스가 있는지 꼭 확인해야 합니다. 삭제 후에는 복구할 수 없기 때문에 주의가 필요합니다.

6.2. 네임스페이스에 속한 리소스 확인

네임스페이스를 삭제하기 전에 그 안에 어떤 리소스들이 있는지 확인하고 싶다면 다음 명령을 사용할 수 있습니다.

kubectl get all --namespace=community-namespace

이 명령을 통해 해당 네임스페이스에서 실행 중인 모든 리소스 목록을 확인할 수 있습니다.

7. 네임스페이스 활용 팁

  • 환경별 네임스페이스 사용: 개발 환경, 테스트 환경, 프로덕션 환경을 네임스페이스로 구분하여 각 환경에 맞게 리소스를 관리하세요.
  • 팀별 네임스페이스 사용: 여러 팀이 하나의 클러스터를 사용할 때, 팀별로 네임스페이스를 나눠 각 팀이 독립적으로 클러스터 자원을 관리할 수 있도록 하세요.
  • RBAC와 연동: RBAC와 함께 네임스페이스를 사용해 접근 권한을 세부적으로 관리하면, 보안과 운영 측면에서 큰 이점이 있습니다.

8. 마무리

이번 강의에서는 쿠버네티스 네임스페이스의 개념과 활용법, 그리고 실습을 통해 네임스페이스를 생성하고 관리하는 방법을 배웠습니다. 네임스페이스는 클러스터 내에서 리소스를 구분하고 독립적인 환경을 만들어 줌으로써, 여러 팀이 하나의 클러스터를 안정적으로 사용할 수 있도록 도와줍니다.

이제 여러분의 쿠버네티스 클러스터에서 네임스페이스를 활용해 효율적인 리소스 관리를 시작해보세요!


이렇게 대본을 완

profile
무슨 생각하며 사니

0개의 댓글