본문 바로가기

kubernetes

[kubernetes] namespace 란?

해당 페이지는 kubernetes의 namespace 페이지를 기반으로 작성한다

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

 

Namespace란?

- 클러스터 내에서 리소스 그룹을 격리하기 위한 메커니즘

- 리소스 이름은 Namespace 내에서는 고유해야하지만, Namepspace 다를 경우 동일한 리소스 이름으로 생성 가능

- Namespace 가빈의 범위는 Object(Deployment, Service 등)만 적용되며,

  클러스터 전체 Object(StorageClass, Nodes, PersistentVolme)등에는 적용되지 않음

 

다양한 Namespace를 구성하는 경우

- Namespace는 사용자가 여러 팀이나, 프로젝트 단위에서 사용하기 위함

- 사용자가 수 십명의 경우 Namespace를 만들거나 생각할 필요가 없음

- Namespace는 이름의 범위를 제공 함

- Namespace는 중복 될 수 없으며, 각 리소스는 하나의 Namespace만 가짐

- Namespace는 여러 사용자간 클러스터 리소스를 나누는 방법

- 동일한 SW의 버전이 다른 리소스를 구분할 필요가 없고, Label을 통해 동일한 Namespace 사용 가능

 

Namespace 확인

# kubectl get namespaces
NAME              STATUS   AGE
default           Active   9h
kube-node-lease   Active   9h
kube-public       Active   9h
kube-system       Active   9h

- default : Namespace가 없는 객체의 기본 Namespace

- kube-system : kuernetes 시스템에 의해 생성된 객체의 namespace

- kube-public : 모든 사용자가 사용할 수 있는 namespace

 

kubectl get, describe 명령어를 통해 namespace 정보를 확인할 수 있음

# kubectl get namespace default
NAME      STATUS   AGE
default   Active   11h

# kubectl describe namespace default
Name:         default
Labels:       <none>
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

- describe 정보에서 resource 할당량(quota)과 제한값(limit)를 알 수 있음

- 리소스 할당량은 namespace에 존재하는 리소스의 총 사용량 추적

- 리소스 제한 값은 namespace에서 사용하는 리소스 제한

 

Namespace 상태

- Status: Active ==> Namespace 활성화 상태

- Status: Terminating ==> Namespace 가 종료중이며, 새로운 Object를 생성할 수 없음

 

Namespace 생성

1. yaml 파일을 통한 생성

# cat my-namespace.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: mynamespace
  
# kubectl create -f ./my-namespace.yaml
namespace/mynamespace created

# kubectl get namespace mynamespace
NAME          STATUS   AGE
mynamespace   Active   32s

 

2. CLI로 생성

# kubectl create namespace mynamespace2
namespace/mynamespace2 created

# kubectl get namespace mynamespace2
NAME           STATUS   AGE
mynamespace2   Active   7s

 

Namespace 삭제

# kubectl delete namespace mynamespace
namespace "mynamespace" deleted
    
# kubectl delete namespace mynamespace2
namespace "mynamespace2" deleted

# kubectl get namespace -A
NAME              STATUS   AGE
default           Active   12h
kube-node-lease   Active   12h
kube-public       Active   12h
kube-system       Active   12h

 

Namespace를 통한 Kubernetes 세분화

1. default namespace의 이해

기본적으로 kuberntes는 default namespace를 이용하여 pod, service, deployment 등을 프로비저닝 수행

 

2. 2개의 namespace를 추가

kubectl create 문은 -f 옵션으로 파일 형태의 명령 수행

#kubectl create -f https://k8s.io/examples/admin/namespace-dev.json
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "development",
    "labels": {
      "name": "development"
    }
  }
}

#kubectl create -f https://k8s.io/examples/admin/namespace-prod.json
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "production",
    "labels": {
      "name": "production"
    }
  }
}

# kubectl get namespaces --show-labels
NAME              STATUS   AGE   LABELS
default           Active   26h   <none>
development       Active   14h   name=development
kube-node-lease   Active   26h   <none>
kube-public       Active   26h   <none>
kube-system       Active   26h   <none>
production        Active   14h   name=production

 

- --show-labels 옵션을 통해 namespce의 labels 들을 확인할 수 있다.

- json 파일의 labels: name: 의 내용이 명시 됨

 

3. 각 namespace 내 pod 생성

- 한 namespace와 상호작용하는 사용자는 다른 namespace의 콘텐츠를 볼 수 없음

# kubectl create deployment snowflake --image=registry.k8s.io/serve_hostname -n=development
deployment.apps/snowflake created

# kubectl scale deployment snowflake --replicas=3
deployment.apps/snowflake scaled

- --image 옵션을 통해 dockerhub 이미지를 불러옴

- -n=development 옵션을 통해 namespace 지정

- scale 명령어를 통해 replica 수를 지정

아래와 같이 development namespace에 생성된 내용을 확인할 수 있음

 

# kubectl  config set-context --current --namespace=development
Context "kubernetes-admin@kubernetes" modified.

# kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
snowflake-58f6594f77-jdfkm   1/1     Running   0          9m3s
snowflake-58f6594f77-jwsz2   1/1     Running   0          8m55s
snowflake-58f6594f77-xcgdf   1/1     Running   0          8m55s

# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
snowflake   3/3     3            3           9m9s

 

'kubernetes' 카테고리의 다른 글

[kubernetes] static pod란  (0) 2022.10.31
[kubernetes] pod란?  (0) 2022.10.26
[kubernetes] etcd 및 백업 복구 방법  (0) 2022.10.21
[kubernetes] kubernertes Component  (0) 2022.10.21