Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Assign CPU Resources to Containers and Pods
์ปจํ ์ด๋ ๋ฐ ํ๋ CPU ๋ฆฌ์์ค ํ ๋น
์ด ํ์ด์ง์์๋ ์ปจํ ์ด๋์ CPU ์์ฒญ๋๊ณผ CPU ์ํ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค. ์ปจํ ์ด๋๋ ์ค์ ๋ ์ํ๋ณด๋ค ๋ ๋ง์ CPU๋ ์ฌ์ฉํ ์ ์๋ค. ์ ๊ณต๋ ์์คํ ์ CPU ๊ฐ์ฉ๋์ด ๋จ์์๋ค๋ฉด, ์ปจํ ์ด๋๋ ์์ฒญ๋๋งํผ์ CPU๋ฅผ ํ ๋น๋ฐ๋ ๊ฒ์ ๋ณด์ฅ๋ฐ๋๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
ํ์คํฌ ์์ ๋ฅผ ์ํํ๊ธฐ ์ํด์๋ ์ต์ 1๊ฐ์ CPU๊ฐ ๊ฐ์ฉํ ํด๋ฌ์คํฐ๊ฐ ํ์ํ๋ค.
์ด ํ์ด์ง์ ๋ช ๊ฐ์ง ๋จ๊ณ๋ฅผ ์ํํ๊ธฐ ์ํด์๋ ํด๋ฌ์คํฐ ๋ด metrics-server ์๋น์ค ์คํ์ด ํ์ํ๋ค. ์ด๋ฏธ ์คํ ์ค์ธ metrics-server๊ฐ ์๋ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ธ ์ ์๋ค.
Minikube๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํด metric-server๋ฅผ ํ์ฑํํ ์ ์๋ค.
minikube addons enable metrics-server
metric-server(์๋๋ฉด metrics.k8s.io
์ ๊ฐ์ ๋ค๋ฅธ ์ ๊ณต์์ ๋ฆฌ์์ค ๋ฉํธ๋ฆญ API)๊ฐ
์คํ ์ค์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ค์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
kubectl get apiservices
๋ฆฌ์์ค ๋ฉํธ๋ฆญ API๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ถ๋ ฅ์ metrics.k8s.io
์
๋ํ ์ฐธ์กฐ๊ฐ ํฌํจ๋์ด ์์ ๊ฒ์ด๋ค.
NAME
v1beta1.metrics.k8s.io
๋ค์์คํ์ด์ค ์์ฑ
์ด ์์ ์์ ์์ฑํ ์์๊ณผ ํด๋ฌ์คํฐ ๋ด ๋๋จธ์ง๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด ๋ค์์คํ์ด์ค(Namespace)๋ฅผ ์์ฑํ๋ค.
kubectl create namespace cpu-example
CPU ์์ฒญ๋ ๋ฐ ์ํ ์ง์
์ปจํ
์ด๋์ CPU ์์ฒญ๋์ ์ง์ ํ๊ธฐ ์ํด์๋ ์ปจํ
์ด๋์ ๋ฆฌ์์ค ๋งค๋ํ์คํธ์ resources:requests
ํ๋๋ฅผ ํฌํจํ๋ค. CPU ์ํ์ ์ง์ ํ๊ธฐ ์ํด์๋ resources:limits
ํ๋๋ฅผ ํฌํจํ๋ค.
์ด ์์ ์์๋, ํ๋์ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง ํ๋๋ฅผ ์์ฑํ๋ค. ์ปจํ ์ด๋๋ 0.5 CPU ์์ฒญ๋๊ณผ 1 CPU ์ํ์ ๊ฐ๋๋ค. ์๋๋ ํ๋์ ๊ตฌ์ฑ ํ์ผ์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
๊ตฌ์ฑ ํ์ผ ๋ด args
์น์
์ ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์ธ์(argument)๋ฅผ ์ ๊ณตํ๋ค.
-cpus "2"
์ธ์๋ ์ปจํ
์ด๋๊ฐ 2 CPU ํ ๋น์ ์๋ํ๋๋ก ํ๋ค.
ํ๋ ์์ฑ:
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit.yaml --namespace=cpu-example
ํ๋๊ฐ ์คํ ์ค์ธ์ง ํ์ธ:
kubectl get pod cpu-demo --namespace=cpu-example
ํ๋์ ๋ํ ์์ธํ ์ ๋ณด ํ์ธ:
kubectl get pod cpu-demo --output=yaml --namespace=cpu-example
์ถ๋ ฅ์ ํ๋ ๋ด ํ๋์ ์ปจํ ์ด๋์ 0.5 milliCPU ์์ฒญ๋๊ณผ 1 CPU ์ํ์ด ์๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
resources:
limits:
cpu: "1"
requests:
cpu: 500m
kubectl top
์ ์คํํ์ฌ ํ๋ ๋ฉํธ๋ฆญ ๊ฐ์ ธ์ค๊ธฐ:
kubectl top pod cpu-demo --namespace=cpu-example
์ถ๋ ฅ์ ํ๋๊ฐ 974 milliCPU๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋๋ฐ, ์ด๋ ํ๋์ 1 CPU ์ํ๋ณด๋ค๋ ์ฝ๊ฐ ์ ์ ์์น์ด๋ค.
NAME CPU(cores) MEMORY(bytes)
cpu-demo 974m <something>
๋ง์ฝ -cpu "2"
๋ก ์ค์ ํ๋ค๋ฉด, ์ปจํ
์ด๋๊ฐ 2 CPU๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ๊ฒ์ด ๋๋ค. ํ์ง๋ง ์ปจํ
์ด๋๋ 1 CPU๊น์ง๋ง์ ์ฌ์ฉํ๋๋ก ํ์ฉ๋์ด ์๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ์. ์ปจํ
์ด๋๋ ์ํ๋ณด๋ค ๋ ๋ง์ CPU ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์, ์ปจํ
์ด๋์ CPU ์ฌ์ฉ์ ์ฐ๋กํ(throttled) ๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ :
CPU ์ฌ์ฉ์ด 1.0๋ณด๋ค ๋ฎ์ ๊ฒ์ ๋ํ ๋ ๋ค๋ฅธ ์์ธ์, ๋ ธ๋์ ์ถฉ๋ถํ CPU ๋ฆฌ์์ค๊ฐ ๊ฐ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ผ ์๋ ์๋ค. "์์ํ๊ธฐ ์ ์"์ ์๊ตฌ์ฌํญ์์ ์ด ์์ ๋ฅผ ์ํด ํด๋ฌ์คํฐ๋ ์ต์ 1 CPU๊ฐ ํ์ํ๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ์. ๋ง์ฝ ์ปจํ ์ด๋๊ฐ 1 CPU ๋ฐ์ ๊ฐ์ง๊ณ ์์ง ์์ ๋ ธ๋ ์์์ ์คํ๋๋ค๋ฉด, ์ปจํ ์ด๋๋ ์์ ์๊ฒ ๋ช ์๋์ด ์๋ CPU ์ํ๊ณผ ๋ฌด๊ดํ๊ฒ 1 CPU ์ด์์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ ๊ฒ์ด๋ค.CPU ๋จ์(unit)
CPU ๋ฆฌ์์ค๋ CPU ๋จ์๋ก ์ธก์ ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ 1 CPU๋, ๋ค์๊ณผ ๊ฐ๋ค.
- 1 AWS vCPU
- 1 GCP Core
- 1 Azure vCore
- 1 ํ์ดํผ์ค๋ ๋ (๋ฒ ์ด๋ฉํ ์๋ฒ์ ํ์ดํผ์ค๋ ๋ฉ ์ธํ ํ๋ก์ธ์)
๋ถ์ ๊ฐ๋ ๊ฐ๋ฅํ๋ค. 0.5 CPU๋ฅผ ์์ฒญํ ์ปจํ ์ด๋๋ 1 CPU๋ฅผ ์์ฒญํ ์ปจํ ์ด๋ CPU์ ์ ๋ฐ ๊ฐ๋์ ๋ณด์ฅ๋ฐ๋๋ค. ์ ๋ฏธ์ฌ m์ ์ฌ์ฉํ์ฌ ๋ฐ๋ฆฌ(milli)๋ฅผ ํํํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด์ 100m CPU, 100milliCPU, ๊ทธ๋ฆฌ๊ณ 0.1 CPU๋ ๋ชจ๋ ๊ฐ๋ค. 1m๋ณด๋ค ์ ๋ฐํ ํํ์ ํ์ฉํ์ง ์๋๋ค.
CPU๋ ์๋์ ์ธ ์๋์ด ์๋, ์ ๋์ ์ธ ์๋์ผ๋ก ์์ฒญ๋๋ค. ์ฆ 0.1๋ ์ฑ๊ธ ์ฝ์ด, ๋์ผ ์ฝ์ด, 48-์ฝ์ด ๋จธ์ ์์๋ ๊ฐ์ ์์ ๋ํ๋ธ๋ค.
ํ๋ ์ญ์ :
kubectl delete pod cpu-demo --namespace=cpu-example
๋ ธ๋๋ณด๋ค ํจ์ฌ ๋์ CPU ์์ฒญ๋์ ์ง์ ํ ๊ฒฝ์ฐ
CPU ์์ฒญ๋๊ณผ ์ํ์ ์ปจํ ์ด๋์ ์ฐ๊ด๋์ด ์์ง๋ง, ํ๋๊ฐ CPU ์์ฒญ๋๊ณผ ์ํ์ ๊ฐ๋๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ด ์ ์ฉํ๋ค. ํน์ ํ๋์ CPU ์์ฒญ๋์ ํด๋น ํ๋์ ๋ชจ๋ ์ปจํ ์ด๋ CPU ์์ฒญ๋์ ํฉ๊ณผ ๊ฐ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ํน์ ํ๋์ CPU ์ํ์ ํด๋น ํ๋์ ๋ชจ๋ ์ปจํ ์ด๋ CPU ์ํ์ ํฉ๊ณผ ๊ฐ๋ค.
ํ๋ ์ค์ผ์ค๋ง์ ์์ฒญ๋์ ๋ฐ๋ผ ์ํ๋๋ค. ํ๋๋ ํ๋ CPU ์์ฒญ๋์ ๋ง์กฑํ ์ ๋๋ก ๋ ธ๋์ ์ถฉ๋ถํ CPU ๋ฆฌ์์ค๊ฐ ์์ ๋์๋ง ๋ ธ๋์ ์ค์ผ์ค๋งํ๋ค.
์ด ์์ ์์๋, ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋ ๊ฐ์ฉ๋์ ์ด๊ณผํ๋ CPU ์์ฒญ๋์ ๊ฐ์ง ํ๋๋ฅผ ์์ฑํ๋ค. ์๋๋ ํ๋์ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง ํ๋์ ๋ํ ์ค์ ํ์ผ์ด๋ค. ์ปจํ ์ด๋๋ 100 CPU์ ์์ฒญํ๊ณ ์๋๋ฐ, ์ด๊ฒ์ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋ ๊ฐ์ฉ๋์ ์ด๊ณผํ๋ ๊ฒ์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo-2
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr-2
image: vish/stress
resources:
limits:
cpu: "100"
requests:
cpu: "100"
args:
- -cpus
- "2"
ํ๋ ์์ฑ:
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit-2.yaml --namespace=cpu-example
ํ๋ ์ํ ํ์ธ:
kubectl get pod cpu-demo-2 --namespace=cpu-example
์ถ๋ ฅ์ ํ๋ ์ํ๊ฐ Pending ์ํ์์ ๋ณด์ฌ์ค๋ค. ์ด๊ฒ์ ํ๋๋ ์ด๋ค ๋ ธ๋์์๋ ์คํ๋๋๋ก ์ค์ผ์ค๋์ง ์์๊ณ , ์ดํ์๋ Pending ์ํ๊ฐ ์ง์๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
NAME READY STATUS RESTARTS AGE
cpu-demo-2 0/1 Pending 0 7m
์ด๋ฒคํธ๋ฅผ ํฌํจํ ํ๋ ์์ธ ์ ๋ณด ํ์ธ:
kubectl describe pod cpu-demo-2 --namespace=cpu-example
์ถ๋ ฅ์ ๋ ธ๋์ CPU ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ์ฌ ํ๋๊ฐ ์ค์ผ์ค๋ง๋ ์ ์์์ ๋ณด์ฌ์ค๋ค.
Events:
Reason Message
------ -------
FailedScheduling No nodes are available that match all of the following predicates:: Insufficient cpu (3).
ํ๋ ์ญ์ :
kubectl delete pod cpu-demo-2 --namespace=cpu-example
CPU ์ํ์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ
์ปจํ ์ด๋์ CPU ์ํ์ ์ง์ ํ์ง ์์ผ๋ฉด ๋ค์ ์ํฉ ์ค ํ๋๊ฐ ๋ฐ์ํ๋ค.
์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ ์ ์๋ CPU ๋ฆฌ์์ค์ ์ํ์ ์ด ์๋ค. ์ปจํ ์ด๋๋ ์คํ ์ค์ธ ๋ ธ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ CPU ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด๋ฒ๋ฆด ์๋ ์๋ค.
๊ธฐ๋ณธ CPU ์ํ์ด ์ง์ ๋ ๋ค์์คํ์ด์ค์์ ์คํ ์ค์ธ ์ปจํ ์ด๋์๋ ํด๋น ๊ธฐ๋ณธ ์ํ์ด ์๋์ผ๋ก ํ ๋น๋๋ค. ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ค์ ๋ฆฌ๋ฐ๋ ์ธ์ง(LimitRange)๋ฅผ ์ฌ์ฉํด CPU ์ํ์ ๊ธฐ๋ณธ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
CPU ์ํ์ ์ง์ ํ์ง๋ง CPU ์์ฒญ๋์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ
๋ง์ฝ CPU ์ํ์ ์ง์ ํ์ง๋ง CPU ์์ฒญ๋์ ์ง์ ํ์ง ์์๋ค๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค๋ ์๋์ผ๋ก ์ํ์ ๋ง๋ CPU ์์ฒญ๋์ ์ง์ ํ๋ค. ๋น์ทํ๊ฒ, ์ปจํ ์ด๋๊ฐ ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์ํ์ ์ง์ ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ ์ง์ ํ์ง ์์๋ค๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค๋ ์๋์ผ๋ก ์ํ์ ๋ง๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ ์ง์ ํ๋ค.
CPU ์์ฒญ๋ ๋ฐ ์ํ ๊ฐ๋ ๋์ ๋๊ธฐ
ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์ปจํ ์ด๋์ CPU ์์ฒญ๋๊ณผ ์ํ์ ๊ตฌ์ฑํ๋ฉด ํด๋ฌ์คํฐ ๋ด ๋ ธ๋๋ค์ ๊ฐ์ฉ ๊ฐ๋ฅํ CPU ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ํ๋์ CPU ์์ฒญ๋์ ๋ฎ๊ฒ ์ ์งํ๋ฉด ํ๋๊ฐ ๋์ ํ๋ฅ ๋ก ์ค์ผ์ค๋ง ๋ ์ ์๋ค. CPU ์ํ์ด CPU ์์ฒญ๋๋ณด๋ค ํฌ๋๋ก ์ค์ ํ๋ค๋ฉด ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๋ฌ์ฑํ ์ ์๋ค.
- ๊ฐ์ฉํ CPU ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋๊ฐ ์ด๋ฅผ ๋ฒ์คํธ(burst) ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- ํ๋๊ฐ ๋ฒ์คํธ ์ค ์ฌ์ฉํ ์ ์๋ CPU ๋ฆฌ์์ค ์์ ์ ์ ํ ์ ํํ ์ ์๋ค.
์ ๋ฆฌ
๋ค์์คํ์ด์ค ์ญ์ :
kubectl delete namespace cpu-example
๋ค์ ๋ด์ฉ
์ฑ ๊ฐ๋ฐ์๋ค์ ์ํ ๋ฌธ์
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ค์ ์ํ ๋ฌธ์
๋ค์์คํ์ด์ค์ ๋ํ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ ์ํ ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ ๊ธฐ๋ณธ CPU ์์ฒญ๋๊ณผ ์ํ ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ์ ์ต์ ๋ฐ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ CPU์ ์ต์ ๋ฐ ์ต๋ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฟผํฐ ๊ตฌ์ฑ