NameSpace
Kubernetes에서 네임스페이스는 단일 클러스터 내의 리소스 그룹을 격리하는 메커니즘을 제공합니다. 리소스 이름은 네임스페이스 내에서 고유해야 하지만 네임스페이스 간에는 고유하지 않습니다. 네임스페이스 기반 범위 지정은 네임스페이스 개체(예: 배포, 서비스 등)에만 적용되며 클러스터 전체 개체(예: 스토리지 클래스, 노드, 영구 볼륨 등)에는 적용되지 않습니다.
초기 네임스페이스
Kubernetes starts with four initial namespaces:
default
Kubernetes는 네임스페이스를 먼저 만들지 않고 새 클러스터를 사용할 수 있도록 이 네임스페이스를 포함합니다.
kube-node-lease
이 네임스페이스에는 각 노드와 연결된 리스 개체가 있습니다. 노드 임대를 사용하면 제어부에서 노드 장애를 감지할 수 있도록 큐블릿이 하트비트를 전송할 수 있습니다.
kube-public
이 네임스페이스는 인증되지 않은 클라이언트를 포함한 모든 클라이언트에서 읽을 수 있습니다. 이 네임스페이스는 일부 리소스가 전체 클러스터에서 공개적으로 표시되고 읽을 수 있어야 하는 경우 대부분 클러스터 사용을 위해 예약되어 있습니다. 이 네임스페이스의 공용 부분은 규칙일 뿐 요구 사항은 아닙니다.
kube-system
NameSpace 확인
kubectl get namespaces
NAME STATUS AGE
default Active 17d
kube-node-lease Active 17d
kube-public Active 17d
kube-system Active 17d
NameSpace 생성
kubectl create namespace green
namespace/green created
위와 같이 namespace생성 하는 방법도 있고, 우리가 이전 시간에 많이 사용하였던 --dry-run을 활용하여 yaml 파일을 만들어서 생성하는 방법이 있습니다.
kubectl create namespace red --dry-run -o yaml > namespace_red.yaml
kubectl create -f namespace_red.yaml
namespace/red created
NameSpace 를 다시 확인해 보면 green, red 가 생성 된 것을 확인 하실 수 있습니다.
이제 해당 생성한 네임스페이스에 pod를 생성해 보겠습니다.
root@master:~/yaml# kubectl run red-nginx --image=nginx -n=red
pod/red-nginx created
root@master:~/yaml# kubectl run green-nginx --image=nginx -n=green
pod/green-nginx created
저는 네이스페이스 red와 green에 하나씩 nginx이미지를 활용하여 pod를 생성했습니다. 잘 생성 되었는지 확인 해보겠습니다.
kubectl get pods
No resources found in default namespace.
다들 이렇게 나오시나요? kubectl get pods 하면 지금 현제 default로 namespace가 설정 되어 있기 때문인데 이 얘기는 아래와 같습니다.
kubectl get pods --namespace=default
No resources found in default namespace.
root@master:~/yaml# kubectl get pods --namespace=green
NAME READY STATUS RESTARTS AGE
green-nginx 1/1 Running 0 5m
root@master:~/yaml# kubectl get pods --namespace=red
NAME READY STATUS RESTARTS AGE
red-nginx 1/1 Running 0 5m27s
namespace에 대해 지정해 주면 다음과 같이 우리가 방금 설정하였던 nginx들을 확인 할 수 있습니다.
우선 현재 config view를 확인해 보시면 namespace에 대한 사항이 없습니다. 하지만 맨 처음 얘기들였던 봐와 같이 default 라는 네임스페이스에 pod들이 생성 되었습니다. 기본 네임스페이스에서 우리는 red를 기본 네이스페이스로 변경해 보도록 하겠습니다. 변화 과정을 잘 살펴 보세요
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://10.0.1.180:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
기본 네임스페이스 변경
kubectl config set-context --current --namespace=red
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://10.0.1.180:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
namespace: red
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
kubectl get pods
NAME READY STATUS RESTARTS AGE
red-nginx 1/1 Running 0 14m
위의 일련의 과정이 이해가 가시나요 우리는 현제 red라는 명칭의 네임스페이스를 default 네임스페이스로 변경 하였고, 위에서는 --namespce라는 것을 주고 해당 네이스페이스에 pod를 생성하였지만 현재는 아래와같이 생성해 주면 red 라는 네이스페이스에 pod가 그냥 생성되어 버립니다.
kubectl run red2-nginx --image=nginx
그럼 default 네임스페이에 생성하려면 다시 다음과 같이 해야 겠죠?
kubectl run default-nginx --image=nginx --namespace=default
pod/default-nginx created
이해가 가셨나요 그럼 이제 다시 default 네임스페이를 기본 네이스페이로 돌리고, red와 green 네임스페이스를 삭제하겠습니다. 여기서 우리가 삭제하면서 하나 배울 수 있는 것은 네임스페이스를 삭제하면 해당 네임스페이스 안에 있던 pod들이 다 삭제되어 버립니다. 주의해서 작업해야 합니다.
kubectl delete namespaces red
https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
쿠버네티스 네임스페이스에대한 자세한 사항은 위에서 확인 하실 수 있습니다.
'서버인프라 > kubernetes' 카테고리의 다른 글
[제 9강] Ingress (0) | 2023.01.05 |
---|---|
[제 8강] Service (2) | 2023.01.04 |
[제 6강] Updating a Deployment (1) | 2022.12.27 |
[제 5강] Deployments (0) | 2022.12.25 |
[제 4강] ReplicaSet (0) | 2022.12.21 |
댓글