Cloud Engineering/Kubernetes ⚙️

[Kubernetes] Namespace 생성, 삭제, 확인하기

minjiwoo 2023. 2. 9. 17:59
728x90

Kubernetes Namespace란 

쿠버네티스 클러스터를 논리적으로 분할하는 파티션이다. 즉, 클러스터 내에서 오브젝트를 논리적으로 파티셔닝해서 사용할 수 있다. 

주의 ) 도커컨테이너의 리눅스 네임스페이스와는 관련이 없다. 쿠버네티스의 네임스페이스 개념은 따로 이해해야 한다.

 

클러스터의 Namespace 정보 확인하기 

$ kubectl get namespace
vagrant@kube-control1:~/work/mj$ kubectl get namespace
NAME              STATUS   AGE
default           Active   24h
kube-node-lease   Active   24h
kube-public       Active   24h
kube-system       Active   24h
  • default : 별도로 네임스페이스를 지정하지 않으면 기본 네임스페이스인 default namespace를 사용한다.
  • kube-node-lease: 쿠버네티스 노드의 가용성을 체크하기 위한 네임스페이스

    이 네임스페이스의 목적이 이해가 잘 안되서 좀 더 찾아보았다. 
    각각의 Node들은 이에 대응하는 Lease object라는 것이 있다. 이 Lease object는 kube-node-lease 네임스페이스에 있다. 
    lease object의 역할을 이해하면 이 네임스페이스에 대한 역할을 이해할 수 있다. 
    kubelet heart beat 가 쿠버네티스의 Node가 제대로 돌아가는 상태인지 아닌지 (= 가용성) 확인하기 위해서 Lease object에 Node의 상태를 update를 해달라고 요청을 한다. 즉, Lease object는 가용성을 확인할 것이며 kube-node-lease에 배치되어있다. 

  • kube-public : 모든 사용자들이 읽기전용으로 접근 가능
  • kube-system : 쿠버네티스 클러스터의 핵심 object가 만들어지는 네임스페이스

 

namespace를 지정하여 pod object 목록 확인하기 

kubectl get pods 명령어에서 namespace를 따로 지정하지 않으면 default namespace의 내용을 출력한다.

-n 옵션 뒤에 namespace를 지정한다. 

$ kubectl get pods -n kube-system

 

모든 namespace에 있는 pod object 의 목록 확인하기 

$ kubectl get pods -A

주의 !!) $ kubectl get all 은 모든 종류의 오브젝트를 다 보여주는 것이 아니다. 쿠버네티스의 가장 기본적인 오브젝트인 pod, controller object, 쿠버네티스 네트워크 관련된 설정을 하는 service object 을 보여준다.

namespace 생성하기

1. command로 namespace 생성 

$ kubectl create namespace NAMESPACE_NAME

 

2. Manifest File을 이용하여 네임스페이스를 생성

new_ns.yaml 파일 내용을 다음과 같이 구성한다. 

apiVersion: v1
kind: Namespace
metadata:
  name: new_namespace

Manifest File을 이용하여 생성한다. 

$ kubectl create -f new-ns.yaml

 

특정 namespace 에서 오브젝트 생성하기

1. command 로 생성하기 

$ kubectl create -f MANIFEST_FILE -n NAME_SPACE

 

2. Manifest File로 생성하기 

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  namespace: development
spec:
  containers:
  - name: myapp
    image: ghcr.io/c1t1d0s7/go-myweb:alpine
    ports:
    - containerPort: 8080
      protocol: TCP

.yaml 파일 (Manifest File) 을 이용하여 pod을 생성하면 지정한 namespace에 생성된다. 

$ kubectl create -f myapp.yaml

 

네임스페이스 삭제하기

1. command 로 삭제 

$ kubectl delete namespace NAMESPACE_NAME

 

2. namespace에 대해 정의한 manifest  file 을 이용하여 삭제하기 

$ kubectl delete -f NAMESPACE_MANIFESTFILE

 

namespace를 삭제하면 namespace 안에 있는 object들도 제거가 된다. 실제 실행순서는 object들이 먼저 제거된 후 namespace가 삭제되는 것이다.

728x90