본문 바로가기

Devops/Kubernetes

[Kubernetes] 네임스페이스(Namespace) 살펴보기

네임스페이스

  • 동일한 물리 클러스트를 기반으로 하는 논리적으로 구분된 가상 클러스터를 네임스페이스라고 한다.
  • 여러개의 팀이나 많은 사용자가 있는 경우, 클러스터안에서 여러개의 어플리케이션을 실행해야 하는 경우 사용
root@master:~# kubectl get namespace
NAME              STATUS   AGE
default           Active   10d
kube-node-lease   Active   10d
kube-public       Active   10d
kube-system       Active   10d

root@master:~# kubectl get deploy
No resources found in default namespace.

root@master:~# kubectl get deploy -n kube-system
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
calico-kube-controllers   1/1     1            1           10d
coredns                   2/2     2            2           10d

default : 기본 네임스페이스, 별도의 네임스페이스가 정의되지 않는 오브젝트들이 생성

kube-system : 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스

kube-public : 클러스터안의 모든 사용자가 읽기 권한으로 접근 가능한 네임스페이스, 모두가 확인해야 하는 클러스터 사용량 같은 정보가 이 네임스페이스에 관리된다.

kube-node-lease : 클러스터가 스케일링 될 때 노드 하트비트(hearbeat)의 성능을 향상시키는 각 노드와 관련된 리스(lease) 오브젝트에 대한 네임스페이스

 

kubectl 예제

root@master:~# kubectl get pods (디폴트로 default)
No resources found in default namespace.


root@master:~# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS        AGE
calico-kube-controllers-647d84984b-rbp5b   1/1     Running   1 (10d ago)     10d
calico-node-5hsqt                          1/1     Running   5 (6d23h ago)   10d
calico-node-6xmjl                          1/1     Running   0               10d
calico-node-gft4v                          1/1     Running   1 (10d ago)     10d
coredns-64897985d-2ndcp                    1/1     Running   1 (10d ago)     10d
coredns-64897985d-bn7r8                    1/1     Running   1               10d
etcd-master                                1/1     Running   1 (10d ago)     10d
kube-apiserver-master                      1/1     Running   1 (10d ago)     10d
kube-controller-manager-master             1/1     Running   4 (41h ago)     10d
kube-proxy-9hjlt                           1/1     Running   0               10d
kube-proxy-bvcx9                           1/1     Running   1 (10d ago)     10d
kube-proxy-jgv54                           1/1     Running   5 (6d23h ago)   10d
kube-scheduler-master                      1/1     Running   4 (41h ago)     10d


root@master:~# kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS        AGE
kube-system   calico-kube-controllers-647d84984b-rbp5b   1/1     Running   1 (10d ago)     10d
kube-system   calico-node-5hsqt                          1/1     Running   5 (6d23h ago)   10d
kube-system   calico-node-6xmjl                          1/1     Running   0               10d
kube-system   calico-node-gft4v                          1/1     Running   1 (10d ago)     10d
kube-system   coredns-64897985d-2ndcp                    1/1     Running   1 (10d ago)     10d
kube-system   coredns-64897985d-bn7r8                    1/1     Running   1               10d
kube-system   etcd-master                                1/1     Running   1 (10d ago)     10d
kube-system   kube-apiserver-master                      1/1     Running   1 (10d ago)     10d
kube-system   kube-controller-manager-master             1/1     Running   4 (41h ago)     10d
kube-system   kube-proxy-9hjlt                           1/1     Running   0               10d
kube-system   kube-proxy-bvcx9                           1/1     Running   1 (10d ago)     10d
kube-system   kube-proxy-jgv54                           1/1     Running   5 (6d23h ago)   10d
kube-system   kube-scheduler-master                      1/1     Running   4 (41h ago)     10d


