å€ãã®äººã ã¯ãã¢ããªã±ãŒã·ã§ã³ãKubernetesã«ç§»æ€ããã ãã§ïŒHelmã䜿çšãããæåã§ïŒååã§ããã幞çŠããããšèããŠããŸããããããããã¯ããã»ã©åçŽã§ã¯ãããŸãããMail.ru Cloud Solutions
ããŒã ã¯ãDevOpsãšã³ãžãã¢ã®JulianGuindiã«ããèšäºã翻蚳ããŸããã圌ã¯ãããªããåãã¬ãŒããèžãŸãªãããã«ã移è¡ããã»ã¹ã§åœŒã®äŒç€ŸãçŽé¢ããèœãšãç©Žã«ã€ããŠè©±ããŸãã
ã¹ããã1ïŒããããªã¯ãšã¹ããšå¶éãèšå®ãã
ããããå®è¡ãããã¯ãªãŒã³ãªç°å¢ãèšå®ããããšããå§ããŸãããã Kubernetesã¯ããããã®ã¹ã±ãžã¥ãŒã«èšå®ãšé害ç¶æ ã®åŠçã«åªããŠããŸããããããæ£åžžã«æ©èœããããã«å¿ èŠãªãªãœãŒã¹ã®éãèŠç©ããã®ãé£ããå Žåããã©ã³ããŒãããããé 眮ã§ããªãããšããããŸããããã§ããªãœãŒã¹ã®èŠæ±ãšå¶éãçºçããŸãããªã¯ãšã¹ããšå¶éãèšå®ããããã®æè¯ã®ã¢ãããŒãã«ã€ããŠã¯å€ãã®è«äºããããŸããæã ãããã¯æ¬åœã«ç§åŠãããèžè¡ã§ããããã«æãããŸãããããç§ãã¡ã®ã¢ãããŒãã§ãã
ããããªã¯ãšã¹ãã¯ãæé©ãªãããé 眮ã®ããã«ã¹ã±ãžã¥ãŒã©ãŒã䜿çšããäž»èŠãªå€ã§ãã
Kubernetes: , . , PodFitsResources , .
ã¢ããªã±ãŒã·ã§ã³ãªã¯ãšã¹ãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ãå®éã«é©åã«æ©èœããããã«å¿ èŠãªãªãœãŒã¹ã®æ°ãèŠç©ããããšãã§ããŸããããã«ããããã©ã³ããŒã¯ããŒããçŸå®çã«é 眮ã§ããŸããåœåã¯ããããããšã«ååãªãªãœãŒã¹ãããããšã確èªããããã«äœè£ãæã£ãŠãªã¯ãšã¹ããèšå®ãããã£ãã®ã§ãããã¹ã±ãžã¥ãŒã«æéãå€§å¹ ã«é·ããªããäžéšã®ãããã¯ããªãœãŒã¹ãªã¯ãšã¹ãããªããã®ããã«å®å šã«ã¹ã±ãžã¥ãŒã«ãããªãã£ãããšãããããŸããã
ãã®å Žåãã¹ã±ãžã¥ãŒã©ãŒã¯ãããããã¹ã¯ã€ãŒãºãããã¹ã±ãžã¥ãŒã«ã¢ã«ãŽãªãºã ã®éèŠãªã³ã³ããŒãã³ãã§ããã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªãªãœãŒã¹ã®éãå¶åŸ¡ãã¬ãŒã³ã«ããããªããããããããåã¹ã±ãžã¥ãŒã«ã§ããŸããã
ãããã®å¶éãããã®ããæ確ãªå¶éã§ããããã¯ãã¯ã©ã¹ã¿ãŒãã³ã³ãããŒã«å²ãåœãŠããªãœãŒã¹ã®æ倧éãè¡šããŸãã
ç¹°ãè¿ãã«ãªããŸãããå ¬åŒããã¥ã¡ã³ãããïŒã³ã³ããã«4 GiBã®ã¡ã¢ãªå¶éãèšå®ãããŠããå ŽåãkubeletïŒããã³ã³ã³ããã©ã³ã¿ã€ã ïŒã¯ããã匷å¶ããŸããã©ã³ã¿ã€ã ã¯ãã³ã³ãããæå®ããããªãœãŒã¹å¶éãè¶ ããŠäœ¿çšããããšãé²ããŸããããšãã°ãã³ã³ããå ã®ããã»ã¹ãèš±å¯ãããéãè¶ ããã¡ã¢ãªã䜿çšããããšãããšãã«ãŒãã«ã¯ãã¡ã¢ãªäžè¶³ãïŒOOMïŒãšã©ãŒã§ããã»ã¹ãçµäºããŸãã
ã³ã³ããã¯ããªãœãŒã¹èŠæ±ã§æå®ããããããå€ãã®ãªãœãŒã¹ãåžžã«äœ¿çšã§ããŸãããå¶éã§æå®ããã以äžã䜿çšããããšã¯ã§ããŸããããã®å€ãæ£ããèšå®ããããšã¯å°é£ã§ãããéåžžã«éèŠã§ãã
çæ³çã«ã¯ããããã®ãªãœãŒã¹èŠä»¶ããã·ã¹ãã å ã®ä»ã®ããã»ã¹ã«å¹²æžããããšãªããããã»ã¹ã®ã©ã€ããµã€ã¯ã«å šäœã§å€æŽããå¿ èŠããããŸãããããå¶éãèšå®ããç®çã§ãã
æ®å¿µãªãããã©ã®å€ãèšå®ãããã«ã€ããŠå ·äœçãªæ瀺ãäžããããšã¯ã§ããŸããããç§ãã¡ã¯æ¬¡ã®ã«ãŒã«ãé å®ããŠããŸãïŒ
- è² è·ãã¹ãããŒã«ã䜿çšããŠãããŒã¹ã©ã€ã³ãã©ãã£ãã¯ãã·ãã¥ã¬ãŒãããããããªãœãŒã¹ã®äœ¿çšç¶æ³ïŒã¡ã¢ãªãšããã»ããµïŒãç£èŠããŸãã
- ( 5 ) . , , Go.
ãããã«ã¯ååãªãªãœãŒã¹ãå©çšå¯èœãªã¿ãŒã²ããããŒããå¿ èŠãªããããªãœãŒã¹ã®å¶çŽãé«ããªããšã¹ã±ãžã¥ãŒãªã³ã°ãé£ãããªãããšã«æ³šæããŠãã ããã
4GBã®ã¡ã¢ãªã®ãããªéåžžã«é«ããªãœãŒã¹å¶çŽã®ãã軜éã®WebãµãŒããŒãããç¶æ³ãæ³åããŠã¿ãŠãã ããããã®ããã»ã¹ã¯æ°Žå¹³æ¹åã«ã¹ã±ãŒãªã³ã°ããå¿ èŠããããæ°ããåã¢ãžã¥ãŒã«ã¯ãå°ãªããšã4GBã®äœ¿çšå¯èœãªã¡ã¢ãªãããããŒãã§ã¹ã±ãžã¥ãŒã«ããå¿ èŠããããŸãããã®ãããªããŒããååšããªãå Žåãã¯ã©ã¹ã¿ãŒã¯ãã®ããããåŠçããããã«æ°ããããŒããå°å ¥ããå¿ èŠããããŸããããã«ã¯æéããããå ŽåããããŸããé«éã§ã¹ã ãŒãºãªã¹ã±ãŒãªã³ã°ã確ä¿ããã«ã¯ããªãœãŒã¹èŠæ±ãšå¶éã®éã®ããŒãžã³ãã§ããã ãå°ããããããšãéèŠã§ãã
ã¹ããã2ïŒæŽ»æ§ãã¹ããšæºåãã¹ããèšå®ããŸã
ããã¯ãKubernetesã³ãã¥ããã£ã§é »ç¹ã«è°è«ããããã1ã€ã®åŸ®åŠãªãããã¯ã§ãã掻æ§ãã¹ããšæºåãã¹ãã¯ããœãããŠã§ã¢ãã¹ã ãŒãºã«å®è¡ãããããŠã³ã¿ã€ã ãæå°éã«æããããã®ã¡ã«ããºã ãæäŸãããããååã«ç解ããããšãéèŠã§ãããã ããæ£ããæ§æãããŠããªããšãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«æ·±å»ãªåœ±é¿ãäžããå¯èœæ§ããããŸãã以äžã¯ãäž¡æ¹ã®ãµã³ãã«ã®æŠèŠã§ãã
掻æ°ã¯ãã³ã³ãããå®è¡ãããŠãããã©ããã瀺ããŸãã倱æããå Žåãkubeletã¯ã³ã³ããã匷å¶çµäºããåèµ·åããªã·ãŒãæå¹ã«ãªããŸããã³ã³ããã«LivenessãããŒããè£ åãããŠããªãå ŽåãKubernetesã®ããã¥ã¡ã³ãã«èšèŒãããŠããããã«ãããã©ã«ãã®ç¶æ ã¯æåã§ãã
掻æ§ãããŒãã¯ãé »ç¹ã«å®è¡ãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããããšãKubernetesã«éç¥ããå¿ èŠããããããå®äŸ¡ã§ããå¿ èŠããããŸããã€ãŸããå€ãã®ãªãœãŒã¹ãæ¶è²»ããªãå¿ èŠããããŸãã
æ¯ç§å®è¡ããããã«èšå®ãããšãæ¯ç§1ã€ã®ãªã¯ãšã¹ããè¿œå ãããããããã®ãã©ãã£ãã¯ãåŠçããã«ã¯è¿œå ã®ãªãœãŒã¹ãå¿ èŠã«ãªãããšã«æ³šæããŠãã ããã
åœç€Ÿã§ã¯ãããŒã¿ïŒãªã¢ãŒãããŒã¿ããŒã¹ããã£ãã·ã¥ãªã©ïŒãå®å šã«å©çšã§ããªãå Žåã§ããLivenessãã¹ãã§ã¢ããªã±ãŒã·ã§ã³ã®äž»èŠã³ã³ããŒãã³ããæ€èšŒããŸãã
å¿çã³ãŒã200ãè¿ãã ãã®ããã«ã¹ããšã³ããã€ã³ããã¢ããªã±ãŒã·ã§ã³ã«æ§æããŸãããããã¯ãããã»ã¹ã皌åäžã§ãããèŠæ±ãåŠçã§ããããšã瀺ããŠããŸãïŒãã ãããã©ãã£ãã¯ã¯ãŸã åŠçã§ããŸããïŒãæºå
ãã¹ãã³ã³ããããªã¯ãšã¹ããåŠçããæºåãã§ããŠãããã©ããã瀺ããŸããæºåãããŒãã倱æããå Žåããšã³ããã€ã³ãã³ã³ãããŒã©ã¯ããããã«äžèŽãããã¹ãŠã®ãµãŒãã¹ã®ãšã³ããã€ã³ããããããIPã¢ãã¬ã¹ãåé€ããŸããããã¯ãKubernetesã®ããã¥ã¡ã³ãã«ãèšèŒãããŠããŸãã
æºåãããŒãã¯ãã¢ããªã±ãŒã·ã§ã³ãèŠæ±ãåãå ¥ããæºåãã§ããŠããããšã瀺ããããªæ¹æ³ã§ããã¯ãšã³ãã«ç§»åããå¿ èŠããããããããå€ãã®ãªãœãŒã¹ãæ¶è²»ããŸãã
ããŒã¿ããŒã¹ã«çŽæ¥ã¢ã¯ã»ã¹ãããã©ããã«ã€ããŠã¯ãã³ãã¥ããã£ã§å€ãã®è«äºããããŸãããªãŒããŒãããïŒãã§ãã¯ã¯é »ç¹ã«å®è¡ãããŸããã調æŽå¯èœïŒãèæ ®ããŠãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¬ã³ãŒããããŒã¿ããŒã¹ããè¿ãããããšã確èªããåŸã«ã®ã¿ããã©ãã£ãã¯ãåŠçã§ãããã©ãããã«ãŠã³ãããããšã«ããŸãããé©åã«èšèšãããå¯çšæ§ãããŒãã¯ãããé«ãå¯çšæ§ãä¿èšŒããå±éäžã®ããŠã³ã¿ã€ã ãæé€ããŸããã
ããŒã¿ããŒã¹ã«ã¯ãšãªãå®è¡ããŠã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããŠããããšã確èªããå Žåã¯ãã§ããã ãå®äŸ¡ã§ããããšã確èªããŠãã ããã次ã®ãããªã¯ãšãªãå®è¡ããŠã¿ãŸãããã
SELECT small_item FROM table LIMIT 1
Kubernetesã§ããã2ã€ã®å€ãæ§æããæ¹æ³ã®äŸã次ã«ç€ºããŸãã
livenessProbe:
httpGet:
path: /api/liveness
port: http
readinessProbe:
httpGet:
path: /api/readiness
port: http periodSeconds: 2
ããã€ãã®è¿œå ã®æ§æãªãã·ã§ã³ãè¿œå ã§ããŸãã
initialDelaySeconds
-ã³ã³ããã®éå§ãããµã³ãã«ã®éå§ãŸã§ã«äœç§ãçµéããããperiodSeconds
â .timeoutSeconds
â , . -.failureThreshold
â , .successThreshold
â , ( , ).
:
Kubernetesã«ã¯ããã©ãããªããããã¯ãŒã¯ããã°ã©ãã£ããããããã©ã«ãã§ã¯ããã¹ãŠã®ããããäºãã«çŽæ¥çžäºäœçšããŸããå Žåã«ãã£ãŠã¯ãããã¯æãŸãããããŸããã
æœåšçãªã»ãã¥ãªãã£åé¡ã¯ãæ»æè ãåäžã®è匱ãªã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠããããã¯ãŒã¯äžã®ãã¹ãŠã®ãããã«ãã©ãã£ãã¯ãéä¿¡ããå¯èœæ§ãããããšã§ããã»ãã¥ãªãã£ã®å€ãã®é åãšåæ§ã«ãæå°ç¹æš©ã®ååãé©çšãããŸããçæ³çã«ã¯ããããã¯ãŒã¯ããªã·ãŒã¯ããããéã®æ¥ç¶ãèš±å¯ãããŠãããã®ãšèš±å¯ãããŠããªããã®ãæ瀺çã«ç€ºãå¿ èŠããããŸãã
ããšãã°ã以äžã¯ãç¹å®ã®åååã®ãã¹ãŠã®ã€ã³ããŠã³ããã©ãã£ãã¯ãæåŠããåçŽãªããªã·ãŒã§ãã
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
ãã®æ§æã®èŠèŠåïŒ
ïŒhttps://miro.medium.com/max/875/1*-eiVw43azgzYzyN1th7cZg.gifïŒ
詳现ã¯ãã¡ãã
ã¹ããã4ïŒããã¯ãšåæåã³ã³ããã䜿çšããã«ã¹ã¿ã åäœ
ç§ãã¡ã®äž»ãªç®æšã®1ã€ã¯ãéçºè ã«ããŠã³ã¿ã€ã ãªãã§Kubernetesãžã®å±éãæäŸããããšã§ãããã¢ããªã±ãŒã·ã§ã³ãã·ã£ããããŠã³ãã䜿çšæžã¿ã®ãªãœãŒã¹ã解æŸããããã®å€ãã®ãªãã·ã§ã³ããããããããã¯å°é£ã§ããNginxã§ã¯
ç¹å®ã®åé¡ãçºçããŸããããããã®ããããé çªã«å±éããããšãæ£åžžã«å®äºããåã«ã¢ã¯ãã£ããªæ¥ç¶ãåæãããããšã«æ°ä»ããŸããã ã€ã³ã¿ãŒãããã§åŸ¹åºçã«èª¿æ»ããçµæãKubernetesã¯ããããã·ã£ããããŠã³ããåã«Nginxæ¥ç¶ããªããªãã®ãåŸ ããªãããšãå€æããŸããããã¬ã¹ãããããã¯ã®å©ããåããŠã次ã®æ©èœãå®è£ ããããŠã³ã¿ã€ã ãå®å šã«åãé€ããŸããã
lifecycle:
preStop:
exec:
command: ["/usr/local/bin/nginx-killer.sh"]
ãããŠããã«
nginx-killer.sh
ïŒ
#!/bin/bash
sleep 3
PID=$(cat /run/nginx.pid)
nginx -s quit
while [ -d /proc/$PID ]; do
echo "Waiting while shutting down nginx..."
sleep 10
done
ãã1ã€ã®éåžžã«äŸ¿å©ãªãã©ãã€ã ã¯ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®èµ·åãåŠçããããã®initã³ã³ãããŒã®äœ¿çšã§ããããã¯ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããåã«éå§ããå¿ èŠãããããªãœãŒã¹ã倧éã«æ¶è²»ããããŒã¿ããŒã¹ç§»è¡ããã»ã¹ãããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«ãã®ãããªå¶éãèšå®ããã«ããã®ããã»ã¹ã«é«ããªãœãŒã¹å¶éãæå®ããããšãã§ããŸãã
ãã1ã€ã®äžè¬çãªã¹ããŒã ã¯ãinitã³ã³ããå ã®ã·ãŒã¯ã¬ããã«ã¢ã¯ã»ã¹ããããšã§ããããã«ããããããã®è³æ Œæ å ±ãã¡ã€ã³ã¢ãžã¥ãŒã«ã«æäŸãããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¢ãžã¥ãŒã«èªäœããã®ã·ãŒã¯ã¬ãããžã®äžæ£ã¢ã¯ã»ã¹ãé²æ¢ãããŸãã
, : init- , . , .
:
æåŸã«ãããé«åºŠãªãã¯ããã¯ã«ã€ããŠè©±ããŸãããã
Kubernetesã¯éåžžã«æè»ãªãã©ãããã©ãŒã ã§ãããé©åãšæãããæ¹æ³ã§ã¯ãŒã¯ããŒããå®è¡ã§ããŸããéåžžã«å¹ççã§ãªãœãŒã¹ã倧éã«æ¶è²»ããã¢ããªã±ãŒã·ã§ã³ãå€æ°ãããŸããåºç¯ãªè² è·ãã¹ããéããŠãKubernetesã®ããã©ã«ããæå¹ãªå Žåãã¢ããªã±ãŒã·ã§ã³ã®1ã€ãäºæ³ããããã©ãã£ãã¯è² è·ã®åŠçã«èŠåŽããŠããããšãããããŸããã
ãã ããKubernetesã§ã¯ãç¹å®ã®ãããã®ã«ãŒãã«ãã©ã¡ãŒã¿ã®ã¿ãå€æŽããç¹æš©ã³ã³ãããå®è¡ã§ããŸããéããŠããæ¥ç¶ã®æ倧æ°ãå€æŽããããã«äœ¿çšãããã®ã¯æ¬¡ã®ãšããã§ãã
initContainers:
- name: sysctl
image: alpine:3.10
securityContext:
privileged: true
command: ['sh', '-c', "sysctl -w net.core.somaxconn=32768"]
ããã¯ããé«åºŠãªææ³ã§ãããå€ãã®å ŽåäžèŠã§ãããã ããã¢ããªã±ãŒã·ã§ã³ãéãè² è·ã«å¯ŸåŠããã®ã«èŠåŽããŠããå Žåã¯ããããã®ãã©ã¡ãŒã¿ãŒã®ããã€ãã調æŽããŠã¿ãŠãã ããããã®ããã»ã¹ãšããŸããŸãªå€ã®èšå®ã«é¢ãã詳现-ãã€ãã®ããã«å ¬åŒããã¥ã¡ã³ãã«ãããŸãã
æåŸã«
Kubernetesã¯ããã«äœ¿çšã§ãããœãªã¥ãŒã·ã§ã³ã®ããã«èŠãããããããŸããããã¢ããªã±ãŒã·ã§ã³ãã¹ã ãŒãºã«å®è¡ãç¶ããããã«å®è¡ããéèŠãªæé ãããã€ããããŸãã
Kubernetesãžã®ç§»è¡äžã¯ããè² è·ãã¹ããµã€ã¯ã«ãã«åŸãããšãéèŠã§ããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããè² è·ãã¹ããè¡ããã¡ããªãã¯ãšã¹ã±ãŒãªã³ã°åäœã芳å¯ãããã®ããŒã¿ã«åºã¥ããŠæ§æã埮調æŽããŠããããã®ãµã€ã¯ã«ãç¹°ãè¿ããŸãã
äºæ³ããããã©ãã£ãã¯ãçŸå®çã«èŠç©ããããããè¶ ããŠãã©ã®ã³ã³ããŒãã³ããæåã«ç Žæãããã確èªããŸãããã®å埩çãªã¢ãããŒãã§ã¯ãæåãåããã«ã¯ããããã®æšå¥šäºé ã®ã»ãã®äžéšã§ååãªå ŽåããããŸãããŸãã¯ããã詳现ãªã«ã¹ã¿ãã€ãºãå¿ èŠã«ãªãå ŽåããããŸãã
åžžã«æ¬¡ã®è³ªåãèªåããŠãã ããã
- ?
- ? ? ?
- ? , ?
- ? ? ?
- ? - , ?
Kubernetesã¯ãã¯ã©ã¹ã¿ãŒå šäœã«æ°åã®ãµãŒãã¹ãå±éããããã®ãã¹ããã©ã¯ãã£ã¹ãå¯èœã«ããçŽ æŽããããã©ãããã©ãŒã ãæäŸããŸãããã ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãç°ãªããŸããå®è£ ã«ã¯ããå°ãäœæ¥ãå¿ èŠãªå ŽåããããŸãã
幞ããKubernetesã¯ããã¹ãŠã®æè¡çç®æšãéæããããã«å¿ èŠãªã«ã¹ã¿ãã€ãºãæäŸããŸãããªãœãŒã¹ã®èŠæ±ãšå¶éã掻æ§ãšæºåã®ãããŒããåæåã³ã³ããããããã¯ãŒã¯ããªã·ãŒãããã³ã«ã¹ã¿ã ã«ãŒãã«ã®èª¿æŽãçµã¿åãããŠäœ¿çšââãããšãé害èæ§ãšé«éãªã¹ã±ãŒã©ããªãã£ãšãšãã«ãé«ãããã©ãŒãã³ã¹ãå®çŸã§ããŸãã
ä»ã«èªãã¹ãããšïŒ