네임스페이스(Namespace)

쿠버네티스에서 용도에 따라서 리소스들을 구분지어서 논리적인 그룹을 지어주는 기능이 있다. 이 또한 오브젝트(Object)의 형태로 제공하며 이를 네임스페이스(Namespace)라고 한다. 네임스페이스는 파드, 레플리카셋, 디플로이먼트, 서비스 등을 그룹지어주는 오브젝트이다.

Namespace Get

다음 명령어로 클러스터에 존재하는 네임스페이스를 확인할 수 있다.

$ sudo kubectl get namespace
# or 
$ sudo kubectl get ns

실행을 한다면 아마 기본적으로 default, kube-public, kube-system의 3가지는 있는 것을 확인 할 수 있다. 우리가 파드(Pod)를 생성 할 때 따로 명시적인 네임스페이스를 지정하지 않았다면 default 네임스페이스에 리소스들이 생성된다.

또한 kube-system 네임스페이스에는 쿠버네티스 클러스터를 구성하는 필수 파드들이 생성되어있다. 해당 네임스페이스에 있는 파드들은 웬만해서는 건드릴 일이 없지만 건드리더라도 각 파드의 기능에 대한 충분한 이해를 필요로 한다.

네임스페이스의 의의

네임스페이스는 쿠버네티스의 리소스들을 논리적으로 묶어준다. 하지만 물리적으로 격리된 것은 아니라는 점에 주의하자. 용도에 따라 네임스페이스를 여러개 만들어서 리소스를 관리하거나 사용자 별로 네임스페이스를 별도로 주어 관리를 용이하게 할 수 있다.

네임스페이스 생성

네임스페이스는 다른 리소스처럼 YAML 파일을 통해 만들거나 바로 터미널에서 커맨드로 만들 수 있다.

YAML 파일로 생성

YAML 파일을 간단하게 다음과 같이 정의하여 만들 수 있다. yaml 파일 이름은 my-namespace.yaml 이라고 가정한다.

apiVersion: v1
kind: Namespace
metadata:
  name: mynamespace

해당 파일을 만들었다면 파드같은 리소스를 생성할 때와 같이 apply 명령어를 이용해 생성한다.

$ sudo kubectl apply -f my-namespace.yaml

커맨드로 생성

yaml 파일을 사용하지 않고 명령어만으로 만드려면 kubectl create 명령어를 이용하여 생성한다.

$ sudo kubectl create namespace mynamespace

리소스에 네임스페이스 적용

리소스(파드, 레플리카셋, 디플로이먼트, 서비스)에 네임스페이스를 적용하려면 YAML 파일의 metadata.namespace 필드를 정의하면 된다. 간단한 파드를 생성하는 예시를 들어본다.

apiVersion: v1
kind: pod
metadata:
  name: my-app
  namespace: mynamespace
spec:
...

위의 예시와 같이 필드 구성에 네임스페이스를 명시하면 해당 리소스는 해당 네임스페이스 이름으로 논리적인 그룹에 속하게 된다.

리소스의 확인

기존 네임스페이스를 명시하지 않은 리소스는 일반적으로 default 네임스페이스에 속한다. 그래서 다음 명령어들로 리소스를 확인했을 때 결과들이 정상적으로 나왔을 것이다.

$ sudo kubectl get po           # pods
$ sudo kubectl get svc          # service
$ sudo kubectl get deploy       # deployment
$ sudo kubectl get rs           # replicaset

그러나 네임스페이스를 따로 지정한 리소스는 다음의 결과에 포함되어있지 않게 된다. 그래서 -n 혹은 --namespace 옵션으로 리소스를 조회 시 네임스페이스 이름을 지정해줘야한다. 다음과 같은 방식으로 사용한다.

$ sudo kubectl get -n mynamespace pods

네임스페이스의 삭제

네임스페이스는 다른 리소스들 처럼 삭제하는 방식이 동일하다.

# sudo kubectl delete -f <YAML파일명>
$ sudo kubectl delete -f my-namespace.yaml

# 또는 sudo kubectl delete namespace <네임스페이스 이름>
$ sudo kubectl delete namespace mynamespace

여기서 매우 중요한 것이 있다. 네임스페이스를 삭제하면 해당 네임스페이스에 존재하는 모든 리소스 또한 함께 삭제된다. 그렇기 때문에 본인이 네임스페이스를 삭제할 것 이라면 해당 네임스페이스에 포함된 리소스들이 다 같이 삭제되어도 괜찮은 것인지 꼭 확인해야 한다.

참고: 쿠버네티스 네임스페이스

댓글남기기