[Kubernetes] Namespace

1. 소개

네임스페이스는 쿠버네티스의 리소스들을 분리하기 위해 사용하는 방법이다. 쿠버네티스를 설치하면 기본적으로 default 네임스페이스, 쿠버네티스 시스템 자원들이 있는 kube-system, 모든 사용자가 접속할 수 있는 kube-public의 3가지 네임스페이스가 생성된다. 유저가 중요한 내부 객체를 건드리는 것을 막기 위해 시스템 자원들을 별도의 네임스페이스로 구분한 것이다.

네임스페이스로 얻을 수 있는 또 다른 이점은 자원 리밋 지정이다. 네임스페이스 별로 자원들의 최대 할당량을 지정하여 다른 네임스페이스에 영향을 끼치지 않도록 할 수 있다.

LimitRange 오브젝트로 네임스페이스에 실행되는 단일 컨테이너에 대한 리소스 요청량, 상한크기의 기본값(default)이나 최소, 최대 제한값을 설정할 수 있다. LimitRange의 min, max값에 맞지 않는 파드는 생성에 실패한다. LimitRange 값은 파드가 신규 생성 되거나 업데이트 될 때 적용된다. 즉 기존에 실행중인 파드는 LimitRange가 수정되어도 영향을 받지 않는다.

ResourceQuota 오브젝트는 네임스페이스에서 실행 중인 모든 컨테이너가 사용할 수 있는 총 리소스 양에 대한 제약을 설정할 수 있는 방법을 제공한다.

2. 명령어

# 다른 네임스페이스의 pod 조회
kubectl get pods --namespace=kube-system

# 다른 네임스페이스에 pod 생성
# 혹은 yml 파일의 metadata아래에 namespace 항목을 추가해서 생성
kubectl create -f pod-definition.yml --namespace=dev

#namespace-dev.yml
apiVersion: v1
kind: Namespace
metadata: 
  name: dev

#yml 파일로 네임스페이스 생성
kubectl create -f namespace-dev.yml
#커맨드로 네임스페이스 생성
kubectl create namespace dev

#다른 네임스페이스로 이동하기
kubectl config set-context $(kubectl config current-context) --namespace=dev

#LimitRange 설정파일 mem-limit-range.yml
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
            cpu: 1
    defaultRequest:
      memory: 256Mi
      cpu: 0.5
      max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container

#quota 생성
kubectl create -f mem-limit-range.yml

#resource quota 설정파일 compute-quota.yml
apiVersion: v1
kind: ResourceQuota
metadata: 
  name: compute-quota
  namespace: dev

spec: 
  hard:
    pods: "10"
    requests.cpu: "4"
    requests.memory: 5Gi
    limits.cpu: "10"
    limits.memory: 10Gi

#quota 생성
kubectl create -f compute-quota.yml

'Kubernetes' 카테고리의 다른 글

[Kubernetes] Authentication  (0) 2021.02.01
[Kubernetes] Volume 관리  (0) 2021.01.25
[Kubernetes] Network Policy  (0) 2021.01.19
[Kubernetes] 권한 관리(RBAC)  (0) 2020.12.30
[Kubernetes] 백업, 복구  (0) 2020.12.23