본문 바로가기
인프라/Docker&K8S

쿠버네티스 아키텍처 -네임스페이스(namespace)

by IT맥구리나스 2022. 4. 9.

📗 namespace

단일 클러스터 내에서의 리소스 그룹 격리 단위

용도에 따라 실행해야하는 앱을 구분할 때 사용

그룹화 시키는 것에서는 deployment와 같지만 그림을 보면 쉽게 이해할 수 있음

네임 스페이스를 통해서 서비스별 리소스 할당을 조정할 수 있음

기본적으로 4개의 namespace가 존재함. pod생성시 namespace를 별도로 지정하지 않으면 default에 소속되어짐

root@ubuntu:~# 
root@ubuntu:~# kubectl get namespaces
NAME              STATUS   AGE
default           Active   2d22h
kube-node-lease   Active   2d22h
kube-public       Active   2d22h
kube-system       Active   2d22h
root@ubuntu:~#

root@ubuntu:~# kubectl get pods -n default
NAME        READY   STATUS    RESTARTS   AGE
webserver   1/1     Running   0          25h

 

📗 namespace 조회/생성/삭제하기

명령어로 직접 생성과 yaml파일 생성 후 yaml파일을 이용하여 namespace를 생성해보았다.

# 명령어로 namespace 생성
root@ubuntu:~# kubectl create namespace blue
namespace/blue created

# namespace red를 생성하기위한 red.yaml파일 생성 및 확인
root@ubuntu:~# kubectl create namespace red --dry-run -o yaml > red.yaml
W0410 08:15:50.852921   75181 helpers.go:598] --dry-run is deprecated and can be replaced with --dry-run=client.
root@ubuntu:~# ls -ltr
total 12
drwx------ 3 root root 4096 Apr  7 08:14 snap
-rw-r--r-- 1 root root  284 Apr  9 06:32 webserver.pod.yaml
-rw-r--r-- 1 root root   99 Apr 10 08:15 red.yaml
root@ubuntu:~# 
root@ubuntu:~# 

# namespace 조회(blue만 있음 red는 아직 생성하지 않음)
root@ubuntu:~# kubectl get namespaces
NAME              STATUS   AGE
blue              Active   2m2s
default           Active   2d22h
kube-node-lease   Active   2d22h
kube-public       Active   2d22h
kube-system       Active   2d22h
root@ubuntu:~# 

#yaml파일을 이용한 namespace red 생성
root@ubuntu:~# kubectl create -f red.yaml 
namespace/red created
root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# 

#namespace 조회(red 생성된 것 확인)
root@ubuntu:~# kubectl get namespaces 
NAME              STATUS   AGE
blue              Active   2m55s
default           Active   2d22h
kube-node-lease   Active   2d22h
kube-public       Active   2d22h
kube-system       Active   2d22h
red               Active   5s


#red namespace 삭제하기
root@ubuntu:~# 
root@ubuntu:~# kubectl delete namespace red
namespace "red" deleted


# red name namespace 삭제된것 확인
root@ubuntu:~# kubectl get namespaces 
NAME              STATUS   AGE
blue              Active   10m
default           Active   2d23h
kube-node-lease   Active   2d23h
kube-public       Active   2d23h
kube-system       Active   2d23h

 

📗 namespace를 지정하여 pod 생성하기

조회할때 기본적으로 default name스페이스가 조회되므로 -n옵션을 사용하여 조회할 namespace를 지정해야 함

root@ubuntu:~# kubectl run bluewebserver --image=nginx:1.14 --port 80 -n blue
pod/bluewebserver created
root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# kubectl get pod -n blue
NAME            READY   STATUS    RESTARTS   AGE
bluewebserver   1/1     Running   0          14s
root@ubuntu:~#

namespace에서 pod가 있는 상태에서 namespace를 지우게 되면 소속된 pod도 삭제 된다.

root@ubuntu:~# kubectl get pod -n blue
NAME            READY   STATUS    RESTARTS   AGE
bluewebserver   1/1     Running   0          14s
root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# kubectl delete namespaces blue 
namespace "blue" deleted
root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# kubectl get pod -n blue
No resources found in blue namespace.
root@ubuntu:~#

📗 namespace switch 하기

기본 namespace는 default이다. 따라서 파드 생성시 기본 namespace인 default를 따라가게 되는데 

기본 namespace를 변경하려면 context를 생성하여 namespace를 등록하고 변경해주어야한다.

 

반응형

댓글