IT/CKA

CKA 준비과정 - Kubernetes 개념 (7) / Namespaces

Primes 2023. 5. 6. 16:50
728x90

쿠버네티스는 각종 리소스들을 서비스 구성을 위해 자동으로 생성한다. 이 때, 원활한 리소스 관리 및 휴먼 폴트를 방지하기 위해 유저로부터 중요한 리소스들을 격리한다. 위의 이미지와 같이, Namespaces 를 따라 리소스들을 분리하여 생성하게 된다.

kube-system 은 클러스터를 시작할 때 생성하고, kube-public 은 모든 사용자가 사용할 수 있어야 하는 리소스들이 생성되는 namespace 이다. 기본적으로, 유저가 작업하는 namespace는 Default 공간이 된다.

 

일반적인 테스트 환경이나 작은 환경에서는 Default 공간에서만 작업해도 크게 문제가 없다. 하지만 기업 규모로 쿠버네티스를 도입하게 되면 모든 리소스 관리를 Default 에서만 생성하고 관리하기 어렵다. 이러할 때, 새로운 namespace 공간을 생성하여 관리하는 것을 고려할 수 있다.

 

실무적 관점에서 보자면, Test 서버와 Real 서버를 분리하여 관리하듯이 Test Namespace와 Real Namespace를 분리하여 리소스를 생성하는 것처럼 이용할 수 있을 것이다. 이렇게 개발 환경 및 실제 서비스 제공 환경을 분리하여 실수로 다른 환경에서 리소스를 수정하는 일을 방지한다.

 

각 Namespace는 리소스 할당량을 정하고, 고유한 정책을 설정할 수도 있다. 관리자가 설정할 수 있는 Playground 라고 이해하면 좋을 것으로 보인다. 리소스 할당량을 할당할 경우, 한도 이상으로는 리소스를 생성할 수 없다.

 

같은 Namespace 내에서는, 각 리소스들을 이름으로 참조할 수 있다. 예를 들자면 각 파드들간 통신을 할 때, 호스트 이름을 통해서 접근을 할 수 있다. 예를 들자면, 웹 어플리케이션은 호스트 이름을 통해 DB 서비스에 접근할 수도 있다.

이 때, 다른 namespace의 서비스도 웹 어플리케이션 파드를 참조하도록 설정할 수도 있다. 다른 namespace 서비스의 접근을 원한다면, 서비스 이름에 네임스페이스 이름을 추가하여야 한다.

ex) default namespace의 web pod 일 경우, servicename.svc.cluster.local 형식을 사용한다. 따라서 DB에 연결을 원한다면 db-service.dev.svc.cluster.local 이 된다.

DNS 항목을 살펴보자.

cluster.local => default namespace의 도메인 이름이다.

svc => namespace 뒤에 위치하며 서비스의 하위 도메인이다.

servicename => 서비스 이름

 

 

Namespace 활용

우리는 앞선 실습에서, 아래 명령어를 자주 활용하였다.

kubectl get pods

=> 해당 명령어는 default namespace의 파드들을 조회하는 명령어이다.

 

다른 namespace에 속한 파드들을 조회하고 싶다면, namespace 옵션을 추가해야 한다.

kubectl get pods --namespace=kube-system

 

만일 default 가 아닌 다른 namespace에 파드를 생성하고 싶다면 옵션을 위와같이 추가해주어야 한다.

 

Namespace 생성 방법

1. definition file

yaml 파일에서, kind 필드의 값을 Namespace로 지정하고 생성한다.

파일 생성 후 kubectl create -f namespace-dev.yml 입력

 

2. 커맨드 실행

kubectl create namespace dev

 

반응형