ãã®ããŒãžã«èšèŒãããŠããæ å ±ã¯å€ãå¯èœæ§ããããŸã
ãã®ããŒãžã®æŽæ°æ¥ã¯è±èªçãããå€ããããèšèŒãããŠããæ å ±ãå€ãå¯èœæ§ããããŸããææ°ã®æ å ±ãã芧ã«ãªãããæ¹ã¯è±èªçã®ããŒãžãã芧ãã ãã: Assign CPU Resources to Containers and Pods
ã³ã³ããããã³Podãžã®CPUãªãœãŒã¹ã®å²ãåœãŠ
ãã®ããŒãžã§ã¯ãCPUã® request ãš limit ãã³ã³ããã«å²ãåœãŠãæ¹æ³ã«ã€ããŠç€ºããŸããã³ã³ããã¯èšå®ãããå¶éãè¶ ããŠCPUã䜿çšããããšã¯ã§ããŸãããã·ã¹ãã ã«CPUã®ç©ºãæéãããå Žåãã³ã³ããã«ã¯èŠæ±ãããCPUãå²ãåœãŠãããŸãã
å§ããåã«
Kubernetesã¯ã©ã¹ã¿ãŒãå¿ èŠããã€ãã®ã¯ã©ã¹ã¿ãŒãšéä¿¡ããããã«kubectlã³ãã³ãã©ã€ã³ããŒã«ãèšå®ãããŠããå¿ èŠããããŸãã ãã®ãã¥ãŒããªã¢ã«ã¯ãã³ã³ãããŒã«ãã¬ãŒã³ã®ãã¹ããšããŠåäœããŠããªãå°ãªããšã2ã€ã®ããŒããæã€ã¯ã©ã¹ã¿ãŒã§å®è¡ããããšãããããããŸãã ãŸã ã¯ã©ã¹ã¿ãŒããªãå Žåãminikubeã䜿ã£ãŠäœæãããã 以äžã®ããããã®Kubernetesãã¬ã€ã°ã©ãŠã³ãã䜿çšã§ããŸã:
ããŒãžã§ã³ã確èªããã«ã¯æ¬¡ã®ã³ãã³ããå®è¡ããŠãã ãã: kubectl version
.
ã¿ã¹ã¯äŸãå®è¡ããã«ã¯ãã¯ã©ã¹ã¿ãŒã«å°ãªããšãå©çšå¯èœãª1 CPUãå¿ èŠã§ãã
ãã®ããŒãžã®ããã€ãã®æé ã§ã¯ãã¯ã©ã¹ã¿ãŒã«ãŠmetrics-serverãµãŒãã¹ãå®è¡ããå¿ èŠããããŸãããã§ã«metrics-serverãåäœããŠããå Žåããããã®æé ãã¹ãããã§ããŸãã
MinikubeãåäœãããŠããå Žåã以äžã®ã³ãã³ãã«ããmetrics-serverãæå¹ã«ã§ããŸã:
minikube addons enable metrics-server
metrics-serverãå®è¡ãããŠãããããããã¯ãªãœãŒã¹ã¡ããªã¯ã¹API (metrics.k8s.io
) ã®å¥ã®ãããã€ããŒãå®è¡ãããŠããããšã確èªããã«ã¯ã以äžã®ã³ãã³ããå®è¡ããŠãã ãã:
kubectl get apiservices
ãªãœãŒã¹ã¡ããªã¯ã¹APIãå©çšå¯èœã§ããã°ãåºåã«ã¯ metrics.k8s.io
ãžã®åç
§ãå«ãŸããŸãã
NAME
v1beta1.metrics.k8s.io
namespaceã®äœæ
ãã®ç·Žç¿ã§äœæãããªãœãŒã¹ãã¯ã©ã¹ã¿ãŒå ã§åé¢ããããããNamespaceãäœæããŸãã
kubectl create namespace cpu-example
CPUã®èŠæ±ãšå¶éãæå®ãã
ã³ã³ããã«CPUã®èŠæ±ãæå®ããã«ã¯ãã³ã³ããã®ãªãœãŒã¹ãããã§ã¹ãã«resources:requests
ãã£ãŒã«ãã远èšããŸããCPUã®å¶éãæå®ããã«ã¯ãresources:limits
ã远èšããŸãã
ãã®ç·Žç¿ã§ã¯ãäžã€ã®ã³ã³ããããã€PodãäœæããŸããã³ã³ããã«0.5 CPUã®èŠæ±ãš1 CPUã®å¶éãäžããŸããPodã®èšå®ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸã:
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
ã»ã¯ã·ã§ã³ã§ã¯ãã³ã³ããèµ·åæã®åŒæ°ãäžããŸãã-cpus "2"
ãšããåŒæ°ã§ã¯ãã³ã³ããã«2 CPUãå²ãåœãŠãŸãã
PodãäœæããŠãã ãã:
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit.yaml --namespace=cpu-example
Podã®ã³ã³ãããèµ·åããŠããããšãæ€èšŒããŠãã ãã:
kubectl get pod cpu-demo --namespace=cpu-example
Podã®è©³çŽ°ãªæ å ±ã確èªããŠãã ãã:
kubectl get pod cpu-demo --output=yaml --namespace=cpu-example
ãã®åºåã§ã¯ãPodå ã®äžã€ã®ã³ã³ããã«500ããªCPUã®èŠæ±ãš1 CPUã®å¶éãããããšã瀺ããŠããŸãã
resources:
limits:
cpu: "1"
requests:
cpu: 500m
kubectl top
ãå®è¡ããPodã®ã¡ããªã¯ã¹ãååŸããŠãã ãã:
kubectl top pod cpu-demo --namespace=cpu-example
ãã®åºåã§ã¯ãPodã974ããªCPUã䜿çšããŠããããšã瀺ããŠããŸããPodã®èšå®ã§æå®ãã1 CPUã®å¶éãããããã«å°ããå€ã§ãã
NAME CPU(cores) MEMORY(bytes)
cpu-demo 974m <something>
-cpu "2"
ãèšå®ããããšã§ãã³ã³ããã2 CPUå©çšããããšããããšãæãåºããŠãã ãããããããªãããã³ã³ããã¯çŽ1 CPUãã䜿çšããããšãã§ããŸãããã³ã³ãããå¶éãããå€ãã®CPUãªãœãŒã¹ãå©çšããããšããŠãããããã³ã³ããã®CPUã®å©çšãæå¶ãããŠããŸãã
åè:
CPUã®äœ¿çšéã1.0æªæºã§ããçç±ã®å¯èœæ§ããŠãããŒãã«å©çšå¯èœãªCPUãªãœãŒã¹ãååã«ãªãããšãæããããŸãããã®ç·Žç¿ã«ãããå¿ èŠæ¡ä»¶ãšããŠãã¯ã©ã¹ã¿ãŒã«å°ãªããšãå©çšå¯èœãª1 CPUãå¿ èŠã§ããããšãæãåºããŠãã ããã1 CPUã®ããŒãäžã§ã³ã³ãããå®è¡ãããå Žåãæå®ããã³ã³ããã®CPUå¶éã«ããããããã³ã³ããã¯1 CPU以äžäœ¿çšããããšã¯ã§ããŸãããCPUã®åäœ
CPUãªãœãŒã¹ã¯ CPU ã®åäœã§ç€ºãããŸããKubernetesã«ãããŠ1ã€ã®CPUã¯æ¬¡ã«çãããªããŸã:
- 1 AWS vCPU
- 1 GCPã³ã¢
- 1 Azure vCore
- ãã€ããŒã¹ã¬ããã£ã³ã°ãæå¹ãªãã¢ã¡ã¿ã«Intelããã»ããµãŒã®1ã¹ã¬ãã
å°æ°å€ãå©çšå¯èœã§ãã0.5 CPUãèŠæ±ããã³ã³ããã«ã¯ã1 CPUãèŠæ±ããã³ã³ããã®ååã®CPUãäžããããŸããmãšããããªãè¡šãæ¥å°ŸèŸã䜿çšã§ããŸããããšãã°ã100m CPUã100 milliCPUã0.1 CPUã¯ãã¹ãŠåãã§ãã1m以äžã®ç²ŸåºŠã¯æå®ã§ããŸããã
CPUã¯ã€ãã«çµ¶å¯ŸéãšããŠèŠæ±ãããæ±ºããŠçžå¯ŸéãšããŠã¯èŠæ±ãããŸããã0.1ã¯ã·ã³ã°ã«ã³ã¢ããã¥ã¢ã«ã³ã¢ã48ã³ã¢CPUã®ãã·ã³ã§åãéãšãªããŸãã
Podãåé€ããŠãã ãã:
kubectl delete pod cpu-demo --namespace=cpu-example
ããŒãããã倧ããCPUèŠæ±ãæå®ãã
CPUèŠæ±ãšå¶éã¯ã³ã³ãããšé¢é£ã¥ããããŠããŸãããPodã«CPUèŠæ±ãšå¶éãäžããããŠãããšèãããšããããããã§ããããPodã®CPUèŠæ±ã¯ãPodå ã®ãã¹ãŠã®ã³ã³ããã®CPUèŠæ±ã®åèšãšãªããŸããåæ§ã«ãPodã®CPUå¶éã¯ãPodå ã®ãã¹ãŠã®ã³ã³ããã®CPUå¶éã®åèšãšãªããŸãã
Podã®ã¹ã±ãžã¥ãŒãªã³ã°ã¯ãªãœãŒã¹ã®èŠæ±éã«åºã¥ããŠããŸããPodã¯ããŒãäžã§åäœããããã§ããã®CPUèŠæ±ã«å¯ŸããŠããŒãã«ååå©çšå¯èœãªCPUãªãœãŒã¹ãããå Žåã®ã¿ã¹ã±ãžã¥ãŒã«ãããŸãã
ãã®ç·Žç¿ã§ã¯ãã¯ã©ã¹ã¿ãŒå ã®ããŒãã®ãã£ãã·ãã£ãè¶ ãã倧ããã®CPUèŠæ±ãäžããPodãäœæããŸãã以äžã«100 CPUã®èŠæ±ãäžããäžã€ã®ã³ã³ãããæã€ãPodã®èšå®ãã¡ã€ã«ã瀺ããŸããããã¯ãã¯ã©ã¹ã¿ãŒå ã®ããŒãã®ãã£ãã·ãã£ãè¶ ããå¯èœæ§ããããŸãã
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"
PodãäœæããŠãã ãã:
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit-2.yaml --namespace=cpu-example
Podã®ç¶æ ã確èªããŠãã ãã:
kubectl get pod cpu-demo-2 --namespace=cpu-example
ãã®åºåã§ã¯ãPodã®ã¹ããŒã¿ã¹ãåŸ æ©äžã§ããããšã瀺ããŠããŸããã€ãŸããPodãã©ã®ããŒãã«å¯ŸããŠãå®è¡ããããã¹ã±ãžã¥ãŒã«ãããŠãããããã€ãŸã§ãåŸ æ©ç¶æ ã®ãŸãŸã§ããããšã衚ããŠããŸã:
NAME READY STATUS RESTARTS AGE
cpu-demo-2 0/1 Pending 0 7m
ã€ãã³ããå«ãPodã®è©³çŽ°ãªæ å ±ã確èªããŠãã ãã:
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).
Podãåé€ããŠãã ãã:
kubectl delete pod cpu-demo-2 --namespace=cpu-example
CPUå¶éãæå®ããªãå Žå
ã³ã³ããã®CPUå¶éãæå®ããªãå Žåãæ¬¡ã®ããããã®ç¶æ ãšãªããŸã:
ã³ã³ããã®CPUãªãœãŒã¹ã®äœ¿çšéã«äžéããªãç¶æ ãšãªããŸããã³ã³ããã¯å®è¡äžã®ããŒãã§å©çšå¯èœãªãã¹ãŠã®CPUã䜿çšã§ããŸãã
CPUå¶éãäžããããnamespaceã§ã³ã³ãããå®è¡ããããšãã³ã³ããã«ã¯ããã©ã«ãã®å¶éå€ãèªåçã«æå®ãããŸããã¯ã©ã¹ã¿ãŒã®ç®¡çè ã¯LimitRangeã«ãã£ãŠCPUå¶éã®ããã©ã«ãå€ãæå®ã§ããŸãã
CPUèŠæ±ãšå¶éã®ã¢ãããŒã·ã§ã³
ã¯ã©ã¹ã¿ãŒã§åäœããã³ã³ããã«CPUèŠæ±ãšå¶éãèšå®ããããšã§ãã¯ã©ã¹ã¿ãŒã®ããŒãã§å©çšå¯èœãªCPUãªãœãŒã¹ãå¹ççã«äœ¿çšããããšãã§ããŸããPodã®CPUèŠæ±ãäœãä¿ã€ããšã§ãPodãã¹ã±ãžã¥ãŒã«ããããããªããŸããCPUèŠæ±ããã倧ããå¶éãäžããããšã§ã次ã®2ã€ãå®çŸã§ããŸã:
- Podã¯å©çšå¯èœãªCPUãªãœãŒã¹ããçªçºçãªæŽ»å(ããŒã¹ã)ã«äœ¿çšããããšãã§ããŸãã
- ããŒã¹ãäžã®Podã®CPUãªãœãŒã¹éã¯ãé©åãªéã«å¶éãããŸãã
ã¯ãªãŒã³ã¢ãã
namespaceãåé€ããŠãã ãã:
kubectl delete namespace cpu-example
次ã®é ç®
ã¢ããªã±ãŒã·ã§ã³éçºè åã
ã¯ã©ã¹ã¿ãŒç®¡çè åã
Namespaceã«ã¡ã¢ãªãŒèŠæ±ããã³å¶éã®ããã©ã«ãå€ãèšå®ãã
Namespaceã«CPUèŠæ±ããã³å¶éã®ããã©ã«ãå€ãèšå®ãã
Namespaceã«æå°ããã³æå€§ã¡ã¢ãªãŒéã®å¶çŽãèšå®ãã
Namespaceã«æå°ããã³æå€§ã®CPU䜿çšéã®å¶çŽãèšå®ãã
Namespaceã«ã¡ã¢ãªãŒããã³CPUã®ã¯ã©ãŒã¿ãèšå®ãã