728x90
■ 쿠버네티스(Kubernetes) NameSpace CPU 자원
- 쿠버네티스 CPU 할당에 사용되는 단위는 정수 또는 소수점 형태로 표기 한다.
- CPU 자원 할당은 노드의 타입에 따라 다르다. 물리 서버인 경우 1 물리 CPU 코어가 되고, 가상 서버일 경우 1가상 코어에 해당 함.
- CPU 자원이 1.0일 경우 1,000 밀리 CPU (1,000m), 0.1일 경우 100 밀리 CPU (= 100m)를 의미 한다.
- 쿠법네티스에서는 1m 보다 더 정밀한 단위로 표기할 수 없고, 표기 방법은 0.0005 보다 5m 처럼 직관적인 방식으로 표현하는 것이 좋음.
■ 쿠버네티스(Kubernetes) NameSpace CPU 할당
- 네임스페이스에 리소스 쿼터가 설정되어 있는 경우, CPU 상한에 기본값을 설정하는 것이 좋음.
- 리소스 쿼터가 설정 된 네임스페이스에서 실행되는 모든 컨테이너는 CPU 상한이 있어야 한다
- CPU 상한은 파드가 스케줄링 될 노드에 리소스 예약을 적용함.
- 네임스페이스의 모든 파드에 대해 예약된 CPU 총량이 지정된 상한을 초과하지 않아야 한다.
- 컨테이너에 CPU 상한이 명시되어 있지 않다면 컨트롤 플레인이 해당 컨테이너에 기본 CPU 상한을 할당 한다.
- 네임스페이스 생성 및 기본 CPU 요청/상한 설정
# 네임스페이스 생성
kubectl create namespace default-cpu-example
# 네임스페이스의 리밋레인지 (LimitRange) 정의
# admin/resource/cpu-defaults.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
spec:
limits:
- default:
cpu: 1
defaultRequest:
cpu: 0.5
type: Container
# 리밋레인지 적용
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults.yaml --namespace=default-cpu-example
■ 쿠버네티스(Kubernetes) NameSpace와 Pod CPU 요청/상한 미설정
- 컨테이너 생성 시 CPU 요청/상한 미설정
- 쿠버네티스 컨트롤 플레인인 네임스페이스의 기본 CPU 요청/상한 정보를 참조하여 할당
# Pod 정의
# admin/resource/cpu-defaults-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo
spec:
containers:
- name: default-cpu-demo-ctr
image: nginx
# default-cpu-example 네임스페이스에 Pod 생성
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod.yaml --namespace=default-cpu-example
# Pod 정보 조회
kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example
containers:
- image: nginx
imagePullPolicy: Always
name: default-cpu-demo-ctr
resources:
limits:
cpu: "1"
requests:
cpu: 500m
■ 쿠버네티스(Kubernetes) NameSpace와 Pod CPU 상한 설정 및 요청 미설정
- 컨테이너 생성 시 CPU 상한 설정 및 요청 미설정
- 네임스페이스에 설정한 값이 아닌 컨테이너 생성 시 정의한 CPU 상한값과 동일하게 요청값이 정의 됨.
# Pod 정의
# admin/resource/cpu-defaults-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo-2
spec:
containers:
- name: default-cpu-demo-2-ctr
image: nginx
resources:
limits:
cpu: "1"
# Pod 생성
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-2.yaml --namespace=default-cpu-example
# Pod 정보 조회
kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example
resources:
limits:
cpu: "1"
requests:
cpu: "1"
■ 쿠버네티스(Kubernetes) NameSpace와 Pod CPU 상한 미설정 및 요청 설정
- 컨테이너 생성 시 CPU 상한 미설정 및 요청 설정
- 요청값은 컨테이너 생성 시 정의한 값이 참조 되었고, 상한값은 네임스페이스의 기본 메모리 상한값이 정의 되었음.
# Pod 정의
# admin/resource/cpu-defaults-pod-3.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo-3
spec:
containers:
- name: default-cpu-demo-3-ctr
image: nginx
resources:
requests:
cpu: "0.75"
# Pod 생성
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-3.yaml --namespace=default-cpu-example
# Pod 정보 조회
kubectl get pod default-cpu-demo-3 --output=yaml --namespace=default-cpu-example
resources:
limits:
cpu: "1"
requests:
cpu: 750m
요청(↓ Request) // 상한( → Limit) | 미설정 | 설정 |
미설정 | ▪ 네임스페이스 리밋레인지 정보를 참조 ▪ K8S 컨트롤러 자동 할당 |
▪ 네임스페이스 기본 요청값 무시 ▪ 요청값 == 상한값 으로 설정 |
설정 | ▪ 네임스페이스 기본 상한값 적용 ▪ 요청값은 명세대로 적용 |
▪ 설정된 값 적용 |
■ 쿠버네티스(Kubernetes) NameSpace 최대 / 최소 CPU 할당
- 컨테이너가 사용하는 CPU의 최소값과 최대값을 설정, 기본값을 지정하지 않아도 자동으로 생성 됨.
- 최대 및 최소 제약 조건은 파드를 생성하거나 업데이트할 때만 적용되며 리밋레인지를 변경해도, 이전에 생성된 파드에는 영향을 미치지 않음.
- Pod가 리밋레인지에 의해 부과된 제약 조건을 충족하지 않으면, 네임스페이스에 생성 될 수 없음. 리밋레인지가 설정되면 해당 네임스페이스에 Pod 생성 시 3단계 검사를 수행 함
- 해당 파드의 어떤 컨테이너도 자체 메모리 요청량(request)과 상한(limit)을 명시하지 않으면, 컨트롤 플레인이 해당 컨테이너에 메모리 요청량과 상한의 기본값(default)을 지정
- 해당 파드의 모든 컨테이너의 CPU 요청량이 리밋레인지의 최소값 이상인지 확인한다.
- 해당 파드의 모든 컨테이너의 CPU 요청량이 리밋레인지의 최대값 이하인지 확인한다.
- 최소값 / 최대값 제약사항을 위반하면 Pod는 생성되지 않는다.
# 네임스페이스 생성
kubectl create namespace constraints-cpu-example
# 리밋레인지 정의
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-min-max-demo-lr
spec:
limits:
- max:
cpu: "800m"
min:
cpu: "200m"
type: Container
# 리밋레인지 적용
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-constraints.yaml --namespace=constraints-cpu-example
# 리밋레인지 조회
kubectl get limitrange cpu-min-max-demo-lr --output=yaml --namespace=constraints-cpu-example
limits:
- default:
cpu: 800m
defaultRequest:
cpu: 800m
max:
cpu: 800m
min:
cpu: 200m
type: Container
- 리밋레인지 최소 / 최대값 제약 조건을 위반할 경우 Pod는 생성되지 않음
- 최대값 위반:
Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-2.yaml": pods "constraints-cpu-demo-2" is forbidden: maximum cpu usage per Container is 800m, but limit is 1500m.
- 최소값 위반:
Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-3.yaml": pods "constraints-cpu-demo-3" is forbidden: minimum cpu usage per Container is 200m, but request is 100m.
- 최소/최대값 제약사항을 위반하게 되면 오류 메시지와 함께 pod가 생성되지 않는다.
- 최대값 위반:
728x90
'K8S' 카테고리의 다른 글
쿠버네티스(Kubernetes) 디플로이먼트 (Deployment) 생성 및 업데이트 (2) | 2024.09.11 |
---|---|
쿠버네티스(Kubernetes) 중단 (Disruption) (0) | 2024.08.30 |
쿠버네티스(Kubernetes) NameSpace 메모리 자원 할당 (0) | 2024.08.25 |
쿠버네티스(Kubernetes) Pod Quality of Service (QoS) (0) | 2024.08.23 |
쿠버네티스(Kubernetes) NameSpace (0) | 2024.08.20 |