본문 바로가기

Infra/Kubernetes

[cka] Kubernetes - Namespace

1. Namespace 란?

- Kubernetes 내의 클러스터 내의 논리적인 구획

- 하나의 클러스터 내의 여러개의 작은 클러스터처럼 나눔

- 서로 격리된 공간에서 리소스를 사용하는 구조

 

2. Namespace 쓰는 이유?

1) 리소스 구분 : 팀/프로젝트 별로 리소스 분리 가능

2) 이름 충돌 방지 : 같은 이름의 리소스라도 namespace가 다르면 공존 가능

3) 권한 제어 (RBAC) : namespace별로 권한 제어 가능

4) 리소스 할당 제한: CPU/memory 쿼터를 namespace 별로 설정 가능

 

3. 기본생성된 Namespace

1) default : 사용자가 별도 지정 X 하면 리소스가 여기에 생성됨

2) kube-system: kuberneetes 자체 시스템 컴포넌트

ex) kube-dns, scheduler, controller-manager 등

3) kube-public: 모든 사용자가 접근 가능한 공개 리소스 공간(거의 사용X)

4) kube-node-lease: 노드 상태 정보(heart-beat)를 관리하는 내부 공간

 

4. 명령어

kubectl get namespaces ( = kubectl get ns)

 

5. namespace 생성하는 방법

1) cli 로 생성

kubectl create namespace my-namespace

2) yaml 파일로 생성

kubectl create -f namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

 

6. 리소스를 특정 namespace에 생성하는 방법

1) cli 로 생성

kubectl create -f pod-definition.yaml --namespace=dev

 

2) yaml 파일로 생성

kubectl create -f pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace  // 여기에 실행하고자 하는 ns 지정
spec:
  containers:
    - name: nginx
      image: nginx



 

7. namespace간 접근

- 네트워크적으로 완전히 차단 X

ex) Service 이름에 namespace 포함하면 다른 namespace의 service에 접근가능함

// [service-name].[namespace-name].svc.[Domain-name]

my-service.my-namespace.svc.cluster.local

 

8. namespace 간의 switch 명령어

 

8. namespace 관련 명령어 정리

kubectl get pods --namespace=<이름> (= kubectl get pods -n=<이름>)

kubectl get namespaces (=kubectl get ns)

kubectl run redis --image=redis --namespace=finance

kubectl get pods --all-namespace (= kubectl get pods -A)