ååãšããŠãã¢ããªã±ãŒã·ã§ã³ãæ£ããå®å®ããŠåäœããããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã«å°çšã®ãªãœãŒã¹ ããŒã«ãæäŸããå¿ èŠãåžžã«ãããŸãã ããããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãåãé»æºã§å®è¡ãããŠããå Žåã¯ã©ããªãã§ãããã? ããããã«å¿ èŠæå°éã®ãªãœãŒã¹ãæäŸããã«ã¯ã©ãããã°ããã§ãããã? ãªãœãŒã¹ã®æ¶è²»ãã©ã®ããã«å¶éã§ããã§ãããã? ããŒãéã§è² è·ãæ£ããåæ£ããã«ã¯ã©ãããã°ããã§ãããã? ã¢ããªã±ãŒã·ã§ã³ã®è² è·ãå¢å ããå Žåã«æ°Žå¹³ã¹ã±ãŒãªã³ã°ã¡ã«ããºã ã確å®ã«æ©èœããããã«ããã«ã¯ã©ãããã°ããã§ãããã?
ã·ã¹ãã ã«ååšããäž»ãªãªãœãŒã¹ã®çš®é¡ããå§ããå¿ èŠããããŸããããã¯ããã¡ãããããã»ããµæéãš RAM ã§ãã k8s ãããã§ã¹ãã§ã¯ããããã®ãªãœãŒã¹ ã¿ã€ãã¯æ¬¡ã®åäœã§æž¬å®ãããŸãã
- CPU - ã³ã¢å
- RAM - ãã€ãåäœ
ããã«ããªãœãŒã¹ããšã« XNUMX çš®é¡ã®èŠä»¶ãèšå®ã§ããŸãã ãªã¯ãšã¹ã О å¶éã ãªã¯ãšã¹ã - ã³ã³ãã㌠(ããã³ãããå šäœ) ãå®è¡ããããã®ããŒãã®ç©ºããªãœãŒã¹ã®æå°èŠä»¶ãèšè¿°ããŸããäžæ¹ãå¶éã¯ãã³ã³ãããŒã§äœ¿çšã§ãããªãœãŒã¹ã«å¯ŸããããŒãå¶éãèšå®ããŸãã
ãããã§ã¹ãã§äž¡æ¹ã®ã¿ã€ããæ瀺çã«å®çŸ©ããå¿ èŠã¯ãªãããšãç解ããããšãéèŠã§ãããåäœã¯æ¬¡ã®ããã«ãªããŸãã
- ãªãœãŒã¹ã®å¶éã®ã¿ãæ瀺çã«æå®ãããŠããå Žåããã®ãªãœãŒã¹ã«å¯Ÿãããªã¯ãšã¹ãã¯èªåçã«å¶éã«çããå€ãååŸããŸã (ããã¯ããšã³ãã£ãã£ã®èšè¿°ãåŒã³åºãããšã§ç¢ºèªã§ããŸã)ã ãããã®ã å®éãã³ã³ããã¯å®è¡ã«å¿ èŠãªãªãœãŒã¹ãšåãéã«å¶éãããŸãã
- ãªãœãŒã¹ã«å¯ŸããŠãªã¯ãšã¹ãã®ã¿ãæ瀺çã«æå®ãããŠããå Žåããã®ãªãœãŒã¹ã«ã¯äžéã¯èšå®ãããŸããã ã³ã³ããã¯ããŒãèªäœã®ãªãœãŒã¹ã«ãã£ãŠã®ã¿å¶éãããŸãã
ç¹å®ã®ã³ã³ãããŒã®ã¬ãã«ã ãã§ãªãã次ã®ãšã³ãã£ãã£ã䜿çšããŠåå空éã¬ãã«ã§ããªãœãŒã¹ç®¡çãæ§æããããšãã§ããŸãã
- å¶éç¯å² â ã³ã³ãã/ããã ã¬ãã«ã§ã®å¶éããªã·ãŒã ns ã§èšè¿°ããŸããããã¯ãã³ã³ãã/ãããã®ããã©ã«ãã®å¶éãèšè¿°ããã ãã§ãªããæããã«å€ªãã³ã³ãã/ããã (ãŸãã¯ãã®é) ã®äœæãé²æ¢ãããã®æ°ãå¶éããããã«å¿ èŠã§ãããããŠãå¶éãšãªã¯ãšã¹ãã®å€ã«èµ·ããåŸãå·®ç°ãå€æããŸã
- ãªãœãŒã¹ã¯ã©ãŒã¿ â ns å ã®ãã¹ãŠã®ã³ã³ããã«å¯Ÿããäžè¬çãªå¶éããªã·ãŒãèšè¿°ããååãšããŠç°å¢éã®ãªãœãŒã¹ãåºåãããã«äœ¿çšãããŸã (ç°å¢ãããŒã ã¬ãã«ã§å³å¯ã«åºåãããŠããªãå Žåã«åœ¹ç«ã¡ãŸã)
以äžã¯ããªãœãŒã¹å¶éãèšå®ãããããã§ã¹ãã®äŸã§ãã
-
ç¹å®ã®ã³ã³ãã㌠ã¬ãã«ã§ã¯æ¬¡ã®ããã«ãªããŸãã
containers: - name: app-nginx image: nginx resources: requests: memory: 1Gi limits: cpu: 200m
ãããã®ã ãã®å Žåãnginx ã§ã³ã³ãããå®è¡ããã«ã¯ãããŒãäžã«å°ãªããšã 1G ã®ç©ºã RAM ãš 0.2 CPU ãå¿ èŠã§ãããã³ã³ãããæ¶è²»ã§ããã®ã¯æ倧ã§ã 0.2 CPU ãšããŒãäžã®ãã¹ãŠã®å©çšå¯èœãª RAM ã§ãã
-
æŽæ°ã¬ãã« ns ã§ã¯ã次ã®ããã«ãªããŸãã
apiVersion: v1 kind: ResourceQuota metadata: name: nxs-test spec: hard: requests.cpu: 300m requests.memory: 1Gi limits.cpu: 700m limits.memory: 2Gi
ãããã®ã ããã©ã«ãã® ns å ã®ãã¹ãŠã®ãªã¯ãšã¹ã ã³ã³ããã®åèšã¯ãCPU 㧠300mãOP 㧠1G ãè¶ ããããšã¯ã§ããŸããããã¹ãŠã®å¶éã®åèšã¯ãCPU 㧠700mãOP 㧠2G ã§ãã
-
ns åäœã®ã³ã³ããã®ããã©ã«ãå¶é:
apiVersion: v1 kind: LimitRange metadata: name: nxs-limit-per-container spec: limits: - type: Container defaultRequest: cpu: 100m memory: 1Gi default: cpu: 1 memory: 2Gi min: cpu: 50m memory: 500Mi max: cpu: 2 memory: 4Gi
ãããã®ã ãã¹ãŠã®ã³ã³ãããŒã®ããã©ã«ãã®åå空éã§ã¯ããªã¯ãšã¹ã㯠CPU ã« 100mãOP ã« 1G ã«èšå®ãããå¶é㯠1 CPU ãš 2G ã«èšå®ãããŸãã åæã«ãCPU (50m < x < 2) ããã³ RAM (500M < x < 4G) ã®ãªã¯ãšã¹ã/å¶éã®å¯èœãªå€ã«ãå¶éãèšå®ãããŸãã
-
ãããã¬ãã«ã®å¶é ns:
apiVersion: v1 kind: LimitRange metadata: name: nxs-limit-pod spec: limits: - type: Pod max: cpu: 4 memory: 1Gi
ãããã®ã ããã©ã«ãã® ns ã®åãããã«ã¯ã4 vCPU ãš 1G ã®å¶éããããŸãã
ããã§ããããã®å¶éãèšå®ããããšã§ã©ã®ãããªã¡ãªãããåŸãããã®ãã説æããããšæããŸãã
ããŒãéã®è² è·åæ£ã¡ã«ããºã
ãåç¥ã®ãšãããk8s ã³ã³ããŒãã³ãã¯ããŒãéã®ãããã®åæ£ãæ åœããŸãã ã¹ã±ãžã¥ãŒã©ãç¹å®ã®ã¢ã«ãŽãªãºã ã«åŸã£ãŠåäœããŸãã ãã®ã¢ã«ãŽãªãºã ã¯ãèµ·åããæé©ãªããŒããéžæããéã« XNUMX ã€ã®æ®µéãçµãŸãã
- ãã£ã«ã¿ãªã³ã°
- ã¬ã³ãžã³ã°
ãããã®ã 説æãããããªã·ãŒã«åŸã£ãŠãã»ããã«åºã¥ããŠããããèµ·åã§ããããŒããæåã«éžæãããŸãã è¿°èª (ããŒãã«ããããå®è¡ããã®ã«ååãªãªãœãŒã¹ããããã©ããã®ç¢ºèª (PodFitsResources ãå«ã))ã次ã«ããããã®ããŒãããšã«ã次ã®ããã«ããŸãã åªå é äœ ãã€ã³ããä»äžãã (ããŒãã®ç©ºããªãœãŒã¹ãå€ãã»ã©ãããå€ãã®ãã€ã³ããå²ãåœãŠãããŸã - LeastResourceAllocation/LeastRequestedPriority/BalancedResourceAllocation)ãæãå€ãã®ãã€ã³ããæã€ããŒãã§ããããèµ·åãããŸã (è€æ°ã®ããŒããäžåºŠã«ãã®æ¡ä»¶ãæºãããå Žåãã©ã³ãã ã«éžæãããŸã)ã
åæã«ãã¹ã±ãžã¥ãŒã©ã¯ãããŒãã®å©çšå¯èœãªãªãœãŒã¹ãè©äŸ¡ãããšãã«ãetcd ã«ä¿åãããŠããããŒã¿ã«ãã£ãŠã¬ã€ããããããšãç解ããå¿
èŠããããŸãã ãã®ããŒãã§å®è¡ãããŠããåãããã®èŠæ±/å¶éãªãœãŒã¹ã®éã§ã¯ãªããå®éã®ãªãœãŒã¹æ¶è²»éã§ã¯ãããŸããã ãã®æ
å ±ã¯ã³ãã³ãåºåããååŸã§ããŸãã kubectl describe node $NODE
ããšãã°ã次ã®ããã«ãªããŸãã
# kubectl describe nodes nxs-k8s-s1
..
Non-terminated Pods: (9 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
ingress-nginx nginx-ingress-controller-754b85bf44-qkt2t 0 (0%) 0 (0%) 0 (0%) 0 (0%) 233d
kube-system kube-flannel-26bl4 150m (0%) 300m (1%) 64M (0%) 500M (1%) 233d
kube-system kube-proxy-exporter-cb629 0 (0%) 0 (0%) 0 (0%) 0 (0%) 233d
kube-system kube-proxy-x9fsc 0 (0%) 0 (0%) 0 (0%) 0 (0%) 233d
kube-system nginx-proxy-k8s-worker-s1 25m (0%) 300m (1%) 32M (0%) 512M (1%) 233d
nxs-monitoring alertmanager-main-1 100m (0%) 100m (0%) 425Mi (1%) 25Mi (0%) 233d
nxs-logging filebeat-lmsmp 100m (0%) 0 (0%) 100Mi (0%) 200Mi (0%) 233d
nxs-monitoring node-exporter-v4gdq 112m (0%) 122m (0%) 200Mi (0%) 220Mi (0%) 233d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 487m (3%) 822m (5%)
memory 15856217600 (2%) 749976320 (3%)
ephemeral-storage 0 (0%) 0 (0%)
ããã§ã¯ãç¹å®ã®ããŒãã§å®è¡ãããŠãããã¹ãŠã®ããããšãåããããèŠæ±ãããªãœãŒã¹ã衚瀺ãããŸãã cronjob-cron-events-1573793820-xt6q9 ããããèµ·åããããšãã®ã¹ã±ãžã¥ãŒã©ãŒ ãã°ã¯æ¬¡ã®ããã«ãªããŸã (ãã®æ å ±ã¯ãèµ·åã³ãã³ã -v=10 ã®åŒæ°ã« 10 çªç®ã®ãã° ã¬ãã«ãèšå®ãããŠããå Žåã«ã¹ã±ãžã¥ãŒã©ãŒ ãã°ã«è¡šç€ºãããŸã) ):
ã«ã¢ã¡
I1115 07:57:21.637791 1 scheduling_queue.go:908] About to try and schedule pod nxs-stage/cronjob-cron-events-1573793820-xt6q9
I1115 07:57:21.637804 1 scheduler.go:453] Attempting to schedule pod: nxs-stage/cronjob-cron-events-1573793820-xt6q9
I1115 07:57:21.638285 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s5 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638300 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s6 is allowed, Node is running only 20 out of 110 Pods.
I1115 07:57:21.638322 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s3 is allowed, Node is running only 20 out of 110 Pods.
I1115 07:57:21.638322 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s4 is allowed, Node is running only 17 out of 110 Pods.
I1115 07:57:21.638334 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638365 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s12 is allowed, Node is running only 9 out of 110 Pods.
I1115 07:57:21.638334 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s11 is allowed, Node is running only 11 out of 110 Pods.
I1115 07:57:21.638385 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s1 is allowed, Node is running only 19 out of 110 Pods.
I1115 07:57:21.638402 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s2 is allowed, Node is running only 21 out of 110 Pods.
I1115 07:57:21.638383 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, Node is running only 16 out of 110 Pods.
I1115 07:57:21.638335 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, Node is running only 18 out of 110 Pods.
I1115 07:57:21.638408 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s13 is allowed, Node is running only 8 out of 110 Pods.
I1115 07:57:21.638478 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s10 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638505 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s8 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638577 1 predicates.go:1369] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s9 is allowed, existing pods anti-affinity terms satisfied.
I1115 07:57:21.638583 1 predicates.go:829] Schedule Pod nxs-stage/cronjob-cron-events-1573793820-xt6q9 on Node nxs-k8s-s7 is allowed, Node is running only 25 out of 110 Pods.
I1115 07:57:21.638932 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 9
I1115 07:57:21.638946 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 2343 millicores 9640186880 memory bytes, score 8
I1115 07:57:21.638961 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: BalancedResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 9
I1115 07:57:21.638971 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: BalancedResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7
I1115 07:57:21.638975 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: LeastResourceAllocation, capacity 39900 millicores 66620170240 memory bytes, total request 4107 millicores 11307422720 memory bytes, score 8
I1115 07:57:21.638990 1 resource_allocation.go:78] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: LeastResourceAllocation, capacity 39900 millicores 66620178432 memory bytes, total request 5847 millicores 24333637120 memory bytes, score 7
I1115 07:57:21.639022 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639030 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639034 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: TaintTolerationPriority, Score: (10)
I1115 07:57:21.639041 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639053 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639059 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: NodeAffinityPriority, Score: (0)
I1115 07:57:21.639061 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639063 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639073 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639077 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639085 1 interpod_affinity.go:237] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: InterPodAffinityPriority, Score: (0)
I1115 07:57:21.639088 1 selector_spreading.go:146] cronjob-cron-events-1573793820-xt6q9 -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639103 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s10: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639109 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s8: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639114 1 generic_scheduler.go:726] cronjob-cron-events-1573793820-xt6q9_nxs-stage -> nxs-k8s-s9: SelectorSpreadPriority, Score: (10)
I1115 07:57:21.639127 1 generic_scheduler.go:781] Host nxs-k8s-s10 => Score 100037
I1115 07:57:21.639150 1 generic_scheduler.go:781] Host nxs-k8s-s8 => Score 100034
I1115 07:57:21.639154 1 generic_scheduler.go:781] Host nxs-k8s-s9 => Score 100037
I1115 07:57:21.639267 1 scheduler_binder.go:269] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10"
I1115 07:57:21.639286 1 scheduler_binder.go:279] AssumePodVolumes for pod "nxs-stage/cronjob-cron-events-1573793820-xt6q9", node "nxs-k8s-s10": all PVCs bound and nothing to do
I1115 07:57:21.639333 1 factory.go:733] Attempting to bind cronjob-cron-events-1573793820-xt6q9 to nxs-k8s-s10
ããã§ã¯ãæåã«ã¹ã±ãžã¥ãŒã©ããã£ã«ã¿ãªã³ã°ãè¡ããèµ·åã§ãã 3 ã€ã®ããŒã (nxs-k8s-s8ãnxs-k8s-s9ãnxs-k8s-s10) ã®ãªã¹ããçæããŠããããšãããããŸãã 次ã«ããããã®åããŒãã®ããã€ãã®ãã©ã¡ãŒã¿ãŒ (BalancedResourceAllocationãLeastResourceAllocation ãªã©) ã«åºã¥ããŠã¹ã³ã¢ãèšç®ããæé©ãªããŒãã決å®ããŸãã æçµçã«ããããã¯æãé«ããã€ã³ãæ°ãæã€ããŒãã«ã¹ã±ãžã¥ãŒã«ãããŸã (ããã§ã¯ã100037 ã€ã®ããŒããåæã«åããã€ã³ãæ° 8 ãæã£ãŠãããããã©ã³ãã 㪠10 〠(nxs-kXNUMXs-sXNUMX) ãéžæãããŸã)ã
åºå: ããŒããå¶éãèšå®ãããŠããªãããããå®è¡ããå Žåãk8s ã®å Žå (ãªãœãŒã¹æ¶è²»ã®èŠ³ç¹ãã)ããã®ããŒãã«ã¯ãã®ãããªãããããŸã£ããååšããŠããªãããšåãã«ãªããŸãã ãããã£ãŠãæ¡ä»¶ä»ãã§å€§é£ãããã»ã¹ (wowza ãªã©) ãæã€ãããããããããã«å¶éãèšå®ãããŠããªãå Žåããã®ããããå®éã«ããŒãã®ãã¹ãŠã®ãªãœãŒã¹ãæ¶è²»ããç¶æ³ãçºçããå¯èœæ§ããããŸãããk8s ã®å Žåã¯ãã®ããŒããã¯ã¢ã³ããŒããããŠãããšã¿ãªãããã©ã³ã¯ä»ãæã« (æ£ç¢ºã«ã¯å©çšå¯èœãªãªãœãŒã¹ãè©äŸ¡ãããã€ã³ãã§) åäœäžã®ããããæããªãããŒããšåããã€ã³ããä»äžãããŸããããã«ãããæçµçã«ããŒãéã§è² è·ãäžåçã«åæ£ãããå¯èœæ§ããããŸãã
ãããã®ãšãã¯ã·ã§ã³
ãåç¥ã®ãšãããåãããã«ã¯ 3 ã€ã® QoS ã¯ã©ã¹ã®ãããããå²ãåœãŠãããŸãã
- ä¿èšŒããã â ãããå ã®åã³ã³ãããŒã§ã¡ã¢ãªãš CPU ã®ãªã¯ãšã¹ããšå¶éãæå®ããããããã®å€ãäžèŽããå¿ èŠãããå Žåã«å²ãåœãŠãããŸãã
- ç Žè£ãããã â ãããå ã®å°ãªããšã XNUMX ã€ã®ã³ã³ãããŒã«ãªã¯ãšã¹ããšå¶éãããããªã¯ãšã¹ã < å¶éã§ãã
- ãã¹ããšãã©ãŒã â ãããå ã®ãªãœãŒã¹ãå¶éãããŠããã³ã³ãããŒã XNUMX ã€ããªãå Žå
åæã«ãããŒãã§ãªãœãŒã¹ (ãã£ã¹ã¯ãã¡ã¢ãª) ã®äžè¶³ãçºçãããšãkubelet ã¯ãããã®åªå é äœãšãã® QoS ã¯ã©ã¹ãèæ ®ããç¹å®ã®ã¢ã«ãŽãªãºã ã«åŸã£ãŠãããã®ã©ã³ã¯ä»ããšåé€ãéå§ããŸãã ããšãã°ãRAM ã«ã€ããŠè©±ããŠããå ŽåãQoS ã¯ã©ã¹ã«åºã¥ããŠã次ã®ååã«åŸã£ãŠãã€ã³ããä»äžãããŸãã
- ä¿èšŒãããïŒ-998
- æ倧éã®åªåïŒïŒïŒïŒ
- ç Žè£æ§: min(max(2, 1000 - (1000 * ã¡ã¢ãªãªã¯ãšã¹ããã€ã) / ãã·ã³ã¡ã¢ãªå®¹éãã€ã), 999)
ãããã®ã åãåªå é äœã§ãkubelet ã¯æåã«ãã¹ããšãã©ãŒã QoS ã¯ã©ã¹ã®ããããããŒãããåé€ããŸãã
åºå: ãªãœãŒã¹ãäžè¶³ããå Žåã«ãç®çã®ããããããŒãããåé€ãããå¯èœæ§ãæžããããå Žåã¯ãåªå é äœãšãšãã«ããªã¯ãšã¹ã/å¶éã®èšå®ã«ã泚æããå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ ãããã®æ°Žå¹³èªåã¹ã±ãŒãªã³ã°ã®ã¡ã«ããºã (HPA)
ã¿ã¹ã¯ããk8s ãšã³ãã£ãã£ãªã©ã®ãªãœãŒã¹ (ã·ã¹ãã - CPU/RAM ãŸãã¯ãŠãŒã¶ãŒ - RPS) ã®äœ¿çšç¶æ³ã«å¿ããŠãããã®æ°ãèªåçã«å¢æžããããšã§ããå Žåã HPA (æ°Žå¹³ããã ãªãŒãã¹ã±ãŒã©ãŒ)ã ãã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- ç£èŠãããŠãããªãœãŒã¹ã®çŸåšã®èªã¿åãå€ã決å®ãããŸã (currentMetricValue)
- ãªãœãŒã¹ã®æãŸããå€ (desiredMetricValue) ã決å®ãããŸããã·ã¹ãã ãªãœãŒã¹ã®å€ã¯ããªã¯ãšã¹ãã䜿çšããŠèšå®ãããŸãã
- çŸåšã®ã¬ããªã«æ°ã決å®ãããŸã (currentReplicas)
- 次ã®åŒã¯ãå¿
èŠãªã¬ããªã«æ° (desiredReplicas) ãèšç®ããŸãã
æãŸããã¬ããªã« = [ çŸåšã®ã¬ããªã« * ( çŸåšã®ã¡ããªãã¯å€ / æãŸããã¡ããªãã¯å€ )]
ãã®å Žåãä¿æ° (currentMetricValue /desiredMetricValue) ã 1 ã«è¿ãå Žåãã¹ã±ãŒãªã³ã°ã¯çºçããŸãã (ãã®å Žåã蚱容誀差ãèªåã§èšå®ã§ããŸããããã©ã«ãã§ã¯ 0.1 ã§ã)ã
ã¢ããªãã¹ã ã¢ããªã±ãŒã·ã§ã³ (ãããã€ã¡ã³ããšããŠèª¬æ) ã®äŸã䜿çšããŠãhpa ãã©ã®ããã«æ©èœããããèŠãŠã¿ãŸããããããã§ã¯ãCPU æ¶è²»éã«å¿ããŠã¬ããªã«ã®æ°ãå€æŽããå¿ èŠããããŸãã
-
ã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ã
kind: Deployment apiVersion: apps/v1beta2 metadata: name: app-test spec: selector: matchLabels: app: app-test replicas: 2 template: metadata: labels: app: app-test spec: containers: - name: nginx image: registry.nixys.ru/generic-images/nginx imagePullPolicy: Always resources: requests: cpu: 60m ports: - name: http containerPort: 80 - name: nginx-exporter image: nginx/nginx-prometheus-exporter resources: requests: cpu: 30m ports: - name: nginx-exporter containerPort: 9113 args: - -nginx.scrape-uri - http://127.0.0.1:80/nginx-status
ãããã®ã ã¢ããªã±ãŒã·ã§ã³ ããããæåã« XNUMX ã€ã®ã€ã³ã¹ã¿ã³ã¹ã§èµ·åãããããããã®ã€ã³ã¹ã¿ã³ã¹ã« XNUMX ã€ã® nginx ã³ã³ãããŒãš nginx-exporter ã³ã³ãããŒãå«ãŸããŠããããšãããããŸãã ãªã¯ãšã¹ã CPUçšã
-
HPAãããã§ã¹ã
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: app-test-hpa spec: maxReplicas: 10 minReplicas: 2 scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: app-test metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 30
ãããã®ã ãããã€ã¡ã³ãã®ã¢ããªãã¹ããç£èŠããCPU ã€ã³ãžã±ãŒã¿ãŒã«åºã¥ããŠã¢ããªã±ãŒã·ã§ã³ã®ãããæ°ã調æŽãã hpa ãäœæããŸãã (ãããã¯èŠæ±ãã CPU ã® 30% ãæ¶è²»ãããšäºæ³ãããŸã)ãã¬ããªã«ã®æ°ã¯æ¬¡ã®ãšããã§ãã 2ïœ10ã®ç¯å²ã§ã
ããã§ãçåºã® XNUMX ã€ã«è² è·ãå ããå Žåã® HPA åäœã®ã¡ã«ããºã ãèŠãŠã¿ãŸãããã
# kubectl top pod NAME CPU(cores) MEMORY(bytes) app-test-78559f8f44-pgs58 101m 243Mi app-test-78559f8f44-cj4jz 4m 240Mi
åèšãããšæ¬¡ã®ãšããã§ãã
- æãŸããå€ (desiredMetricValue) - hpa èšå®ã«ããã°ã30% ã§ãã
- çŸåšã®å€ (currentMetricValue) - èšç®ã®ããã«ãã³ã³ãããŒã©ãŒ ãããŒãžã£ãŒã¯ãªãœãŒã¹æ¶è²»ã®å¹³åå€ã % ã§èšç®ããŸãã æ¡ä»¶ä»ãã§æ¬¡ã®ããšãè¡ããŸãã
- ã¡ããªã¯ã¹ ãµãŒããŒããããã ã¡ããªã¯ã¹ã®çµ¶å¯Ÿå€ãåãåããŸãã 101mãš4m
- å¹³å絶察å€ãèšç®ããŸãã (101m + 4m) / 2 = 53m
- å¿ èŠãªãªãœãŒã¹æ¶è²»ã®çµ¶å¯Ÿå€ãååŸããŸã (ãã®ããã«ããã¹ãŠã®ã³ã³ããã®ãªã¯ãšã¹ããåèšãããŸã) 60m + 30m = 90m
- ãªã¯ãšã¹ããããã«å¯Ÿãã CPU æ¶è²»ã®å¹³åããŒã»ã³ããŒãžãèšç®ããŸãã 53m / 90m * 100% = 59%
ããã§ãã¬ããªã«ã®æ°ãå€æŽããå¿ èŠããããã©ãããå€æããããã«å¿ èŠãªãã®ããã¹ãŠæã£ãã®ã§ããã®ããã«ä¿æ°ãèšç®ããŸãã
ratio = 59% / 30% = 1.96
ãããã®ã ã¬ããªã«ã®æ°ã¯çŽ 2 åã«å¢å ãã[2 * 1.96] = 4 ã«ãªããŸãã
çµè«ïŒ ã芧ã®ãšããããã®ã¡ã«ããºã ãæ©èœããããã«å¿ èŠãªæ¡ä»¶ã¯ãç£èŠå¯Ÿè±¡ã®ãããå ã®ãã¹ãŠã®ã³ã³ãããŒã«å¯Ÿãããªã¯ãšã¹ããååšããããšã§ãã
ããŒãã®æ°Žå¹³èªåã¹ã±ãŒãªã³ã°ã®ã¡ã«ããºã (ã¯ã©ã¹ã¿ãŒ ãªãŒãã¹ã±ãŒã©ãŒ)
è² è·ãµãŒãžæã«ã·ã¹ãã ãžã®æªåœ±é¿ãäžåããã«ã¯ãhpa ãèšå®ããã ãã§ã¯ååã§ã¯ãããŸããã ããšãã°ãhpa ã³ã³ãããŒã©ãŒ ãããŒãžã£ãŒã®èšå®ã«åŸã£ãŠãã¬ããªã«ã®æ°ã 2 åã«å¢ããå¿ èŠããããšå€æããŸãããããŒãã«ã¯ãã®ãããªæ°ã®ããããå®è¡ããããã®ç©ºããªãœãŒã¹ããããŸãã (ã€ãŸããããŒãã¯èŠæ±ããããªãœãŒã¹ããªã¯ãšã¹ã ãããã«éä¿¡ãããããã®ãããã¯ä¿çç¶æ ã«åãæ¿ãããŸãã
ãã®å Žåããããã€ããŒã察å¿ãã IaaS/PaaS (GKE/GCEãAKSãEKS ãªã©) ãæã£ãŠããå Žåã次ã®ãããªããŒã« ããŒããªãŒãã¹ã±ãŒã©ãŒã ããã«ãããã¯ã©ã¹ã¿ãŒå ã®ããŒãã®æ倧æ°ãšæå°æ°ãèšå®ããã¯ã©ã¹ã¿ãŒãšãããã«ãªãœãŒã¹ãäžè¶³ããŠããå Žåã« (ã¯ã©ãŠã ãããã€ã㌠API ãåŒã³åºããŠããŒãã泚æ/åé€ããããšã§) çŸåšã®ããŒãæ°ãèªåçã«èª¿æŽã§ããŸããã¹ã±ãžã¥ãŒã«ã§ããŸãã (ä¿çç¶æ ã«ãªã£ãŠããŸã)ã
çµè«ïŒ ããŒããèªåã¹ã±ãŒã«ã§ããããã«ããã«ã¯ãk8s ãããŒãã®è² è·ãæ£ããè©äŸ¡ããããã«å¿ããŠæ¬¡ã®ããããèµ·åããããã®ãªãœãŒã¹ãã¯ã©ã¹ã¿ãŒå ã«ãªãããšãå ±åã§ããããã«ãããã ã³ã³ãããŒã«ãªã¯ãšã¹ããèšå®ããå¿ èŠããããŸãã
ãŸãšã
ã³ã³ãããŒã®ãªãœãŒã¹å¶éãèšå®ããããšã¯ãã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«å®è¡ããããã®èŠä»¶ã§ã¯ãããŸãããã次ã®çç±ã«ãããèšå®ããããšããå§ãããŸãã
- k8s ããŒãéã®è² è·åæ£ã«é¢ããã¹ã±ãžã¥ãŒã©ã®ããæ£ç¢ºãªåäœã®ãã
- ããããã®ãšãã¯ã·ã§ã³ãã€ãã³ããçºçããå¯èœæ§ãæžãããã
- ã¢ããªã±ãŒã·ã§ã³ ããã (HPA) ã®æ°Žå¹³èªåã¹ã±ãŒãªã³ã°ãæ©èœããã«ã¯
- ã¯ã©ãŠããããã€ããŒåãã®ããŒãã®æ°Žå¹³èªåã¹ã±ãŒãªã³ã° (ã¯ã©ã¹ã¿ãŒèªåã¹ã±ãŒãªã³ã°) çš
ç§ãã¡ã®ããã°ã®ä»ã®èšäºããèªã¿ãã ããã
Tekton Pipeline - Kubernetes ãã€ãã£ãã®ãã€ãã©ã€ã³ Nginx çšã®åçã¢ãžã¥ãŒã«ã®æ§ç¯ æ¿èªãªãã® ClickHouse ããæ¿èªããã® ClickHouse ãžã®ç§»è¡ã¯ã©ããªããŸããã? Golang ã® Context ããã±ãŒãžãç解ãã Docker ã€ã¡ãŒãžãçž®å°ããããã® XNUMX ã€ã®ç°¡åãªããªã㯠å€æ°ã®ç°çš® Web ãããžã§ã¯ãã®ããã¯ã¢ãã
åºæïŒ habr.com