Nodejs

Kubernetes Namespace 

쿠버네티스(Kubernetes)를 조금만 다뤄보면 금방 알게 되는 사실이 하나 있습니다. 바로 리소스가 전부 한 바구니(default 네임스페이스)에 들어간다는 점이죠.
이렇게 모든 Pod, Service, Deployment를 한 데 몰아넣으면 관리가 점점 복잡해집니다. 마치 대형 마트에 구역 나눔 없이 모든 물건을 한 코너에 쌓아둔 꼴이 됩니다.

그래서 등장한 개념이  Namespace(네임스페이스)입니다.

 

 

1. Namespace란 무엇인가?

Namespace는 쿠버네티스 클러스터 안에서 논리적인 구분 공간을 만들어주는 기능입니다.

  • 여러 프로젝트가 같은 클러스터를 쓰더라도 네임스페이스별로 리소스를 분리할 수 있습니다.

  • default, kube-system 같은 기본 네임스페이스도 자동으로 존재합니다.

  • 마치 사무실 안에서 팀별로 회의실을 나눠 쓰듯이, 클러스터 안에서 격리된 공간을 확보하는 것입니다.

즉, 네임스페이스는 리소스 충돌 방지관리 편의성을 위한 일종의 가상 경계선입니다.

 

 

2. Namespace 생성하기

강의에서는 dev라는 네임스페이스를 직접 생성해 보았습니다.

namespace.yml 파일 내용은 다음과 같습니다:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

여기서 핵심은 kind: Namespace와 metadata.name입니다. 아주 단순하지만 강력하죠.

적용하기

kubectl apply -f 4_namespace/

출력 결과:

namespace/dev created

이제 네임스페이스가 잘 만들어졌는지 확인해봅시다.

kubectl get namespace

출력 결과:

NAME              STATUS   AGE
default           Active   3d17h
dev               Active   9s
kube-node-lease   Active   3d17h
kube-public       Active   3d17h
kube-system       Active   3d17h

새로운 dev 네임스페이스가 추가된 것을 확인할 수 있습니다.

 

 

 

3. Deployment와 Namespace의 관계

이제 Deployment를 띄워봅시다.

kubectl apply -f 3_deployment/deployment.yml

출력:

deployment.apps/nginx-deployment created

그리고 Pod 상태를 확인하면:

nginx-deployment-5b44f47bc9-2thgs   0/1     ContainerCreating   0   8s
nginx-deployment-5b44f47bc9-8k8w6   1/1     Running             0   8s
nginx-deployment-5b44f47bc9-swmtl   1/1     Running             0   8s

하지만 여기서 중요한 포인트!
Deployment를 생성했지만, 별도의 네임스페이스를 지정하지 않으면 자동으로 default 네임스페이스에 생성됩니다.

 

 

 

4. Context 변경하기

이제 kubectl 명령이 기본적으로 dev 네임스페이스를 바라보도록 설정해봅니다.

kubectl config set-context $(kubectl config current-context) --namespace=dev

출력:

Context "docker-desktop" modified.

이제 kubectl get pods를 실행하면:

No resources found in dev namespace.

즉, dev 네임스페이스에는 아직 리소스가 없다는 의미입니다.

만약 --namespace=default 옵션을 붙여 확인하면:

nginx-deployment-5b44f47bc9-2thgs   1/1     Running   0   4m53s
nginx-deployment-5b44f47bc9-8k8w6   1/1     Running   0   4m53s
nginx-deployment-5b44f47bc9-swmtl   1/1     Running   0   4m53s

즉, 우리가 만든 Pod는 여전히 default 네임스페이스에 있는 것이죠.

 

 

 

5. Namespace 전환과 정리

Context를 다시 default로 되돌리면:

kubectl config set-context $(kubectl config current-context) --namespace=default

그리고 확인:

nginx-deployment-5b44f47bc9-2thgs   1/1     Running   0   5m39s
nginx-deployment-5b44f47bc9-8k8w6   1/1     Running   0   5m39s
nginx-deployment-5b44f47bc9-swmtl   1/1     Running   0   5m39s

kubectl get all 명령을 사용하면 Deployment, ReplicaSet, Pod 등 모든 리소스를 확인할 수 있습니다.

 

 

 

6. Namespace 삭제하기

네임스페이스도 삭제할 수 있습니다.

kubectl delete -f ./4_namespace

출력:

namespace "dev" deleted

그리고 확인:

kubectl get namespace
NAME              STATUS   AGE
default           Active   3d17h
kube-node-lease   Active   3d17h
kube-public       Active   3d17h
kube-system       Active   3d17h

이제 dev 네임스페이스가 사라졌음을 확인할 수 있습니다.

추가로, 특정 네임스페이스 안의 모든 리소스를 한 번에 삭제하고 싶다면:

kubectl delete all --all -n default

 

 

 

7. 응용 포인트

  • 프로젝트별 네임스페이스를 나눠서 운영하면 리소스 충돌을 방지할 수 있습니다.

  • 운영 환경(prod), 개발 환경(dev), 테스트 환경(staging)을 분리하면 관리가 훨씬 쉬워집니다.

  • RBAC(권한 관리)와 함께 네임스페이스를 쓰면 팀별 접근 제어도 가능합니다.

 

 

 

8. 이 전체 내용 요약

  1. Namespace는 쿠버네티스 클러스터 안에서 리소스를 구분하는 논리적 공간이다.

  2. namespace.yml을 이용해 dev 네임스페이스를 만들고 확인했다.

  3. Deployment는 네임스페이스를 지정하지 않으면 default에 생성된다.

  4. kubectl config set-context를 통해 기본 네임스페이스를 dev로 바꿀 수 있다.

  5. 네임스페이스를 삭제하면 그 안의 리소스도 함께 정리된다.

  6. 실제 서비스에서는 환경별/팀별로 네임스페이스를 나누는 것이 권장된다.

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

의붓자식 다루듯 , 남의 것처럼 하찮게 다룸을 이르는 말.

댓글 ( 0)

댓글 남기기

작성