네임스페이스의 기본 CPU request와 limit 구성하기
네임스페이스의 기본 CPU request와 limit 구성하기 (Configure Default CPU Requests and Limits for a Namespace)
이 페이지에서는 네임스페이스의 기본 CPU request와 limit을 구성하는 방법을 보여줘요.
쿠버네티스 클러스터는 네임스페이스로 나눌 수 있습니다. 기본 CPU limit이 있는 네임스페이스에 파드를 만들고, 그 파드의 어떤 컨테이너도 자신의 CPU limit을 지정하지 않으면, 컨트롤 플레인이 그 컨테이너에 기본 CPU limit을 할당합니다.
쿠버네티스는 기본 CPU request도 할당하지만, 이 페이지에서 나중에 설명하는 특정 조건에서만 그렇습니다.
출처: 문서
본문
시작하기 전에
클러스터에 네임스페이스를 만들 수 있는 접근 권한이 있어야 합니다.
쿠버네티스가 1.0 CPU라고 말하는 것이 무엇을 뜻하는지 아직 잘 모르겠다면 CPU의 의미를 읽어보세요.
네임스페이스 만들기
이 연습에서 만드는 리소스가 클러스터의 나머지와 격리되도록 네임스페이스를 만들어요.
kubectl create namespace default-cpu-example
LimitRange와 파드 만들기
예시 LimitRange의 매니페스트입니다. 이 매니페스트는 기본 CPU request와 기본 CPU limit을 지정합니다.
default-cpu-example 네임스페이스에 LimitRange를 만든다:
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults.yaml --namespace=default-cpu-example
이제 default-cpu-example 네임스페이스에 파드를 만들고, 그 파드의 어떤 컨테이너도 CPU request와 CPU limit에 대한 자신의 값을 지정하지 않으면, 컨트롤 플레인이 기본값을 적용합니다: 0.5의 CPU request와 1의 기본 CPU limit.
컨테이너가 하나인 파드의 매니페스트입니다. 그 컨테이너는 CPU request와 limit을 지정하지 않습니다.
파드를 만든다.
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod.yaml --namespace=default-cpu-example
파드의 명세를 본다:
kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example
출력은 파드의 유일한 컨테이너가 500m cpu의 CPU request("500 millicpu"로 읽을 수 있음)와 1 cpu의 CPU limit을 가짐을 보여줍니다. 이것들은 LimitRange가 지정한 기본값입니다.
containers:
- image: nginx
imagePullPolicy: Always
name: default-cpu-demo-ctr
resources:
limits:
cpu: "1"
requests:
cpu: 500m
컨테이너의 limit은 지정했지만 request는 지정하지 않으면?
컨테이너가 하나인 파드의 매니페스트입니다. 그 컨테이너는 CPU limit은 지정하지만 request는 지정하지 않습니다:
파드를 만든다:
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-2.yaml --namespace=default-cpu-example
만든 파드의 명세를 본다:
kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example
출력은 컨테이너의 CPU request가 CPU limit과 일치하도록 설정됨을 보여줍니다. 컨테이너가 0.5 cpu의 기본 CPU request 값을 할당받지 않았다는 점에 주의하세요:
resources:
limits:
cpu: "1"
requests:
cpu: "1"
컨테이너의 request는 지정했지만 limit은 지정하지 않으면?
컨테이너가 하나인 파드의 예시 매니페스트입니다. 그 컨테이너는 CPU request는 지정하지만 limit은 지정하지 않습니다:
파드를 만든다:
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-3.yaml --namespace=default-cpu-example
만든 파드의 명세를 본다:
kubectl get pod default-cpu-demo-3 --output=yaml --namespace=default-cpu-example
출력은 컨테이너의 CPU request가 파드를 만들 때 지정한 값(즉 매니페스트와 일치)으로 설정됨을 보여줍니다. 그러나 같은 컨테이너의 CPU limit은 1 cpu로 설정되어 있는데, 이는 그 네임스페이스의 기본 CPU limit입니다.
resources:
limits:
cpu: "1"
requests:
cpu: 750m
기본 CPU limit과 request에 대한 동기
네임스페이스에 CPU ResourceQuota가 구성되어 있다면, CPU limit에 대한 기본값이 있으면 유용합니다. CPU 리소스 할당량이 네임스페이스에 부과하는 두 가지 제한이 있습니다:
- 네임스페이스에서 실행되는 모든 파드의 각 컨테이너는 CPU limit이 있어야 합니다.
- CPU limit은 해당 파드가 스케줄링되는 노드에 리소스 예약을 적용합니다. 네임스페이스의 모든 파드가 사용하도록 예약된 총 CPU 양은 지정된 limit을 초과해서는 안 됩니다.
LimitRange를 추가할 때:
그 네임스페이스의 어떤 파드에 컨테이너가 포함되어 있으면서 자신의 CPU limit을 지정하지 않으면, 컨트롤 플레인이 그 컨테이너에 기본 CPU limit을 적용하고, 그 파드는 CPU ResourceQuota로 제한되는 네임스페이스에서 실행이 허용될 수 있습니다.
정리하기
네임스페이스를 삭제한다:
kubectl delete namespace default-cpu-example
더 알아보기 (Learn more)
클러스터 관리자용
- 네임스페이스의 기본 메모리 request와 limit 구성하기
- 네임스페이스의 최소·최대 메모리 제약 구성하기
- 네임스페이스의 최소·최대 CPU 제약 구성하기
- 네임스페이스의 메모리·CPU 할당량 구성하기
- 네임스페이스의 파드 할당량 구성하기
- API 오브젝트의 할당량 구성하기