Namespace

Namespace란?
Namespace는 리소스를 논리적으로 구분하는 단위이다.- 예를들어,
Database라는Namespace에는 데이터베이스에 관련된Pod,Service,Deployment등의 리소스를 모아두고,Monitoring이라는Namespace에는 모니터링에 관련된Pod,Service,Deployment등의 리소스를 모아두고 분리해서 관리할 수 있다. (cf: 논리적으로 구분되는 것이기 때문에 다른Namespace에 있는 리소스라도 서로 통신은 할 수 있다)
Namespace의 필요성
- 목적에 맞는(예:
dev환경과prod환경) 환경을 같은 클러스터 내에서 논리적으로 구분해서 관리가 가능하다. - 각
Namespace별 권한 정책(RBAC)와 리소스 할당량(ResourceQuota)를 설정할 수 있다. - 관리의 편의성 뿐만 아니라, 실수로
prod환경의 자원을 수정하는 일 등을 방지하는 역할을 한다.
기본 Namespace
default- 따로
Namespace를 지정하지 않아도, 작동하는 기본적으로 작업하는 공간이다.
- 따로
kube-system- 쿠버네티스 내부 컴포넌트용
Namespace이다. CoreDNS,ETCD,kube-apiserver,kube-controller-manager,kube-proxy,kube-scheduler등이 존재한다.
- 쿠버네티스 내부 컴포넌트용
kube-public- 모든 사용자가 접근 가능한 공개 리소스 저장 공간 역할을 하는
Namespace이다.
- 모든 사용자가 접근 가능한 공개 리소스 저장 공간 역할을 하는
Namespace 내부 통신
같은 Namespace 내부
- 같은
Namespace안에서는 단순히 이름으로 접근이 가능하다. - 예:
web-pod,web-service
다른 Namespace에 접근

- 다른
Namespace의 자원에 접근하려면 전체 도메인을 사용 - 예:
web-pod.dev.pod.cluster.local,web-service.dev.svc.cluster.local
명령어
kubectl create namespace dev
dev라는 이름의Namespace를 생성한다.
kubectl get pods -n dev
dev라는 이름의Namespace에 존재하는Pod를 조회한다.
kubectl get deployment -n dev
dev라는 이름의Namespace에 존재하는Deployment를 조회한다.
kubectl get service -n dev
dev라는 이름의Namespace에 존재하는Service를 조회한다.
kubectl get pods --all-namespaces
- 모든
Namespace에 존재하는Pod를 조회한다.
kubectl config set-context --current --namespace=dev
- 기본
Namespace는default이다. - 위 명령어를 통해서 기본
Namespace를dev로 바꿀 수 있다.
Yaml
Namespace 생성
# namespace-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
kubectl create -f namespace-dev.yaml
dev라는 이름의Namespace를 생성한다.
자원 생성
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
kubectl create -f pod-definition.yaml --namespace=dev
Pod를dev라는 이름의Namespace에 생성한다.
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: dev
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
kubectl create -f pod-definition.yaml
metadatanamespace: 여기에Namespace이름을 지정하여 해당Pod가 항상dev라는 이름의Namespace에 생성되도록 할 수 있다.
리소스 제한 (Resource Quota)
# compute-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "10"
requests.memory: 10Gi
apiVersion:v1kind:ResourceQuotametadatanamespace: 여기에 리소스를 제한할Namespace의 이름을 지정한다.
spec(Dictionary): 여기에 제한할 리소스의 조건을 작성한다.
kubectl create -f compute-quota.yaml
레퍼런스
- https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- https://kubernetes.io/docs/tasks/administer-cluster/namespaces-walkthrough/
- https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
- https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/
- https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)