본문 바로가기
IT/Kubernetes

[Kubernetes] Namespace

by 물통꿀꿀이 2019. 5. 14.

이번 포스팅에서는 k8s의 namespace에 대해 알아보자.


Namespace

Namespace는 k8s에서 사용하는 가상 클러스터이다. 즉, 리소스를 Namespace 단위로 분리하여 사용할 수 있게 한다.

한 예로 여러 사용자들이 사용하는 환경에서 리소스의 Label만 가지고 구분하기가 힘들다. 더욱이 많은 사용자들이 사용하다보면 리소스에 Label에 겹칠 수가 있다. 그렇기 때문에 각각 고유한 Namespace로 구분하여 동일한 Label이라도 Namespace가 다르면 사용할 수 있다.

이처럼 k8s는 Multi-tenant 환경에서 리소스를 적절히 분할하는데 큰 역할을 한다. (같은 이치로 복잡한 k8s 내부 사용 환경을 더 작게 분리한다.)

(참고로 Versioning을 위해 Namespace를 구성하는 것은 too much이며, 사소한 부분은 Label을 통해 구분하는 것이 낫다.)


그림 1. Namespace


그림 1은 Cluster(Local 환경)에 있는 Namespace이다. Docker Namespace는 Local 환경이 Docker 에서 구성되었기 때문에 만들어진 것이고 나머지 기본으로 구성되어있는 Namespace는 아래와 같다.

- default : 리소스에 Namespace를 설정하지 않으면 기본으로 포함되는 Namespace이다.

- kube-system : k8s system에 의해 생성된 Namespace이다.

- kube-public : Public 리소스를 의미하며 권한이 없더라도 해당 리소스를 Readable 할 수 있다.


그림 2. kube-system


그림 2에서 kube-system Namespace를 사용하는 모든 Pod의 목록을 확인 할 수 있다.

apiVersion: v1

kind: Namespace

metadata:

 name: custom-namespace 

그림 3. New namespace


Namespace를 만드는 방법은 여타 리소스에 비해 매우 간단하다. 매니페스트 파일을 통해 Namespace를 만들면 그림 3과 같이 custom-namespace가 생성된 것을 확인 할 수 있다. 이를 바탕으로 Pod를 생성해서 적용하면 아래와 같다.


그림 4. Applied namespace

'IT > Kubernetes' 카테고리의 다른 글

[Kubernetes] Internals - Pause Container  (0) 2019.05.16
[Kubernetes] Internals - Init Pod  (0) 2019.05.16
[Kubernetes] Networking - Pods  (0) 2019.04.27
[Kubernetes] Networking - Kube Proxy  (0) 2019.04.26
[Kubernetes] Liveness & Readiness Probe  (0) 2019.04.26

댓글