[쿠버네티스] 네임스페이스

황서희·2023년 2월 15일
0
post-thumbnail

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/namespaces/ 참조

네임스페이스

네임스페이스는 단일 클러스터 내에서 리소스를 격리하기 위해 사용한다. 서버는 결국 가용성이 가장 중요하다. 가용성을 높이기 위해선 기본적으로 어플리케이션 간의 격리가 필요하다. 컴퓨터가 컨테이너 환경으로 발전하게 된 가장 큰 이유 역시 가용성을 높이기 위해서이다.

대부분의 주요 리소스들은 네임스페이스를 사용한다.(특정 네임스페이스에 속해야 한다.) 리소스의 이름은 네임스페이스 내에서 유일해야 하며, 네임스페이스 간에서 유일할 필요는 없다.

네임스페이스를 필수로 사용할 필요는 없으나, 프로젝트의 규모가 커질수록 용이한 관리를 위해 네임스페이스를 이용하는 것이 유리하다. 일반적으로는 큰 클러스터 내에서 작은 네임스페이스를 통해 관리하는 시스템으로 이루어져 있다.

kubectl get namespaces

해당 명령어를 통해 네임스페이스를 확인할 수 있다.

kubectl create ns development

해당 명령어를 통해 네임스페이스를 생성할 수 있다.

kubectl get pods -A

모든 네임스페이스에 존재하는 모든 pod를 보여달라는 명령어이다. 쿠버네티스의 핵심 리소스들은 kube-system 네임스페이스에 대부분 존재하고 있다.

kubectl -n kube-system describe pod

명령어에서 -n 을 통해 특정 네임스페이스를 지정할 수 있다.

쿠버네티스가 갖는 네 개의 초기 네임스페이스 (default, kube-system, kube-public, kube-node-lease) kube-node-lease는 lease라고 하는 특수 오브젝트를 갖고 있다. 노드 리스는 하트비트를 보내 노드의 상태를 체크하는 용도로 쓰인다.

kubectl create -f myapp-pod.yaml -n kube-public
kubectl delete -f myapp-pod.yaml -n kube-public

default 네임스페이스가 아닌 kube-public 네임스페이스에 pod가 생성/삭제된다.

yaml파일에서도 네임스페이스를 지정하여 생성할 수 있지만, 추천되는 방법은 아니다. 왜냐하면 yaml 파일에서 지정해놓으면 우선순위가 위에 있기 때문에 커맨드를 통해 네임스페이스를 변경할 수 없기 때문이다.

kubectl create -f myapp-pod-ns.yaml -n default #네임스페이스 변경 불가능

네임스페이스를 지우기 전에는 네임스페이스 안의 리소스를 모두 지우고 삭제하는 것이 추천된다. 네임스페이스는 보통 yaml 로 설정하지 않고, create 명령어를 통해 생성하는 경우가 많다.

apiVersion: v1
kind: Namespace
metadata:
	name: quality-assurance

명령어를 통해 config를 확인할 수 있다.

kubectl config get-contexts

명령어를 통해 config에서 아무런 옵션을 붙이지 않았을 때 pod를 생성할 네임스페이스를 지정할 수 있다.

kubectl config set-context kubernetes-admin@cluster.local --namespaces=kube-system
kubectl config set-context --current --namespaces=kube-system

kubens

https://github.com/ahmetb/kubectx

wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubens
sudo install kubens /usr/local/bin

kubens 명령어를 치면 네임스페이스가 나온다.

kubens kube-system

을 통해 기본 네임스페이스를 쉽게 바꿀 수 있다.

profile
다 아는 건 아니어도 바라는 대로

0개의 댓글