root@master:~# kubectl get all --all-namespaces (모든 컴포넌트의 모든 네임스페이스에 대해서 출력)
NAMESPACE     NAME                                           READY   STATUS    RESTARTS        AGE
kube-system   pod/calico-kube-controllers-647d84984b-rbp5b   1/1     Running   1 (10d ago)     10d
kube-system   pod/calico-node-5hsqt                          1/1     Running   5 (6d23h ago)   10d
kube-system   pod/calico-node-6xmjl                          1/1     Running   0               10d
kube-system   pod/calico-node-gft4v                          1/1     Running   1 (10d ago)     10d
kube-system   pod/coredns-64897985d-2ndcp                    1/1     Running   1 (10d ago)     10d
kube-system   pod/coredns-64897985d-bn7r8                    1/1     Running   1               10d
kube-system   pod/etcd-master                                1/1     Running   1 (10d ago)     10d
kube-system   pod/kube-apiserver-master                      1/1     Running   1 (10d ago)     10d
kube-system   pod/kube-controller-manager-master             1/1     Running   4 (41h ago)     10d
kube-system   pod/kube-proxy-9hjlt                           1/1     Running   0               10d
kube-system   pod/kube-proxy-bvcx9                           1/1     Running   1 (10d ago)     10d
kube-system   pod/kube-proxy-jgv54                           1/1     Running   5 (6d23h ago)   10d
kube-system   pod/kube-scheduler-master                      1/1     Running   4 (41h ago)     10d

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  10d
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   10d

NAMESPACE     NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/calico-node   3         3         3       3            3           kubernetes.io/os=linux   10d
kube-system   daemonset.apps/kube-proxy    3         3         3       3            3           kubernetes.io/os=linux   10d

NAMESPACE     NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/calico-kube-controllers   1/1     1            1           10d
kube-system   deployment.apps/coredns                   2/2     2            2           10d

NAMESPACE     NAME                                                 DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/calico-kube-controllers-647d84984b   1         1         1       10d
kube-system   replicaset.apps/coredns-64897985d                    2         2         2       10d

 

기본 네임스페이스 변경

  • 쿠버네티스는 kubeconfig 라는 YAML 파일을 이용하여 kubectl 명령에 대한 클러스터 인증 정보 저장
  • KUBECONFIG 변수를 통해 config 파일의 저장 위치 결정 ($ echo $KUBECONFIG)
  • context는 access parameters 으로 각 context에는 쿠버네티스 클러스터, 사용자 및 인터페이스가 포함된다.
1) 현재 사용중인 context 확인
root@master:~# kubectl config current-context
kubernetes-admin@kubernetes

2) 현재 context의 access parameter 확인
root@master:~# kubectl config get-contexts kubernetes-admin@kubernetes
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin

3) 기본 네임스페이스를 "kube-system"으로 변경
root@master:~# kubectl config set-context kubernetes-admin@kubernetes --namespace=kube-system
Context "kubernetes-admin@kubernetes" modified.

root@master:~# kubectl config get-contexts kubernetes-admin@kubernetes
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   kube-system

4) 기본 네임스페이스를 "default" 다시 변경
root@master:~# kubectl config set-context kubernetes-admin@kubernetes --namespace=""
Context "kubernetes-admin@kubernetes" modified.

 

context 생성 / 삭제

1) 클러스터 접근 context 확인
root@master:~# kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://172.30.1.25:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:
    cluster: ""
    user: ""
  name: kubernetes@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

2) 새로운 context 생성 후 context 전환
root@master:~# kubectl config set-context kindlove@kubernetes --cluster kubernetes --namespace=kube-system
Context "kindlove@kubernetes" created.
root@master:~# kubectl config use-context kindlove@kubernetes
Switched to context "kindlove@kubernetes".

root@master:~# kubectl config current-context
kindlove@kubernetes

3) context 정보 등록 확인
root@master:~# kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kindlove@kubernetes           kubernetes                      kube-system
          kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
          kubernetes@kubernetes

4) 기존의 context로 전환하고, kindlove@kubernetes context 삭제하기
root@master:~# kubectl config use-context kubernetes-admin@kubernetes
Switched to context "kubernetes-admin@kubernetes".

root@master:~# kubectl config unset users.kindlove
Property "users.kindlove" unset.

root@master:~# kubectl config unset contexts.kindlove@kubernetes
Property "contexts.kindlove@kubernetes" unset.

 

-- The End --