배경
Pod의 자원으로 설정되어 있지만, 실제로는 컨테이너 단위로 자원이 할당된다. Pod에서의 자원은 모든 컨테이너에게 할당된 자원의 총합을 말한다.
- 쿠버네티스 클러스터에는 한정된 자원이 있다.
- 클러스터 안에는 여러 네임스페이스들이 있고, 그 안에는 여러 파드들이 존재한다.
- 각 파드는 필요한 자원을 클러스터 자원을 끌어다 사용하는데, 만약 한 네임스페이스에서 많은 자원을 사용하게 되면 다른 네임스페이스에서는 더이상 쓸 자원이 없어서 자원이 필요할 때 문제가 발생한다.
- 이러한 문제를 해결하기 위해서 아래와 같은 게 등장했다.
- 네임스페이스 뿐만 아니라 클러스터에도 제한을 걸 수 있다.
- ResourceQuota: 네임스페이스마다 최대 자원의 사용량을 설정할 수 있다.
- LimitRange: 네임스페이스에 들어오는 파드의 자원 사용량을 제한하는 역할을 한다.
- 네임스페이스 뿐만 아니라 클러스터에도 제한을 걸 수 있다.
Namespace
- 한 네임스페이스 안에는 같은 타입((Pod, Service, ...)의 오브젝트들은 이름이 중복될 수 없다는 특징이 있다.
- 오브젝트들마다 별도의 UUID가 존재한다.
- 대표적인 특징으로 타 네임스페이스에 있는 자원과 분리가 되고, 관리가 된다.
- A 네임스페이스에서 Service가 B 네임스페이스의 파드를 연결할 수 없다.
- Namespace-2의 Pod1에서 Namespace-1의 Pod1의 IP 주소를 통한 연결은 가능하다. <- NetworkPolicy라는 오브젝트를 통해서 제한할 수 있다.
- 네임스페이스를 지우면 그 안에 있는 모든 게 다 지워지기 때문에 유의해야 한다.
ResourceQuota
- ResourceQuota는 네임스페이스의 자원 한계를 설정하는 오브젝트이다.
- ResourceQuota가 지정되어 있는 네임스페이스에 파드를 만들 때 파드는 무조건 ResourceQuota에 표시된 부분에 대해 Spec을 명시해줘야 한다.
- ResourceQuota를 넘는 Spec이거나 Spec을 설정하지 않으면 파드가 만들어지지 않는다.
- ResourceQuota를 만들기 전에 Spec을 명시하지 않은 파드를 만들고, 이후에 ResourceQuota를 만들면 오류가 발생하지 않는다. 하지만 결국 기존의 파드 때문에 ResourceQuota보다 더 많은 자원을 사용하게 되므로 ResourceQuota를 만들기 전에 파드가 존재하지 않도록 해야한다.
- 대쉬보드에서 ResourceQuota에 대해 확인이 안 되므로 명령어를 입력해야 한다.
- "kubectl describe resourcequotas --namespace=nm-1" : nm-1 네임스페이스에 달린 ResouceQuota를 보여준다.
LimitRange
- LimitRange의 기능은 각각의 파드마다 네임스페이스에 들어올 수 있는지 자원을 체크한다.
- min: 최소 limits의 값 설정
- max: 최대 limits의 값 설정
- maxLimitRequestRatio: requests와 limits 값의 비율의 최댓값 설정
- Spec에 명시하지 않았을 때 기본값을 주도록 하는 설정도 존재한다. 파드 단위가 아닌, 컨테이너 단위로 할당한다.
- defaultRequest: requests 값을 설정하지 않은 컨테이너가 들어올 때, 컨테이너의 requests값을 동일한 값으로 설정해준다.
- default: requests 값을 설정하지 않은 컨테이너가 들어올 때, 컨테이너의 limits값을 동일한 값으로 설정해준다.
- 대쉬보드에서 LimitRange에 대해 확인이 안 되므로 명령어를 입력해야 한다.
- "kubectl describe limitranges --namespace=nm-1" : nm-1 네임스페이스에 달린 LimitRange를 보여준다.
- 한 네임스페이스에 LimitRange에 대해 동일한 설정을 줄 시에, 설정마다 참고하는 LimitRange가 달라지므로, 겹치지 않게 LimitRange의 설정값을 주도록 주의해야 한다.
- 예를 들어 A LimitRange에서 max를 2, defulat의 값을 3이라고 하고, B LimitRange에서 max를 1, default를 4라고 했을 때, max는 B의 것을, defulat는 A의 것을 참고하는 상황이 발생할 수 있다.
'Infra > Kubernetes' 카테고리의 다른 글
Controller - ReplicaSet 특징 -> Template, Replicas, Selector (0) | 2025.06.12 |
---|---|
쿠버네티스 - 컨트롤러 제공 기능 (0) | 2025.06.12 |
ConfigMap, Secret - Env, Mount (0) | 2025.06.08 |
Volume - emptyDir, hostPath, PV/PVC (0) | 2025.06.07 |
Service 타입 - ClusterIP, NodePort, LoadBalancer (0) | 2025.06.07 |