Cloud Architect 꿈꾸기

Cloud Computing/Kubernetes

Kubernetes Object - Namespace, ResourceQuota, LimitRange

HwanJae 2021. 1. 13. 20:55

Namespace, ResourceQuota, LimitRange

쿠버네티스 클러스터에는 일반적으로 Memory, CPU가 존재하고,  클러스터 내에는 여러 Namespace를 만들 수 있다.

Namespace안에는 여러 파드를 만들 수 있으며, 각 Pod는 클러스터 자원을 공유해서 사용한다.

만약 한 Pod가 클러스터 자원을 모두 사용하면, 다른 Pod는 사용할 수 있는 자원이 없어서 문제가 발생하게 되는데,

이러한 문제를 해결하기 위해 resourceQuotaNamespace마다 최대 하나씩 설정하여, Pod의 사용가능한 자원사용량을 조절할 수 있다.

 

또, 한 Pod가 자원사용량을 너무 크게 설정해버리면 다른 Pod들이 해당 Namespace에 더이상 들어오지 못하기 때문에 limitRange를 설정함으로써 Namespace에 들어오는 Pod의 크기를 제한할 수 있다.

limitRange를 설정하게 되면 Pod의 자원량이 설정 값보다 작을 경우에만 Namespace에 들어올 수 있다.


1. Namespace

Namespace 안에는 같은 타입의 오브젝트의 경우, Pod 이름이 중복될 수 없다. (이름이 Key 역할을 할 수 있기 때문)

Namespace에 있는 자원과는 분리되어 관리되며, 타 Namespace에 있는 Service와 Pod간에는 Label - Selector로 연결이 되지 않는다.

Namespace를 지우게 되면 내부에 있는 자원도 모두 지워지기 때문에 주의할 필요가 있다.

각 Pod 마다 해당 Pod의 IP를 보유하고 있는데, 다른 Namespace의 Pod로 IP접근은 기본적으로는 가능하다.

다만 Network Policy Object를 통해 접근을 제한 할 수 있다.


2. RescourceQuota

ResourceQuota는 Namespace 안에 있는 자원량을 조절하기 위한 오브젝트로 사용된다.

ResourceQuota가 설정된 네임스페이스에 Pod를 만들 때, Pod에 스펙을 명시해주지 않으면 Namespace 안에 만들어지지 않기 때문에 Pod를 작성할 때 주의가 필요하다.

이미 Pod가 존재하는 네임스페이스 안에도 ResourceQuota를 설정할 수 있는데, 이렇게 되면 기존의 Pod가 ResourceQuota를 무시하는 경우가 발생하기 때문에 ResourceQuota를 만들기 전에 해당 네임스페이스 안에 Pod가 존재하는지 확인하고 만드는 것을 권장한다.


3. LimitRange

LimitRange는 각각의 Pod마다 네임스페이스에 들어올 수 있는지를 체크하는 오브젝트로 사용된다.

LimitRange 생성 시 min, max를 통해 Pod가 들어올 수 있는 메모리양을 정해줄 수 있다.

또한 maxLimitRequestRatio를 통해 Pod의 requests와 limit의 비율을 지정할 수 있다.

예를 들어, Pod를 생성할 때 requests:1GB, limit:4GB로 메모리양을 설정해두고, LimitRange의 maxLimitRequestRatio는 3으로 설정 해두었다면, ratio의 비율은 3배인 반면 limit는 request의 4배이기 때문에 해당 Pod는 Namespace에 들어올 수 없다. 따라서 requests와 limit를 조절하여 3배 이내로 맞춰주어야 한다.

 

주의사항으로 한 Namespace 에는 여러 개의 LimitRange가 설정될 수 있는데. 여러 개의 LimitRange를 설정하게 되면 의도치 않은 이유로 Pod가 등록되지 않을 수 있기 때문에 주의해서 만들어야한다.

'Cloud Computing > Kubernetes' 카테고리의 다른 글

Kubernetes - Deployment  (0) 2021.01.18
Kubernetes - Replication Controller, ReplicaSet  (0) 2021.01.18
Kubernetes Object - ConfigMap, Secret  (0) 2021.01.13
Kubernetes Object - Volume  (0) 2021.01.12
Kubernetes Object - Service  (0) 2021.01.12