DevOps/Kubernetes

[Kubernetes Study - 08] Namespace, ResourceQuota, LimitRange

돌돌김 2021. 2. 12. 00:46

쿠버네티스 클러스터 안에는 여러개의 네임스페이스를 만들 수 있다. 또한, 하나의 네임스페이스 안에는 여러개의 파드를 만들 수 있다.

 

각 파드들은 하나의 클러스터 내부에 있는 자원을 공유해서 사용한다. 이때 특정 파드에서 너무 많은 자원을 사용하면 다른 네임스페이스에 있는 파드들이 리소스를 사용하지 못하므로 이것을 방지하기 위해서 네임스페이스 마다 resource quota를 할당할 수 있다.

 

또한, LimitRange를 둬서 네임스페이스에 두는 Pod의 크기를 제한할 수 있다.

 

 

Namespace

같은 네임스페이스 안에서 오브젝트 끼리의 이름은 겹칠 수 없다. Pod와 Service의 네임스페이스가 서로 다르면, Selector로 묶을 수 없다. 서로 다른 Namespace에서 통신이 가능하지만 통신을 막아주려면, network policy를 따로 설정해줘야 한다.

 

  • namespace 생성
kubectl create namespace {namespace name}

 

ResourceQuota : Namespace의 자원의 한계를 설정하는 오브젝트

  • 만약 ResourceQuota가 설정되어 있으면, Pod를 만들 때 꼭 해당 스펙을 yaml 파일에 명시해야 한다.
  • 단순히 리소스만 제한할 수 있는것이 아니고 오브젝트들 개수도 제한 가능하다.
    • Pod, Service, ConfigMap, PVC, , secrets
  • ResourceQuota를 만들기 전에 Pod가 배포되어있는 경우, 이 Pod는 ResourceQuota에 적용되지 않기 때문에, ResourceQuota를 만들 때는 Pod가 없는 상태에서 시작하는게 좋다.

 

 

LimitRange : Namespace에 배포 가능한 Pod의 크기를 설정

 

Pod의 하나의 파드 또는 컨테이너가 사용 가능한 모든 리소스를 독점할 수 있다는 우려가 있다. limitRange는 네임스페이스에서 리소스 할당(파드 또는 컨테이너)을 제한하는 정책이다.

 

Type에 Container 등 오브젝트를 선언하여, 어떤 오브젝트에 제한을 거는지 설정할 수 있다.

 

  • min : 최소로 들어와야 하는 Pod의 메모리
  • max : 최대로 들어올 수 있는 Pod의 메모리
  • maxLimitRequestRation : min과 max의 비율
  • defaultRequest, default : Pod에 메모리의 크기를 따로 지정해주지 않았을 경우 기본으로 할당해주는 용량