본문 바로가기

About/Kubernetes

[k8s][따배쿠] 쿠버네티스 아키텍처 - namespace

https://www.youtube.com/watch?v=pfkx8KDAZyk&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=8 

본 포스팅은 따배쿠(따라하면서 배우는 쿠버네티스) 4-2. 쿠버네티스 아키텍처 - namespace 편을 보고 정리한 내용입니다.


쿠버네티스 namespace


쿠버네티스에서 namespace란

- 클러스터 하나를 여러 개의 논리 적인 단위로 사용할 수 있게 해주는 k8s API 

- 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 공유하게 됩니다.

- 용도에 따라 실행해야 하는 앱을 구분할 때 사용할 수 있습니다.

namespace

위의 그림 처럼 클러스터가 하나여도 그 안에서 논리적으로 구분하고자 할 때 namspace를 사용합니다.

위의 예시에서는 실행할 애플리케이션의 분류에 따라 나누었지만, production 환경, beta test 환경, dev 환경 등으로도 구분할 수 있습니다.

만약 blue namespace에서 kubectl get pods 명령어를 입력하면 홈쇼핑 애플리케이션을 위해 실행 중인 애플리케이션(파드)만 출력되게 됩니다. 

namespace API

이처럼 수많은 파드들을 구분하기 위해 namespace를 사용합니다. 여러 서비스를 운영하고 있거나 같은 서비스여도 여러 환경에서 운영하고 있을 때 namespace를 이용해서 논리적으로 분리하여 관리할 수 있습니다.

namespace 실습


CLI를 이용한 namespace 생성

namespace blue를 생성하기위한 커맨드는 다음과 같습니다.

1
2
$ kubectl create namespace blue
$ kubectl get namespaces
cs

blue namespace 생성 결과

yaml 파일을 이용한 namespace 생성

yaml파일을 통해 namespace green을 생성하기 위한 명령어는 다음과 같습니다.

--dry-run 옵션은 실제로 실행하지 않고 실행 가능 여부만 확인하는 옵션입니다.
-o yaml 옵션은 실행 결과를 yaml 파일로 출력하라는 의미입니다.

해당 명령어의 결과(출력)를 green-ns.yaml 파일에 저장하고, 해당 파일의 내용을 kubectl create 명령어를 통해 생성합니다.

1
2
3
$ kubectl create namespace green --dry-run -o yaml > green-ns.yaml
$ cat green-ns.yaml
$ kubectl create -f green-ns.yaml
cs

yaml 파일을 이용하여 namespace 생성 결과

namespace 관리

쿠버네티스 namespace들을 불러오고 삭제하는 명령어는 다음과 같습니다.

1
2
$ kubectl get namespace
$ kubectl delete namespace
cs

namespace 삭제 결과

추가로 kube-public, kube-system kube-node-lease 등 기본적으로 생성된 namespace가 있습니다.
쿠버네티스가 동작하기 위해 기본적으로 생성된 namespace들입니다.

namespace kube-system에서 동작중인 namespace를 조회하면 다음과 같습니다. 
etcd, kube-proxy, kube-scheduler 등 쿠버네티스 아키텍처에서 살펴보았던 요소들이 파드로 실행중인 것을 확인할 수 있습니다.

2022.03.23 - [About/Kubernetes] - [k8s][따배쿠] 쿠버네티스 아키텍처 - Kubernetes 동작 원리

kube-system에서 동작 중인 파드

사용할 namespace switch

기본으로 사용 중인 namespace는 default 입니다.

기본으로 사용하는 namespace를 default가 아닌 다른 이름의 namespace로 switch할 수 있습니다. 방법은 다음과 같습니다.

1. namespace를 포함한 context 등록

context 이름은 원하는 이름으로 사용하면 됩니다. 저는 BLUE로 하도록 하겠습니다.

1
2
3
$ kubectl config --help
$ kubectl config set-context <context 이름> --cluster=kubernetes --user=kubernetes-admin --namespace=blue
$ kubectl config view
cs

생성된 context

2. 등록된 namespace로 context 변경

1
$ kubectl config use-context <context 이름>
cs

변경된 context

위와 같이 context를 변경하고 난 후에는 터미널의 기본 namespace가 blue로 변경되므로 입력하는 명령어는 기본적으로 blue namespace에서 동작하는 리소스에만 적용되게 됩니다.


쿠버네티스 아키텍처 중 namespace에 대하여 알아보았습니다.