Kubernetes Namespace란?

2022. 2. 22. 21:24Kubernetes

실무에서 아저씨들이 일하는 것을 지켜보다보면 그거 네임스페이스 어디다 배포했어요? 라는 말을 심심치 않게 들을 수 있다. 

며칠 전에도 이와 같은 내용을 들었지만 이해하지 못하는 내 자신이 한스러워 kubernetes namespace에 대해 검색해보았다.

 

kubernetes namespace는 거창한 개념이 아니었다. 말 그대로 이름으로 공간을 나누는 것이다.

Kubernetes에서는 클러스터 > 노드 > 팟의 hierarchy를 가지는데, namespace는 클러스터 단위에서 논리적으로 구분을 하는 개념이다. 사실상 하나의 물리클러스터 안에 여러개의(namespace 개수만큼) 가상클러스터를 만든다고 봐도 된다. 

그래서 다른 namespace에 존재하는 Object끼리 통신이 가능하다는 점을 잊어서는 안된다. 

 

그렇다고해서 모든 Object에 namespace 개념을 적용할 수 있는 것은 아니다. 

namepsace기반 오브젝트는 디플로이먼트, 서비스, Pod, Replication Controller 등이 있고

클러스터 범위의 오브젝트인 스토리지클래스, 노드, PV(Persistent Volume)등에는 적용이 불가능하다.

 

다음과 같이 terminal에서 입력해보면 namespace 기반 오브젝트가 어떤 것들이 있는지 확인해볼 수 있다.

# 네임스페이스에 속하는 리소스
kubectl api-resources --namespaced=true

# 네임스페이스에 속하지 않는 리소스
kubectl api-resources --namespaced=false

 

그리고 초기 네임스페이스는 4개가 있는데 그 namespace는 다음과 같다.

 

 

kube-system은 kubernetes 시스템에서 생성한 오브젝트,

kube-public은 전체 클러스터에서 공개적인 리소스를 위해 예약돼있다.

kube-node-lease는 각각의 노드와 연결된 Lease Object를 가지고 있다. Node Lease는 노드의 장애여부를 control plane에 전달해주는 역할을 한다. 

 

 

 

위에서 Namespace는 하나의 클러스터안에 여러개의 가상클러스터를 만드는 것이라고 했다. 다른 말로하면 Namespace별로 리소스도 다르게 설정할 수 있다는 것이다. 예를 들면 개발 환경의 리소스는 10%, 스테이지는 20%, 운영은 70%와 같은 비율로 나눌 수 있다. 다른 관점에서는 하나의 클러스터에 여러개의 팀이 작업을 한다면 리소스를 필요한만큼 나눠서 쓸 수 있다고도 볼 수 있다. 

 

이제 namespace에 대해 어느정도는 알게된 것 같다. 앞으로 Kubernetes Namespace에 대한 이야기나 나오면 쫄지 않도록하자. 

'Kubernetes' 카테고리의 다른 글

Persitent Volume, Persistent Volume Claim, Storage Class  (0) 2022.03.26
RBAC 설정하는 방법  (0) 2022.03.25
Kubernetes Config란?  (0) 2022.03.24
Kube-api-server란?  (0) 2022.02.27
ETCD란?  (0) 2022.02.27