쿠버네티스 교육/강의 내용 정리

220621_3_k8s_네임스페이스_생성 및 삭제

kimhope 2022. 6. 21. 17:20
728x90

네임스페이스


namespace: 네임스페이스

네임스페이스란

  • 오브젝트를 논리적으로 분리할 수 있는 논리적 파티션

 

네임스페이스

  • 기본 네임스페이스
항목 설명
default 기본 네임스페이스
kube-node-lease - 쿠버네티스 노드의 가용성을 체크하기 위한 네임스페이스
- 해당 네임스페이스에는 하트비트를 위한 리스 오브젝트가 있음
- 쿠버네티스 1.14 이상
kube-public - 모든 사용자(인증받지 않은 사용자 포함)가 읽기 권한으로 접근할 수 있음
- 관례적으로 만들어져 있찌만 아무 리소스도 없고, 꼭 사용해야하는 것은 아님
kube-system 쿠버네티스 클러스터의 핵심 리소스 배치

 

  • 추가 네임스페이스
항목 설명
ingress-nginx 쿠버네티스 인그레스 리소스를 위한 Nginx 인그레스 컨트롤러 배치
rook-ceph Rook Ceph 스토리지 관련 리소스 배치

 

네임스페이스 사용

  • 기본 네임스페이스 확인
vagrant@kube-master1:~$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   23h
ingress-nginx     Active   23h
kube-node-lease   Active   23h
kube-public       Active   23h
kube-system       Active   23h

 

  • 네임스페이스 생성
vagrant@kube-master1:~/test$ vi testnamespace.yml

 

 

  • yml 파일을 이용하여 네임스페이스 생성
vagrant@kube-master1:~/test$ kubectl create -f testnamespace.yml
namespace/test-ns created

 

  • 네임스페이스 목록 출력
  • 생성된 test-ns 네임스페이스 확인
vagrant@kube-master1:~/test$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   23h
ingress-nginx     Active   23h
kube-node-lease   Active   23h
kube-public       Active   23h
kube-system       Active   23h
test-ns           Active   34s

 

  • 파드는 같은 이름으로 중복 생성되지 않음
  • 현재 default 네임스페이스에서 testapp-pod가 실행되고 있음
vagrant@kube-master1:~/test$ kubectl create -f testapp-pod.yml
Error from server (AlreadyExists): error when creating "testapp-pod.yml": pods "testapp-pod" already exists

 

  • test-ns 네임스페이스에 testapp-pod 파드 생성
  • 네임스페이스는 논리적으로 격리된 공간이므로 default 네임스페이스에 생성된 파드의 이름과 동일해도 파드가 생성됨 
vagrant@kube-master1:~/test$ kubectl create -f testapp-pod.yml -n test-ns
pod/testapp-pod created

 

 

  • test-ns 네임스페이스에서 실행 중인 testapp-pod 파드 확인
vagrant@kube-master1:~/test$ kubectl get pods -n test-ns
NAME          READY   STATUS    RESTARTS   AGE
testapp-pod   1/1     Running   0          12s

vagrant@kube-master1:~/test$ kubectl get pods testapp-pod -n test-ns1 -o yaml | grep -i namespace
  namespace: test-ns1
  selfLink: /api/v1/namespaces/test-ns1/pods/testapp-pod
  
vagrant@kube-master1:~/test$ kubectl get pods testapp-pod-ns -n test-ns2 -o yaml |
 grep -i namespace
  namespace: test-ns2
  selfLink: /api/v1/namespaces/test-ns2/pods/testapp-pod-ns

 


 

실습


 

namespace 생성

  • yml 파일을 이용하여 myns1 네임스페이스 생성
vagrant@kube-master1:~/exam$ vi exam-ns.yml
apiVersion: v1
kind: Namespace
metadata:
  name: myns1
  
vagrant@kube-master1:~/exam$ kubectl create -f exam-ns.yml
namespace/myns1 created

 

  • 명령을 이용한 myns2 네임스페이스 생성
vagrant@kube-master1:~/exam$ kubectl create namespace myns2
namespace/myns2 created

 

  • 네임스페이스 생성 확인
vagrant@kube-master1:~/exam$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   24h
ingress-nginx     Active   24h
kube-node-lease   Active   24h
kube-public       Active   24h
kube-system       Active   24h
myns1             Active   11m
myns2             Active   6m33s

 

pod 생성

  • default namespace에 exam-pod 생성
vagrant@kube-master1:~/exam$ kubectl create -f exam-pod.yml

 

  • myns1 namespace에 exam-pod 생성
  • 조건: 명령어에 -n 옵션 부여
vagrant@kube-master1:~/exam$ kubectl create -f exam-pod.yml -n myns1
pod/exam-pod created

 

 

  • myns2 namespace에 exam-pod 생성
  • 조건: yml 파일을 이용하여 파드 생성
vagrant@kube-master1:~/exam$ vi exam-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: exam-pod
  namespace: myns2
spec:
  containers:
  - name: default
    image: c1t1d0s7/myweb
    ports:
    - containerPort: 8081
      protocol: TCP
      
vagrant@kube-master1:~/exam$ kubectl create -f exam-pod.yml
pod/exam-pod created

 

 

실행 중인 파드 정보 확인

  • 네임스페이스: default
vagrant@kube-master1:~/exam$ kubectl get pods -n default
NAME       READY   STATUS    RESTARTS   AGE
exam-pod   1/1     Running   0          9s

 

  • 네임스페이스: myns1
vagrant@kube-master1:~/exam$ kubectl get pods -n myns1
NAME       READY   STATUS    RESTARTS   AGE
exam-pod   1/1     Running   0          7m8s

 

  • 네임스페이스: myns2
vagrant@kube-master1:~/exam$ kubectl get pods -n myns2
NAME       READY   STATUS              RESTARTS   AGE
exam-pod   0/1     ContainerCreating   0          5s

 

리소스 삭제

  • myns2
  • 명령을 이용해 myns2 네임스페이스 삭제
  • & 옵션을 이용해 네임스페이스와 파드가 삭제되는 동안 다른 명령을 수행할 수 있도록 함
  • & 옵션을 사용하지 않으면 리소스가 삭제되는 동안 다른 작업 불가
vagrant@kube-master1:~/exam$ kubectl delete namespaces myns2 &
[1] 11067
vagrant@kube-master1:~/exam$ namespace "myns2" deleted

 

  • myns1
  • myns1 네임스페이스를 생성한 yml 파일을 이용하여 삭제
vagrant@kube-master1:~/exam$ kubectl delete -f exam-ns.yml
namespace "myns1" deleted

 

  • default
  • exam-pod.yml 파일에서 namespace: myns2 부분을 지우고 저장
vagrant@kube-master1:~/exam$ vi exam-pod.yml

vagrant@kube-master1:~/exam$ kubectl get pods
No resources found in default namespace.
728x90