Kubernetes

[k8s] namespace ㅡ 이해하기

최선을 다하자! 2026. 6. 9. 16:47

Namespace

같은 클러스터 안에서 리소스를 논리적으로 분리하는 방법


Namespace란?

-하나의 k8s 클러스터를 여러 팀이나 환경이 함께 사용할 때 리소스가 뒤섞이는 문제가 생긴다.
-Namespace는 클러스터를 논리적으로 나누는 경계선이다.
-같은 서버(클러스터)를 쓰면서도 개발 환경과 운영 환경을 분리할 수 있고, 팀별로 독립적인 공간을 가질 수 있다.

- Namespace는 리소스 이름의 범위를 한정한다.
- defaultnginx라는 Pod가 있어도, dev 네임스페이스에도 nginx라는 Pod를 만들 수 있다. 서로 다른 공간에 있기 때문에 이름이 충돌하지 않는다.


k8s 기본 Namespace

k8s를 설치하면 아래 네임스페이스가 자동으로 생성된다.

kubectl get namespace
Namespace 용도 주의
default 네임스페이스 미지정 시 기본값  
kube-system k8s 핵심 컴포넌트 (etcd, apiserver, scheduler, proxy, coredns) 절대 건드리지 말 것
kube-public 클러스터 전체에 공개되는 리소스  
kube-node-lease 노드 상태 확인용 heartbeat 정보 저장  

kube-system에는 클러스터 자체가 동작하기 위한 핵심 프로세스들이 있다. 이것들 중 하나라도 문제가 생기면 전체 클러스터가 영향을 받는다. 절대 삭제하거나 수정하면 안 된다.

# kube-system에 있는 핵심 컴포넌트들
kubectl get pods -n kube-system

# 주요 컴포넌트
# etcd                    : 클러스터 전체 상태를 저장하는 DB
# kube-apiserver          : kubectl 명령어를 받아서 처리
# kube-scheduler          : Pod를 어느 노드에 배치할지 결정
# kube-controller-manager : Deployment replicas 유지 등 상태 관리
# kube-proxy              : 노드 네트워크 트래픽 라우팅
# coredns                 : 클러스터 내부 DNS

[ 캡처 - kubectl get pods -n kube-system 결과 ]


Namespace 생성

명령어 한 줄로 생성할 수 있다.

# 생성
kubectl create namespace dev

# 확인
kubectl get namespace

[ 캡처 - dev 네임스페이스 생성 확인 ]


네임스페이스 지정해서 리소스 배포 및 조회

모든 kubectl 명령어에 -n <네임스페이스명> 옵션을 붙이면 해당 네임스페이스를 대상으로 동작한다.

# dev 네임스페이스에 Pod 배포
kubectl run nginx-dev --image=nginx:1.27 -n dev

# dev 네임스페이스 Pod 조회
kubectl get pods -n dev

네임스페이스를 지정하지 않으면 항상 default 네임스페이스를 대상으로 한다. dev에 배포한 Pod는 아래처럼 조회해야 보인다.

kubectl get pods          # default 네임스페이스만 조회 → nginx-dev 안 보임
kubectl get pods -n dev   # dev 네임스페이스 조회 → nginx-dev 보임
kubectl get pods -A       # 모든 네임스페이스 조회 → 전부 보임

-A 옵션은 클러스터 전체 리소스를 한번에 파악할 때 유용하다. 결과에 NAMESPACE 컬럼이 추가되어 어느 네임스페이스 소속인지 함께 표시된다.

[ 캡처 - kubectl get pods -A 전체 조회 결과 ]


실무 활용 패턴

보통 환경별 또는 팀별로 네임스페이스를 나눈다.

# 환경별 분리
dev           ← 개발 환경 (자유롭게 실험)
staging       ← QA/테스트 환경
production    ← 운영 환경 (엄격한 권한 관리)

# 목적별 분리
monitoring    ← Prometheus, Grafana 등 모니터링 도구
ingress-nginx ← Ingress Controller

네임스페이스를 분리하면 얻는 이점:

이점 설명
리소스 격리 개발 환경 실험이 운영 환경에 영향 없음
권한 분리 RBAC으로 팀별 접근 범위 제한 가능
리소스 할당 네임스페이스별 CPU/메모리 사용량 제한 가능 (ResourceQuota)
관리 편의 kubectl delete namespace dev 한 번으로 해당 네임스페이스 전체 삭제