본문 바로가기
서버인프라/kubernetes

[제 7강] NameSapace

by techwold ted 2022. 12. 29.

NameSpace

Kubernetes에서 네임스페이스는 단일 클러스터 내의 리소스 그룹을 격리하는 메커니즘을 제공합니다. 리소스 이름은 네임스페이스 내에서 고유해야 하지만 네임스페이스 간에는 고유하지 않습니다. 네임스페이스 기반 범위 지정은 네임스페이스 개체(예: 배포, 서비스 등)에만 적용되며 클러스터 전체 개체(예: 스토리지 클래스, 노드, 영구 볼륨 등)에는 적용되지 않습니다.

 

초기 네임스페이스

Kubernetes starts with four initial namespaces:

default
Kubernetes는 네임스페이스를 먼저 만들지 않고 새 클러스터를 사용할 수 있도록 이 네임스페이스를 포함합니다.

kube-node-lease
이 네임스페이스에는 각 노드와 연결된 리스 개체가 있습니다. 노드 임대를 사용하면 제어부에서 노드 장애를 감지할 수 있도록 큐블릿이 하트비트를 전송할 수 있습니다.

kube-public
이 네임스페이스는 인증되지 않은 클라이언트를 포함한 모든 클라이언트에서 읽을 수 있습니다. 이 네임스페이스는 일부 리소스가 전체 클러스터에서 공개적으로 표시되고 읽을 수 있어야 하는 경우 대부분 클러스터 사용을 위해 예약되어 있습니다. 이 네임스페이스의 공용 부분은 규칙일 뿐 요구 사항은 아닙니다.

kube-system

Kubernetes 시스템에서 만든 개체의 네임스페이스입니다.
 

 

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/

 

Namespaces

In Kubernetes, namespaces provides a mechanism for isolating groups of resources within a single cluster. Names of resources need to be unique within a namespace, but not across namespaces. Namespace-based scoping is applicable only for namespaced objects

kubernetes.io

쿠버네티스 네임스페이스에대한 자세한 사항은 위에서 확인 하실 수 있습니다.

'서버인프라 > 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

댓글