ããã«ã¡ã¯ãã¿ããªïŒ ç§ã®ååã¯ãªã¬ã°ã»ã·ãã¬ã³ã³ãã§ããDomClick ã§ã€ã³ãã©ã¹ãã©ã¯ã㣠ããŒã ã®è²¬ä»»è ãšããŠåããŠããŸãã ç§ãã¡ã¯ XNUMX 幎以äžã«ããã£ãŠå®çšŒåç°å¢ã§ Kubik ã䜿çšããŠããããã®éãKubik ã§ããŸããŸãªèå³æ·±ãç¬éãçµéšããŠããŸããã ä»æ¥ã¯ãé©åãªã¢ãããŒãã䜿çšããŠãã¯ã©ã¹ã¿ãŒã®æšæºç㪠Kubernetes ããããã«å€ãã®ããã©ãŒãã³ã¹ãåŒãåºãæ¹æ³ã説æããŸãã æºåã¯äžå šã§ãïŒ
Kubernetes ãã³ã³ãã ãªãŒã±ã¹ãã¬ãŒã·ã§ã³çšã®ã¹ã±ãŒã©ãã«ãªãªãŒãã³ ãœãŒã¹ ã·ã¹ãã ã§ããããšã¯çããããããåãã§ãããã ãŸãã¯ããµãŒããŒç°å¢ã§ãã€ã¯ããµãŒãã¹ã®ã©ã€ããµã€ã¯ã«ã管çããããšã§éæ³ã®ããã«æ©èœãã 5 ã€ã®ãã€ããªã§ãã ããã«ãã¬ãŽã®ããã«çµã¿ç«ãŠãããšãã§ããããªãæè»ãªããŒã«ã§ãããŸããŸãªã¿ã¹ã¯ã«åãããŠæ倧éã«ã«ã¹ã¿ãã€ãºã§ããŸãã
ãããŠããã¹ãŠãããŸããã£ãŠããããã«èŠããŸããFirebox ã«èªããã¹ãããã«ããµãŒããŒãã¯ã©ã¹ã¿ã«æŸã蟌ãã§ããäœã®æ²ãã¿ãæããªããªãã§ãããã ããããç°å¢ä¿è·ãèããŠãããªãããã©ãããã°æ£®æãå®ããªããç«ãçããç¶ããããšãã§ããã ãããïŒããšèããã§ãããã èšãæããã°ãã€ã³ãã©ãæ¹åããã³ã¹ããåæžããæ¹æ³ãã©ã®ããã«èŠã€ããããšããããšã§ãã
1. ããŒã ãšã¢ããªã±ãŒã·ã§ã³ã®ãªãœãŒã¹ãç£èŠãã
æãäžè¬çã ãå¹æçãªæ¹æ³ã® XNUMX ã€ã¯ããªã¯ãšã¹ã/å¶éã®å°å ¥ã§ãã ã¢ããªã±ãŒã·ã§ã³ãåå空éããšã«åå²ããåå空éãéçºããŒã ããšã«åå²ããŸãã ãããã€ã¡ã³ãã®åã«ãããã»ããµæéãã¡ã¢ãªãããã³äžæã¹ãã¬ãŒãžã®æ¶è²»éã«ã€ããŠã¢ããªã±ãŒã·ã§ã³ã®å€ãèšå®ããŸãã
resources:
requests:
memory: 2Gi
cpu: 250m
limits:
memory: 4Gi
cpu: 500m
ç§ãã¡ã¯çµéšãéããŠããªã¯ãšã¹ããå¶éã® 5 å以äžã«èšããŸããã¹ãã§ã¯ãªããšããçµè«ã«éããŸããã ã¯ã©ã¹ã¿ãŒã®ããªã¥ãŒã ã¯ãªã¯ãšã¹ãã«åºã¥ããŠèšç®ãããã¢ããªã±ãŒã·ã§ã³ã«ãªãœãŒã¹ã®å·®ãããšãã° 10 ïœ XNUMX åäžããå ŽåãããŒãããããã§ãã£ã±ãã«ãªããçªç¶è² è·ãããã£ããšãã«ããŒãã«äœãèµ·ããããæ³åããŠãã ããã äœãè¯ãããšããªãã æå°ã§ã¯ã¹ããããªã³ã°ãæ倧ã§ã¯ã¯ãŒã«ãŒã«å¥ããåãããããã移åãéå§ããåŸã«æ®ãã®ããŒãã«åšæçãªè² è·ãããããŸãã
ããã«ããååã®ããšã limitranges
æåã«ãã³ã³ãããŒã®ãªãœãŒã¹å€ (æå°å€ãæ倧å€ãããã©ã«ã) ãèšå®ã§ããŸãã
â ~ kubectl describe limitranges --namespace ops
Name: limit-range
Namespace: ops
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu 50m 10 100m 100m 2
Container ephemeral-storage 12Mi 8Gi 128Mi 4Gi -
Container memory 64Mi 40Gi 128Mi 128Mi 2
XNUMX ã€ã®ããŒã ãã¯ã©ã¹ã¿ãŒã®ãã¹ãŠã®ãªãœãŒã¹ãåŒãç¶ãããšãã§ããªãããã«ãåå空éãªãœãŒã¹ãå¶éããããšãå¿ããªãã§ãã ããã
â ~ kubectl describe resourcequotas --namespace ops
Name: resource-quota
Namespace: ops
Resource Used Hard
-------- ---- ----
limits.cpu 77250m 80
limits.memory 124814367488 150Gi
pods 31 45
requests.cpu 53850m 80
requests.memory 75613234944 150Gi
services 26 50
services.loadbalancers 0 0
services.nodeports 0 0
説æããããããããã« resourcequotas
éçšããŒã ãããã« 10 CPU ãæ¶è²»ãããããããããã€ãããå Žåãã¹ã±ãžã¥ãŒã©ã¯ãããèš±å¯ããããšã©ãŒãã¹ããŒããŸãã
Error creating: pods "nginx-proxy-9967d8d78-nh4fs" is forbidden: exceeded quota: resource-quota, requested: limits.cpu=5,requests.cpu=5, used: limits.cpu=77250m,requests.cpu=53850m, limited: limits.cpu=10,requests.cpu=10
ãã®ãããªåé¡ã解決ããã«ã¯ãããšãã°æ¬¡ã®ãããªããŒã«ãäœæã§ããŸãã
2. æé©ãªãã¡ã€ã«ã¹ãã¬ãŒãžãéžæãã
ããã§ã¯ãæ°žç¶ããªã¥ãŒã ãš Kubernetes ã¯ãŒã«ãŒ ããŒãã®ãã£ã¹ã¯ ãµãã·ã¹ãã ã®ãããã¯ã«ã€ããŠè§ŠããããšæããŸãã æ¬çªç°å¢ã§ HDD äžã®ãCubeãã䜿çšãã人ãããªãããšãé¡ããŸãããå Žåã«ãã£ãŠã¯ãéåžžã® SSD ã§ã¯ååã§ã¯ãªãããšããããŸãã I/O æäœã«ãããã°ããã£ã¹ã¯ãç Žå£ãããšããåé¡ãçºçããŸãããã解決çã¯ããŸããããŸããã
-
é«æ§èœ SSD ã䜿çšããããNVMe ã«åãæ¿ããŸã (ããŒããŠã§ã¢ãç¬èªã«ç®¡çããŠããå Žå)ã
-
ãã°ã¬ãã«ãäžããŸãã
-
ãã£ã¹ã¯ã匷姊ãããããã®ãã¹ããŒããªããã©ã³ã·ã³ã°ãå®è¡ããŸã (
podAntiAffinity
).
äžã®ç»é¢ã¯ãaccess_logs ãã°ãæå¹ã«ãªã£ãŠããå Žå (~12 ãã°/ç§)ãnginx-ingress-controller ã§ãã£ã¹ã¯ã«å¯ŸããŠäœãèµ·ãããã瀺ããŠããŸãã ãã¡ããããã®ç¶æ ãçºçãããšããã®ããŒãäžã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®æ©èœãäœäžããå¯èœæ§ããããŸãã
PV ã«é¢ããŠã¯ãæ®å¿µãªãããã¹ãŠãè©Šããããã§ã¯ãããŸãã
3. æé©åãããç»åãåéãã
Kubernetes ãã€ã¡ãŒãžãããéããã§ããããããå¹ççã«å®è¡ã§ããããã«ãã³ã³ãããŒã«æé©åãããã€ã¡ãŒãžã䜿çšããããšãæåã§ãã
æé©åãšã¯ãç»åã次ã®ããšãæå³ããŸãã
-
ã¢ããªã±ãŒã·ã§ã³ã XNUMX ã€ã ãå«ãããæ©èœã XNUMX ã€ã ãå®è¡ããŸãã
-
ãµã€ãºã倧ãããšããããã¯ãŒã¯äžã§ã®éä¿¡ãå°é£ã«ãªãããããµã€ãºãå°ãããªããŸãã
-
ããŠã³ã¿ã€ã ãçºçããå Žåã« Kubernetes ãã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ãããã«ã¹ããã³ã¬ãã£ãã¹ ãšã³ããã€ã³ããåããŠããŸãã
-
æ§æãšã©ãŒã«å¯Ÿããèæ§ãé«ããã³ã³ããã«é©ãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã (Alpine ã CoreOS ãªã©) ã䜿çšããŸãã
-
ãã«ãã¹ããŒãž ãã«ãã䜿çšãããšãã³ã³ãã€ã«ãããã¢ããªã±ãŒã·ã§ã³ã®ã¿ããããã€ã§ããä»éãããœãŒã¹ã¯ãããã€ã§ããªããªããŸãã
ç»åããã®å Žã§ç¢ºèªããŠæé©åã§ããããŒã«ããµãŒãã¹ãæ°å€ããããŸãã åžžã«ææ°ã®ç¶æ ã«ä¿ã¡ãå®å šæ§ããã¹ãããããšãéèŠã§ãã ãã®çµæã次ã®ãã®ãåŸãããŸãã
-
ã¯ã©ã¹ã¿ãŒå šäœã®ãããã¯ãŒã¯è² è·ã軜æžãããŸãã
-
ã³ã³ããã®èµ·åæéãççž®ããŸãã
-
Docker ã¬ãžã¹ããªå šäœã®ãµã€ãºãå°ãããªããŸãã
4.DNSãã£ãã·ã¥ã䜿çšãã
é«è² è·ã«ã€ããŠèšãã°ãã¯ã©ã¹ã¿ãŒã® DNS ã·ã¹ãã ã調æŽããªããšãéåžžã«ã²ã©ãç¶æ
ã«ãªããŸãã ãã€ãŠãKubernetes éçºè
㯠kube-dns ãœãªã¥ãŒã·ã§ã³ããµããŒãããŠããŸããã ããã§ãå®è£
ããŸãããããã®ãœãããŠã§ã¢ã¯ç°¡åãªäœæ¥ã®ããã«èŠããŸããããç¹ã«ãã¥ãŒãã³ã°ãããŠããããå¿
èŠãªããã©ãŒãã³ã¹ãåŸãããŸããã§ããã ãã®åŸ coredns ãç»å Žããç§ãã¡ã¯ããã«åãæ¿ããŸããããç¹ã«åé¡ã¯ãªããåŸã« K8s ã®ããã©ã«ãã® DNS ãµãŒãã¹ã«ãªããŸããã ããæç¹ã§ãDNS ã·ã¹ãã ãžã® RPS ã 40 ã«éãããã®ãœãªã¥ãŒã·ã§ã³ã§ãäžååã«ãªããŸããã ãããã幞éãªããšã«ãNodelocaldns (å¥åããŒã ããŒã«ã« ãã£ãã·ã¥) ãç»å ŽããŸããã
ãªãããã䜿çšããã®ã§ãããã? Linux ã«ãŒãã«ã«ã¯ãã°ããããUDP çµç±ã§ conntrack NAT ãä»ããŠè€æ°ã®åŒã³åºããè¡ããšãconntrack ããŒãã«ã®ãšã³ããªã®ç«¶åç¶æ ãçºçããNAT ãä»ãããã©ãã£ãã¯ã®äžéšã倱ãããŸã (ãµãŒãã¹ãä»ããåããªãã㯠NAT)ã Nodelocaldns ã¯ãNAT ãåãé€ããTCP ãžã®æ¥ç¶ãäžæµ DNS ã«ã¢ããã°ã¬ãŒãããäžæµ DNS ã¯ãšãªãããŒã«ã«ã«ãã£ãã·ã¥ãã (5 ç§éã®çããã¬ãã£ã ãã£ãã·ã¥ãå«ã) ããšã§ãã®åé¡ã解決ããŸãã
5. ããããæ°Žå¹³æ¹åãšåçŽæ¹åã«èªåçã«ã¹ã±ãŒã«ãã
ãã¹ãŠã®ãã€ã¯ããµãŒãã¹ãè² è·ã® XNUMX ïœ XNUMX åã®å¢å ã«å¯Ÿå¿ã§ããæºåãã§ããŠãããšèªä¿¡ãæã£ãŠèšããŸãã? ã¢ããªã±ãŒã·ã§ã³ã«ãªãœãŒã¹ãé©åã«å²ãåœãŠãã«ã¯ã©ãããã°ããã§ãããã? ã¯ãŒã¯ããŒããè¶
ããŠããã€ãã®ããããå®è¡ãç¶ããã®ã¯åé·ãããããŸããããããããé£ç¶ããŠå®è¡ãããšããµãŒãã¹ãžã®ãã©ãã£ãã¯ã®çªç¶ã®å¢å ã«ããããŠã³ã¿ã€ã ã®ãªã¹ã¯ãçããŸãã ãªã©ã®ãµãŒãã¹
VPA å®éã®äœ¿çšç¶æ³ã«å¿ããŠããããå ã®ã³ã³ãããŒã®ãªã¯ãšã¹ã/å¶éãèªåçã«åŒãäžããããšãã§ããŸãã ã©ã®ããã«åœ¹ã«ç«ã¡ãŸãã? äœããã®çç± (å®å šã«ä¿¡é Œã§ããããã§ã¯ãããŸãã) ã§æ°Žå¹³æ¹åã«ã¹ã±ãŒãªã³ã°ã§ããªãããããããå Žåã¯ããã®ãªãœãŒã¹ãžã®å€æŽã VPA ã«å§èšããŠã¿ãããšãã§ããŸãã ãã®æ©èœã¯ãã¡ããªã㯠ãµãŒããŒããã®å±¥æŽããŒã¿ãšçŸåšã®ããŒã¿ã«åºã¥ãæšå¥šã·ã¹ãã ã§ããããããªã¯ãšã¹ã/å¶éãèªåçã«å€æŽããããªãå Žåã¯ãã³ã³ãããŒã®æšå¥šãªãœãŒã¹ãç£èŠããèšå®ãæé©åããã ã㧠CPU ãšè² è·ãç¯çŽã§ããŸããã¯ã©ã¹ã¿å ã®ã¡ã¢ãªã
ç»å㯠https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizoâântal-pod-autoscaler-and-vertical-pod-2a441d9ad231 ããååŸ
Kubernetes ã®ã¹ã±ãžã¥ãŒã©ã¯åžžã«ãªã¯ãšã¹ãã«åºã¥ããŠããŸãã ããã«ã©ã®ãããªå€ãå ¥åããŠããã¹ã±ãžã¥ãŒã©ã¯ããã«åºã¥ããŠé©åãªããŒããæ€çŽ¢ããŸãã å¶éå€ã¯ããã¥ãŒãã¬ããããã€ããããã¹ãããã«ãŸãã¯åŒ·å¶çµäºããããç解ããããã«å¿ èŠã§ãã å¯äžã®éèŠãªãã©ã¡ãŒã¿ã¯ãªã¯ãšã¹ãå€ã§ãããããVPA ã¯ãããåŠçããŸãã ã¢ããªã±ãŒã·ã§ã³ãåçŽæ¹åã«ã¹ã±ãŒãªã³ã°ãããšãã¯åžžã«ããªã¯ãšã¹ããã©ãããã¹ãããå®çŸ©ããŸãã ãã®å Žåãéçã¯ã©ããªãã§ããããïŒ ãã®ãã©ã¡ãŒã¿ãæ¯äŸããŠã¹ã±ãŒã«ãããŸãã
ããšãã°ãéåžžã®ãããèšå®ã¯æ¬¡ã®ãšããã§ãã
resources:
requests:
memory: 250Mi
cpu: 200m
limits:
memory: 500Mi
cpu: 350m
ã¬ã³ã¡ã³ããŒã·ã§ã³ ãšã³ãžã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãé©åã«å®è¡ããã«ã¯ 300m CPU ãš 500Mi ãå¿ èŠã§ãããšå€æããŸãã 次ã®èšå®ã衚瀺ãããŸãã
resources:
requests:
memory: 500Mi
cpu: 300m
limits:
memory: 1000Mi
cpu: 525m
äžã§è¿°ã¹ãããã«ãããã¯ãããã§ã¹ãå ã®ãªã¯ãšã¹ã/å¶éã®æ¯çã«åºã¥ããæ¯äŸã¹ã±ãŒãªã³ã°ã§ãã
-
CPU: 200m â 300m: æ¯ç 1:1.75;
-
ã¡ã¢ãª: 250Mi â 500Mi: æ¯ç 1:2ã
é¢ããŠã¯ HPAã§ããã°ãåäœã¡ã«ããºã ã¯ããéæã«ãªããŸãã CPU ãã¡ã¢ãªãªã©ã®ã¡ããªã¯ã¹ã«ã¯ãããå€ãèšå®ããããã¹ãŠã®ã¬ããªã«ã®å¹³åããããå€ãè¶ ãããšãå€ããããå€ãäžåããã¬ããªã«ã®æ倧æ°ã«éãããŸã§ãã¢ããªã±ãŒã·ã§ã³ã¯ +1 ãµãåäœã§ã¹ã±ãŒãªã³ã°ãããŸãã
ç»å㯠https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizoâântal-pod-autoscaler-and-vertical-pod-2a441d9ad231 ããååŸ
CPU ãã¡ã¢ãªãªã©ã®éåžžã®ã¡ããªã¯ã¹ã«å ããŠãPrometheus ããã«ã¹ã¿ã ã¡ããªã¯ã¹ã«ãããå€ãèšå®ãããããã¢ããªã±ãŒã·ã§ã³ããã€ã¹ã±ãŒã«ããããæãæ£ç¢ºã«ç€ºããã®ã§ãããšæãããå Žåã¯ããããã®ã¡ããªã¯ã¹ã䜿çšã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãæå®ãããã¡ããªãã¯ãããå€ãäžåã£ãŠå®å®ãããšãHPA ã¯ã¬ããªã«ã®æå°æ°ãŸã§ããŸãã¯è² è·ãæå®ããããããå€ãæºãããŸã§ãããã®ã¹ã±ãŒã«ããŠã³ãéå§ããŸãã
6. ããŒã ã¢ãã£ããã£ãšããã ã¢ãã£ããã£ãå¿ããªãã§ãã ãã
ãã¹ãŠã®ããŒããåãããŒããŠã§ã¢äžã§å®è¡ãããããã§ã¯ãªãããã¹ãŠã®ããããã³ã³ãã¥ãŒãã£ã³ã°éçŽåã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿ èŠãããããã§ã¯ãããŸããã Kubernetes ã§ã¯ã次ã䜿çšããŠããŒããšãããã®ç¹æ®åãèšå®ã§ããŸãã ããŒãã¢ãã£ãã㣠О ãããã¢ãã£ããã£.
èšç®è² è·ã®é«ãæäœã«é©ããããŒããããå Žåãå¹çãæ倧åããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã察å¿ããããŒãã«çµã³ä»ããããšããå§ãããŸãã ãããè¡ãã«ã¯ã次ã䜿çšããŸã nodeSelector
ããŒãã©ãã«ä»ãã
XNUMX ã€ã®ããŒãããããšããŸãã CPUType=HIGHFREQ
ãããŠãå€æ°ã®é«éã³ã¢ããã XNUMX ã€ã¯ MemoryType=HIGHMEMORY
ããå€ãã®ã¡ã¢ãªãšããé«éãªããã©ãŒãã³ã¹ã æãç°¡åãªæ¹æ³ã¯ããããã€ã¡ã³ããããŒãã«å²ãåœãŠãããšã§ã HIGHFREQ
ã»ã¯ã·ã§ã³ã«è¿œå ããããšã§ spec
ãã®ãããªã»ã¬ã¯ã¿ãŒ:
âŠ
nodeSelector:
CPUType: HIGHFREQ
ãããè¡ãããã®ããé«äŸ¡ã§å
·äœçãªæ¹æ³ã¯ã nodeAffinity
ãã£ãŒã«ã㧠affinity
ã»ã¯ã·ã§ã³ spec
ã 次㮠XNUMX ã€ã®ãªãã·ã§ã³ããããŸãã
-
requiredDuringSchedulingIgnoredDuringExecution
: ããŒãèšå® (ã¹ã±ãžã¥ãŒã©ã¯ç¹å®ã®ããŒãã«ã®ã¿ãããããããã€ããŸã (ä»ã®å Žæã«ã¯ãããã€ããŸãã))ã -
preferredDuringSchedulingIgnoredDuringExecution
: ãœããèšå® (ã¹ã±ãžã¥ãŒã©ã¯ç¹å®ã®ããŒããžã®ãããã€ãè©Šè¡ããããã倱æããå Žåã¯ã次ã«äœ¿çšå¯èœãªããŒããžã®ãããã€ãè©Šè¡ããŸã)ã
ããŒã ã©ãã«ã管çããããã®ç¹å®ã®æ§æãæå®ã§ããŸãã In
, NotIn
, Exists
, DoesNotExist
, Gt
ãŸã㯠Lt
ã ãã ããã©ãã«ã®é·ããªã¹ãã«è€éãªã¡ãœããã䜿çšãããšãéèŠãªç¶æ³ã§ã®ææ決å®ãé
ããªãããšã«æ³šæããŠãã ããã èšãæããã°ãã·ã³ãã«ã«ããŠãã ããã
åè¿°ããããã«ãKubernetes ã§ã¯çŸåšã®ãããã®ã¢ãã£ããã£ãèšå®ã§ããŸãã ã€ãŸããç¹å®ã®ããããåãã¢ãã€ã©ããªãã£ãŒãŸãŒã³ (ã¯ã©ãŠãã«é¢é£) ãŸãã¯ããŒãå ã®ä»ã®ããããšé£æºããŠåäœããããšã確èªã§ããŸãã
Ð podAffinity
äœçœ affinity
ã»ã¯ã·ã§ã³ spec
ã®å Žåãšåããã£ãŒã«ããå©çšå¯èœã§ã nodeAffinity
: requiredDuringSchedulingIgnoredDuringExecution
О preferredDuringSchedulingIgnoredDuringExecution
ã å¯äžã®éãã¯ã matchExpressions
ãã®ã©ãã«ãæã€ãããããã§ã«å®è¡ããŠããããŒãã«ãããããã€ã³ãããŸãã
Kubernetes ã¯ãã£ãŒã«ããæäŸããŸã podAntiAffinity
éã«ãããããç¹å®ã®ããããæã€ããŒãã«ãã€ã³ãããŸããã
è¡šçŸã«ã€ã㊠nodeAffinity
åãã¢ããã€ã¹ãäžããããšãã§ããŸããã«ãŒã«ãã·ã³ãã«ãã€è«ççã«ä¿ã€ããåªããè€éãªã«ãŒã«ã®ã»ããã§ãããä»æ§ãéè² è·ã«ããªãã§ãã ããã ã¯ã©ã¹ã¿ãŒã®æ¡ä»¶ãšäžèŽããªãã«ãŒã«ãäœæããããšã¯éåžžã«ç°¡åã§ãã¹ã±ãžã¥ãŒã©ãŒã«äžèŠãªè² è·ãããããå
šäœçãªããã©ãŒãã³ã¹ãäœäžããŸãã
7. æ±æãšèæ§
ã¹ã±ãžã¥ãŒã©ã管çããå¥ã®æ¹æ³ããããŸãã æ°çŸã®ããŒããšæ°åã®ãã€ã¯ããµãŒãã¹ãå«ã倧èŠæš¡ãªã¯ã©ã¹ã¿ãŒãããå Žåãç¹å®ã®ããããç¹å®ã®ããŒãã§ãã¹ããããããšãèš±å¯ããªãããšã¯éåžžã«å°é£ã§ãã
ããã«ã¯ãæ±æã®ã¡ã«ããºã (çŠæ¢ã«ãŒã«) ã圹ç«ã¡ãŸãã ããšãã°ãç¹å®ã®ã·ããªãªã§ã¯ãç¹å®ã®ããŒããããããå®è¡ããããšãçŠæ¢ã§ããŸãã ç¹å®ã®ããŒãã«ãã€ã³ããé©çšããã«ã¯ããªãã·ã§ã³ã䜿çšããå¿
èŠããããŸã taint
kubectlã§ã ããŒãšå€ãæå®ããŠã次ã®ããã«æ±æããŸã NoSchedule
ãŸã㯠NoExecute
:
$ kubectl taint nodes node10 node-role.kubernetes.io/ingress=true:NoSchedule
æ±æã¡ã«ããºã ã XNUMX ã€ã®äž»ãªå¹æããµããŒãããŠããããšã«ã泚ç®ããŠãã ããã NoSchedule
, NoExecute
О PreferNoSchedule
.
-
NoSchedule
ããã¯ãçŸæç¹ã§ã¯ãããä»æ§ã«å¯Ÿå¿ãããšã³ããªãååšããªãããšãæå³ããŸããtolerations
ãããŒãã«ãããã€ããããšã¯ã§ããŸãã (ãã®äŸã§ã¯node10
). -
PreferNoSchedule
- ç°¡æçNoSchedule
ã ãã®å Žåãã¹ã±ãžã¥ãŒã©ã¯ãäžèŽãããšã³ããªããªãããããå²ãåœãŠãªãããè©Šã¿ãŸããtolerations
ãã ããããã¯å³å¯ãªå¶éã§ã¯ãããŸããã ã¯ã©ã¹ã¿ãŒå ã«ãªãœãŒã¹ããªãå Žåããããã¯ãã®ããŒãäžã§ãããã€ãéå§ããŸãã -
NoExecute
- ãã®å¹æã¯ã察å¿ãããšã³ããªãæããªããããã®å³æéé¿ãããªã¬ãŒããŸããtolerations
.
èå³æ·±ãããšã«ããã®åäœã¯èš±å®¹ã¡ã«ããºã ã䜿çšããŠãã£ã³ã»ã«ã§ããŸãã ããã¯ããçŠæ¢ããããããŒãããããããã«ã€ã³ãã©ã¹ãã©ã¯ã㣠ãµãŒãã¹ãé 眮ããã ãã§ããå Žåã«äŸ¿å©ã§ãã ã©ããã£ãŠããã®ïŒ é©åãªèš±å®¹ç¯å²ããããããã®ã¿ãèš±å¯ããŸãã
ãããã®ä»æ§ã¯æ¬¡ã®ããã«ãªããŸãã
spec:
tolerations:
- key: "node-role.kubernetes.io/ingress"
operator: "Equal"
value: "true"
effect: "NoSchedule"
ããã¯ã次ã®åãããã€ããã®ç¹å®ã®ããŒãã«é©çšãããããšãæå³ãããã®ã§ã¯ãããŸãããããã¯ããŒã ã¢ãã£ãã㣠ã¡ã«ããºã ã§ã¯ãªãã nodeSelector
ã ãã ããããã€ãã®æ©èœãçµã¿åãããããšã§ãéåžžã«æè»ãªã¹ã±ãžã¥ãŒã©èšå®ãå®çŸã§ããŸãã
8. ãããã®ãããã€åªå 床ã®èšå®
ããããããŒãã«å²ãåœãŠãŠãããããšãã£ãŠããã¹ãŠã®ããããåãåªå 床ã§æ±ãå¿ èŠããããšããããã§ã¯ãããŸããã ããšãã°ãäžéšã®ããããä»ã®ãããããå ã«ãããã€ããããšãã§ããŸãã
Kubernetes ã¯ããããã®åªå
é äœãšããªãšã³ãã·ã§ã³ãæ§æããããŸããŸãªæ¹æ³ãæäŸããŸãã èšå®ã¯ããã€ãã®éšåã§æ§æãããŸã: ãªããžã§ã¯ã PriorityClass
ããã³ãã£ãŒã«ãã®èª¬æ priorityClassName
ãããã®ä»æ§ã§ã äŸãèŠãŠã¿ãŸããã:
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 99999
globalDefault: false
description: "This priority class should be used for very important pods only"
äœæããŸã PriorityClass
ãååã説æãå€ãå
¥åããŸãã ããé«ã value
ãåªå
床ãé«ããªããŸãã å€ã¯ã32 以äžã®ä»»æã® 1 ãããæŽæ°ã«ããããšãã§ããŸããããããé«ãå€ã¯ãéåžžããªãšã³ããã§ããªãããã·ã§ã³ã¯ãªãã£ã«ã«ãªã·ã¹ãã ãããçšã«äºçŽãããŠããŸãã 眮ãæãã¯ãåªå
床ã®é«ããããã«åããå€ããå Žæããªãå Žåã«ã®ã¿çºçãããã®å Žåãç¹å®ã®ããŒãã®ãããã®äžéšãéé¿ãããŸãã ãã®ã¡ã«ããºã ã硬ãããå Žåã¯ããªãã·ã§ã³ãè¿œå ã§ããŸãã preemptionPolicy: Never
ãã®å Žåãããªãšã³ãã·ã§ã³ã¯è¡ãããããããã¯ãã¥ãŒã®å
é ã«ç«ã£ãŠãã¹ã±ãžã¥ãŒã©ã空ããªãœãŒã¹ãèŠã€ããã®ãåŸ
ã¡ãŸãã
次ã«ãååãæå®ããããããäœæããŸãã priorityClassName
:
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
priorityClassName: high-priority
åªå é äœã¯ã©ã¹ã¯å¥œããªã ãäœæã§ããŸãããããã«å€¢äžã«ãªããªãããšããå§ãããŸã (ããšãã°ãåªå é äœãäœãäžãé«ã«å¶éãããªã©)ã
ãããã£ãŠãå¿ èŠã«å¿ããŠãnginx-ingress-controllerãcoredns ãªã©ã®éèŠãªãµãŒãã¹ã®ãããã€å¹çãé«ããããšãã§ããŸãã
9. ETCD ã¯ã©ã¹ã¿ãŒã®æé©å
ETCD ã¯ã¯ã©ã¹ã¿ãŒå šäœã®é è³ãšãèšããŸãã Cube ã®æäœé床ã¯ããŒã¿ããŒã¹ã«äŸåããããããã®ããŒã¿ããŒã¹ã®æäœãé«ãã¬ãã«ã§ç¶æããããšãéåžžã«éèŠã§ãã ããªãæšæºçã§ãããåæã«åªãã解決çã¯ãkube-apiserver ãžã®é 延ãæå°éã«æããããã«ãã¹ã¿ãŒ ããŒãäžã« ETCD ã¯ã©ã¹ã¿ãŒãç¶æããããšã§ãã ãããã§ããªãå Žåã¯ãåå è éã®åž¯åå¹ ãååã«ç¢ºä¿ããŠãETCD ãã§ããã ãè¿ãã«é 眮ããŸãã ãŸããã¯ã©ã¹ã¿ãŒã«å®³ãåãŒããã« ETCD ããã©ãã ãã®ããŒããè±èœã§ãããã«ã泚æããŠãã ããã
ã¯ã©ã¹ã¿ãŒå ã®ã¡ã³ããŒæ°ãé床ã«å¢ãããšãããã©ãŒãã³ã¹ãç ç²ã«ãªã£ãŠãã©ãŒã«ã ãã¬ã©ã³ã¹ãåäžããå¯èœæ§ãããããšã«æ³šæããŠãã ããããã¹ãŠã¯é©åºŠã«è¡ãå¿ èŠããããŸãã
ãµãŒãã¹ã®ã»ããã¢ããã«ã€ããŠè©±ãå Žåãããã€ãã®æšå¥šäºé ããããŸãã
-
ã¯ã©ã¹ã¿ãŒã®ãµã€ãºã«åºã¥ããŠãé©åãªããŒããŠã§ã¢ãçšæããŸã (次ã®æ å ±ãåç §ããŠãã ãã)ã
ãã㧠). -
DC ã®ãã¢éãŸãã¯ãããã¯ãŒã¯ãšãã£ã¹ã¯ã®éã«ã¯ã©ã¹ã¿ãŒãåæ£ãããŠããå Žåã¯ãããã€ãã®ãã©ã¡ãŒã¿ãŒã埮調æŽããŸãããŸã æ¹åã®äœå°ã¯ãããŸã (以äžãåç §ããŠãã ãã)ã
ãã㧠).
ãŸãšã
ãã®èšäºã§ã¯ãç§ãã¡ã®ããŒã ãéµå®ããããšããŠãããã€ã³ãã«ã€ããŠèª¬æããŸãã ããã¯ã¢ã¯ã·ã§ã³ã段éçã«èª¬æãããã®ã§ã¯ãªããã¯ã©ã¹ã¿ãŒã®ãªãŒããŒããããæé©åããããã«åœ¹ç«ã€å¯èœæ§ã®ãããªãã·ã§ã³ã§ãã åã¯ã©ã¹ã¿ãŒãç¬èªã®æ¹æ³ã§ãŠããŒã¯ã§ããããšã¯æããã§ãããæ§æãœãªã¥ãŒã·ã§ã³ã¯å€§ããç°ãªãå¯èœæ§ããããããKubernetes ã¯ã©ã¹ã¿ãŒãã©ã®ããã«ç£èŠãããã®ããã©ãŒãã³ã¹ãã©ã®ããã«æ¹åãããã«ã€ããŠãã£ãŒãããã¯ãåŸãã®ã¯èå³æ·±ãããšã§ãã ã³ã¡ã³ãã§ããªãã®çµéšãå ±æããŠãã ããããããç¥ãããšã¯èå³æ·±ãã§ãããã
åºæïŒ habr.com