2ã€ã®ã³ã³ãããŒãå«ãŸãããžã§ãã«ã€ããŠèããŠã¿ãŸãã1ã€ã¯äœæ¥ãå®è¡ããŠããçµäºãããã1ã€ã¯æ瀺çã«çµäºããããã«ã¯èšèšãããŠããŸãããããã°ãã¡ããªãã¯åéãªã©ã®ãµããŒãæ©èœãæäŸããŸãã
ãã®ãããªããšãããããã«ã©ã®ãããªãªãã·ã§ã³ããããŸããïŒ ã©ã®ãããªãªãã·ã§ã³ãååšããå¿ èŠããããŸããïŒ
çŸåšããžã§ãã¯2çªç®ã®ã³ã³ãããŒãå®è¡ãããŠããéãå®è¡ããç¶ããŸããã€ãŸãããŠãŒã¶ãŒã¯2çªç®ã®ã³ã³ãããŒãäœããã®æ¹æ³ã§å€æŽããŠãæåã®ã³ã³ãããŒããã€å®è¡ãããããæ€åºããæ£åžžã«çµäºã§ããããã«ããå¿ èŠããããŸãã
ãã®è³ªåã¯ããã°ããå
@ kubernetes / goog-control-plane @erictune
/ãµã
ãŸããããã§ææ¡ãããŠããããã«æŽ»æ°ã®åé¡ã䜿çšãããšããããã倱æãããšèŠãªããããžã§ãå šäœãæåãããšèŠãªãããªãããã httpïŒ//stackoverflow.com/questions/36208211/sidecar-containers-in-kubernetes-jobsã¯æ©èœããŸããã
ãããã0ãè¿ãã®ãåŸ
ã€ã®ã§ã¯ãªãããžã§ããæåãæ€åºããããã«ãããŒãã§ããããã«ããžã§ãæåãããŒãã宣èšããŠã¯ã©ãã§ããããã
ãããŒããæåãè¿ããšãããããçµäºã§ããŸãã
ãã§ã«ååšããŠããã³ã³ããã«å¯ŸããŠãããŒããå®è¡ã§ããŸããããŸãã¯ååšããŸã
ãããåãå£ãããŠããã¬ãŒã¹ã«ãªããŸããïŒ
å¥ã®ãªãã·ã§ã³ã¯ãç¹å®ã®çµäºã³ãŒããç¹å¥ãªæå³ãæã€ãã®ãšããŠæå®ããããšã§ãã
ããããå
šäœã®æåããŸãã¯ããããå
šäœã®å€±æãã¯äž¡æ¹ãšã
䜿ããã
ããã¯Podãªããžã§ã¯ãäžã«ããå¿ èŠããããããAPIã®å€§ããªå€æŽã«ãªããŸãã
13:41ã®æšã2016幎9æ22æ¥ã«ã¯ãæç[email protected]ã¯æžããŸããïŒ
JobããããŒãã§ããããã«ããžã§ãæåãããŒãã宣èšããŠã¯ã©ãã§ããããã
ãããã0ãè¿ãã®ãåŸ ã€ã®ã§ã¯ãªããæåãæ€åºããŸãããããŒããæåãè¿ããšãããããçµäºã§ããŸãã
â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/kubernetes/kubernetes/issues/25908#issuecomment -249021627ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AHuudjrpVtef6U35RWRlZr3mDKcCRo7oks5qsugRgaJpZM4IiqQH
ã
@erictuneè¯ãç¹; çµäºããã³ã³ããããããŒãããããšã¯ã§ããŸããã
ãããå ã®ç¹å®ã®ã³ã³ãããŒããå®äºãã³ã³ãããŒãšããŠæå®ããŠããã®ã³ã³ãããŒãçµäºãããšãã«ãžã§ããå®äºãããšèšããããã«ããããšã¯ã§ããŸããïŒ
ãµã€ãã«ãŒã³ã³ããã¯ã䞞倪ã®èŒžéãç£èŠãªã©ã®ããã«é·æã¡ããåŸåããããŸãã
ãžã§ããå®äºãããããããã匷å¶çã«çµäºã§ããŸãã
ãããå ã®ç¹å®ã®ã³ã³ãããŒããå®äºãã³ã³ãããŒãšããŠæå®ããŠããã®ã³ã³ãããŒãçµäºãããšãã«ãžã§ããå®äºãããšèšããããã«ããããšã¯ã§ããŸããïŒ
ãã®ããã¥ã¡ã³ããã€ã³ã3ã調ã¹ãŸãããïŒããã§è©³çŽ°ã«èª¬æãã.spec.completions
ãèšå®ãããæåã®ã³ã³ããã0ã®çµäºã³ãŒãã§çµäºãããšããã«ãžã§ããå®äºããŸãã
ãµã€ãã«ãŒã³ã³ããã¯ã䞞倪ã®èŒžéãç£èŠãªã©ã®ããã«é·æã¡ããåŸåããããŸãã
ãžã§ããå®äºãããããããã匷å¶çã«çµäºã§ããŸãã
å人çã«ã¯ããããã¯ä»äºãšããããã¯RSã®ããã«èŠããŸãããããã¯ç§ã®å人çãªæèŠã§ãããæãéèŠãªããšã«ãç§ã¯ããªãã®èšå®ã®å®å šãªè©³çŽ°ãç¥ããŸããã
äžè¬çã«ããã®ãããã¯ã«ã觊ããŠãã次ã®ãã£ã¹ã«ãã·ã§ã³https://github.com/kubernetes/kubernetes/issues/17244ããã³https://github.com/kubernetes/kubernetes/issues/30243ããã
@soltyshäžèšã§éä¿¡ãããªã³ã¯ããã€ã³ã3ã¯ãã³ã³ãããŒã®å®äºã§ã¯ãªãããããã®å®äºãåç §ããŠããŸãã
2ã€ã®ã³ã³ããã¯emptyDirãå ±æã§ããæåã®ã³ã³ããã¯ãI'm exiting nowãã¡ãã»ãŒãžããã¡ã€ã«ã«æžã蟌ã¿ããã1ã€ã®ã³ã³ããã¯ãã®ã¡ãã»ãŒãžã確èªãããšãã«çµäºã§ããŸãã
@erictuneç§ã¯ãã®ãã±ãã«è©²åœãããšæããŠãŒã¹ã±ãŒã¹ãæã£ãŠããŸãããã®åé¡ã解決ããããã®å ¬åŒã®æšå¥šæ¹æ³ããªãããã«æãããã®ã§ãæ£ããæ¹åã«ç§ãå°ããŠãããããšãé¡ã£ãŠããŸãã
ç§ã¯client-goã©ã€ãã©ãªã䜿çšããŠä»¥äžã®ãã¹ãŠãã³ãŒãã£ã³ã°ããŠããŸãïŒ
ã€ãŸããåºæ¬çã«1ã€ã®ã³ã³ãããããã§ããŒã«ãå®è¡ããä»äºããããŸãã ããŒã«ã®å®è¡ãçµäºãããšããã«ãçµæãã¡ã€ã«ãçæãããããšã«ãªã£ãŠããŸãã ããŒã«ã®å®è¡ãçµäºãããšããã«ããããåé€ãããçµæãã¡ã€ã«ã倱ãããããããã®çµæãã¡ã€ã«ããã£ããã£ã§ããªãããã§ãã
HostPath
ãVolumeSourceãšããŠäœ¿çšããå Žåããã®çµæãã¡ã€ã«ããã£ããã£ã§ããŸãããminikubeãããŒã«ã«ã§å®è¡ããŠãããããçµæãã¡ã€ã«ã¯ã¯ãŒã¯ã¹ããŒã·ã§ã³ã«ä¿åãããŸãã
ããããããã¯æšå¥šãããŠããããæ¬çªã³ã³ããã«ã¯çæ³çã§ã¯ãªãããšãç解ããŠããŸãã ãããã£ãŠãäžèšã®ããã«EmptyDir
ã䜿çšããŸããã ããããç¹°ãè¿ãã«ãªããŸããããããèªäœã§åé€ããããããå®éã«ãã£ããã£ããããšã¯ã§ããŸããã
ããã§ããµã€ãã«ãŒã³ã³ãããã¿ãŒã³ã䜿çšããŠåé¡ã解決ããå¿ èŠããããŸããïŒ
åºæ¬çã«ãäžèšã§ææ¡ããããšãå®è¡ããŸãã ãžã§ããéå§ãããã³ã«ããããã§2ã€ã®ã³ã³ãããŒãéå§ããŸãã 1ã€ã®ã³ã³ããããžã§ããå®è¡ãããžã§ããå®äºãããšããã«ãä»ã®ã³ã³ããã«ãã£ãŠååŸãããã¡ãã»ãŒãžãããããããŸãããã®ã¡ãã»ãŒãžã¯ãçµæãã¡ã€ã«ãååŸããŠã©ããã«ä¿åããŸããïŒ
ãããããªã2ã€ã®ã³ã³ãããå¿ èŠãªã®ãç解ã§ããŸããã ãªããžã§ãã³ã³ããã¯ããããã¹ãŠåç¬ã§å®è¡ã§ããªãã®ã§ããïŒ ã€ãŸãããžã§ããçµäºããçµæãã¡ã€ã«ãã©ããã«ä¿åããããã«ã¢ã¯ã»ã¹/èªã¿åããã©ããã«ä¿åããŸãã
@anshumanbhç§ã¯ããªãã«ææ¡ããŸãïŒ
hostPath
ããŠã³ãã䜿çšããŸããããã¯1ãšã»ãŒåãã§ããã§ã«è©ŠããŠããŸã@soltyshãã¡ã€ã«ãæ°žç¶çã«ä¿åããããããŸããã å®è¡ãããã³ã«ããã®çµââæãæåŸã®çµæãšæ¯èŒãããã ãã§ãã ãããã£ãŠããããè¡ãããšãèããŠããæ¹æ³ã¯ãå®è¡ã®ãã³ã«githubãªããžããªã«ã³ãããããŠãããå·®åãå®è¡ããŠäœãå€æŽããããã確èªããããšã§ããã ãã®ããã«ã¯ãçµæãäžæçã«ã©ããã«ä¿åããŠãGithubã«éä¿¡ã§ããããã«ããå¿ èŠããããŸãã ãããïŒ
@anshumanbhã¯å®å šã«æ確ã§ãããããã§ã
@soltyshã§ããããäžèšã®ãªã¹ããããªãã·ã§ã³3ãéžæãããã®ã§ããã°ãã©ã®ããã«å®è£ ããã°ããã§ããããã
ç§ãçŽé¢ããŠããåé¡ã¯ããžã§ããçµäºãããšããã«ã³ã³ãããŒãçµäºãããã¡ã€ã«ã倱ãããããšã§ãã ãã¡ã€ã«ããªãå ŽåãS3 / Googleãã©ã€ã/ããããããã¯ã¹ãªã©ã®å ±æãã©ã€ãã«ãã¡ã€ã«ãã¢ããããŒãããã«ã¯ã©ãããã°ããã§ããïŒ ãžã§ãã®ã³ãŒããå€æŽããŠãçµäºããåã«èªåçã«ã©ããã«ã¢ããããŒãããããšã¯ã§ããªããããæ®å¿µãªãããæåã«ãžã§ããå®è¡ããŠããããã¡ã€ã«ãã©ããã«ä¿åããå¿ èŠããããŸãã
ãžã§ãã®ã³ãŒããå€æŽã§ããªãå Žåã¯ããã¡ã€ã«ãã¢ããããŒãã§ããããã«ã³ãŒããã©ããããå¿ èŠããããŸãã äœæ¥ããŠããã®ãç»åã§ããå Žåã¯ãã³ããŒã³ãŒãã§ç»åãæ¡åŒµããã ãã§ãã
@soltyshã¯ããããã¯çã«ããªã£ãŠããŸãã ç§ã¯ãããããããšãã§ããŸããã ãã ãã次ã®è³ªåã¯ãè€æ°ã®ãžã§ããå®è¡ããå¿ èŠãããïŒããŸããŸãªããŒã«ãå®è¡ããŠãããšèããŠãã ããïŒããããã®ããŒã«ã®ãããã«ãã¢ããããŒãéšåãçµã¿èŸŒãŸããŠããªããšããŸãã ããã§ãä»ãç§ã¯ãã®ã©ãããŒãæ§ç¯ããã¢ããããŒãéšåã§ãããã®ããŒã«ã®ãããããæ¡åŒµããå¿ èŠããããŸãã ã©ãããŒ/æ¡åŒµæ©èœãäžåºŠäœæããŠããã¹ãŠã®ããŒã«ã§äœ¿çšã§ããæ¹æ³ã¯ãããŸããïŒ
ãã®å Žåããµã€ãã«ãŒã®ãã¿ãŒã³ã¯åããŸãããïŒ
ãããã§ããŸãã åããããå ã«è€æ°ã®ã³ã³ãããå ¥ããŠã¿ãŸããããã¿ãŒã³åããŠãã ããã ããã ãããã¯ãžã§ãã³ã³ãããå®è¡ããŠãããè¿œå ã®ã³ã³ãããšäžç·ã«åºåãåŸ æ©ããŠã¢ããããŒãããŠããŸãã ãããã©ãã»ã©å®è¡å¯èœãã¯ããããŸãããããã§ã«è©ŠããŠã¿ãããšãã§ããŸãã
ç©ãããªping-ãµã€ãã«ãŒã®èªèã«ãããEnvoyãªã©ã®ãã€ã¯ããµãŒãã¹ãããã·ã®ç®¡çãã¯ããã«å¿«é©ã«ãªããŸãã å ±æããé²æ©ã¯ãããŸããïŒ
çŸåšã®ç¶æ³ã§ã¯ãåã³ã³ããã«ã¯ã©ã€ãã¿ã€ã ã調æŽããããã®ãã³ãã«ãããããŒã«ãå¿ èŠã§ããã€ãŸããã¢ããã¹ããªãŒã ã®ã³ã³ããã€ã¡ãŒãžãçŽæ¥äœ¿çšããããšã¯ã§ããŸããã ãŸããè¿œå ã®argvãšããŠã³ããã€ã³ããæ¿å ¥ããå¿ èŠãããããããã³ãã¬ãŒããå€§å¹ ã«è€éã«ãªããŸãã
以åã®ææ¡ã¯ãäžéšã®ã³ã³ãããŒããå®äºãã³ã³ãããŒãšããŠæå®ããããšã§ããã å察ã®ããšãææ¡ããããšæããŸã-ããã€ãã®ã³ã³ãããããµã€ãã«ãŒããšããŠæå®ããæ©èœã ãããå
ã®æåŸã®éãµã€ãã«ãŒã³ã³ãããçµäºãããšããããã¯ãµã€ãã«ãŒã«TERM
ãéä¿¡ããå¿
èŠããããŸãã ããã¯ãPythonã®Thread.daemon
ãå€ãã®ã¹ã¬ããã©ã€ãã©ãªã«èŠããããããã¯ã°ã©ãŠã³ãã¹ã¬ãããã®æŠå¿µã«é¡äŒŒããŠããŸãã
èšå®äŸãã³ã³ããmain
çµäºãããšãkubeletã¯envoy
匷å¶çµäºããŸãïŒ
containers:
- name: main
image: gcr.io/some/image:latest
command: ["/my-batch-job/bin/main", "--config=/config/my-job-config.yaml"]
- name: envoy
image: lyft/envoy:latest
sidecar: true
command: ["/usr/local/bin/envoy", "--config-path=/my-batch-job/etc/envoy.json"]
åèãŸã§ã«ããããç§ãæãŸãããµã€ãã«ãŒã®æ¯ãèããã·ãã¥ã¬ãŒãããããã«äœ¿çšããŠããããã·ã¥ããããã¹ã§ãïŒ
containers:
- name: main
image: gcr.io/some/image:latest
command: ["/bin/bash", "-c"]
args:
- |
trap "touch /tmp/pod/main-terminated" EXIT
/my-batch-job/bin/main --config=/config/my-job-config.yaml
volumeMounts:
- mountPath: /tmp/pod
name: tmp-pod
- name: envoy
image: gcr.io/our-envoy-plus-bash-image:latest
command: ["/bin/bash", "-c"]
args:
- |
/usr/local/bin/envoy --config-path=/my-batch-job/etc/envoy.json &
CHILD_PID=$!
(while true; do if [[ -f "/tmp/pod/main-terminated" ]]; then kill $CHILD_PID; fi; sleep 1; done) &
wait $CHILD_PID
if [[ -f "/tmp/pod/main-terminated" ]]; then exit 0; fi
volumeMounts:
- mountPath: /tmp/pod
name: tmp-pod
readOnly: true
volumes:
- name: tmp-pod
emptyDir: {}
å察ã®ããšãææ¡ããããšæããŸã-ããã€ãã®ã³ã³ãããããµã€ãã«ãŒããšããŠæå®ããæ©èœã ãããå ã®æåŸã®éãµã€ãã«ãŒã³ã³ãããçµäºãããšããããã¯TERMããµã€ãã«ãŒã«éä¿¡ããå¿ èŠããããŸãã
@ jmillikin-stripeç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ãããããããããå ã§ããã€ãã®ã³ã³ãããŒãç°ãªãæ¹æ³ã§åŠçãããããããã®éã«äŸåé¢ä¿ãå°å ¥ãããšããååã«åŸã£ãŠããã®ãã©ããã¯ããããŸããã æåŸã®åŒã³åºãã¯@erictuneã«ä»»ããŸãã
ïŒ17244ã確èªããŸãããããã®ã¿ã€ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãŠãŒã¹ã±ãŒã¹ã«é©åããŸããïŒ ããã¯@erictuneãåã«ããã€ãã®ã³ã¡ã³ãã«èšåãããã®ã§ãïŒ
å¥ã®ãªãã·ã§ã³ã¯ãç¹å®ã®çµäºã³ãŒããç¹å¥ãªæå³ãæã€ãã®ãšããŠæå®ããããšã§ãã
@ jmillikin-stripeç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ãããããããããå ã§ããã€ãã®ã³ã³ãããŒãç°ãªãæ¹æ³ã§åŠçãããããããã®éã«äŸåé¢ä¿ãå°å ¥ãããšããååã«åŸã£ãŠããã®ãã©ããã¯ããããŸããã æåŸã®åŒã³åºãã¯@erictuneã«ä»»ããŸãã
Kubernetesã¯ãã³ã³ãããç°ãªãæ¹æ³ã§åŠçããªããšããååã«ã€ããŠæè»ã§ããå¿ èŠããããšæããŸãã ç§ãã¡ïŒStripeïŒã¯ãEnvoyãªã©ã®ãµãŒãããŒãã£ã³ãŒããæ¹é ããŠLampreyã¹ã¿ã€ã«ã®ã©ã€ããµã€ã¯ã«ããã¯ãæãããããããŸãããEnvelopeã¹ã¿ã€ã«ã®execå転ãæ¡çšããããšãããšãKubeletã«ç¹å®ã®ãµã€ãã«ãŒãçµäºããããããã¯ããã«è€éã«ãªããŸãã
ïŒ17244ã確èªããŸãããããã®ã¿ã€ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãŠãŒã¹ã±ãŒã¹ã«é©åããŸããïŒ ããã¯@erictuneãåã«ããã€ãã®ã³ã¡ã³ãã«èšåãããã®
å¥ã®ãªãã·ã§ã³ã¯ãç¹å®ã®çµäºã³ãŒããç¹å¥ãªæå³ãæã€ãã®ãšããŠæå®ããããšã§ãã
ç§ã¯ãKubernetesãŸãã¯KubeletãããŒããŸãã¯éãŒããããã现ããç²åºŠã§ãšã©ãŒã³ãŒãã解éããããšã«éåžžã«åŒ·ãå察ããŠããŸãã Borgletã«ããçµäºã³ãŒãã®ããžãã¯ãã³ããŒã®äœ¿çšã¯äžå¿«ãªæ©èœãã¹ã§ãããç¹å®ã®ã³ã³ããã€ã¡ãŒãžãç°ãªããããã®ãã¡ã€ã³ããŸãã¯ããµã€ãã«ãŒãã§ããå¯èœæ§ãããKubernetesã§ã¯ããã«æªåããŸãã
ãã¶ããããã解決ããã«ã¯è¿œå ã®ã©ã€ããµã€ã¯ã«ããã¯ã§ååã§ããããïŒ
ã«ãªãåŸãïŒ
ããã¯ãã³ã³ãããåèµ·åããã«ã¹ã¿ã ããªã·ãŒãå®çŸ©ããæ段ãå®çŸ©ããããšãã§ããŸãããŸãã¯ãããã©ã«ãã§èµ·åãããŠããªãã³ã³ãããèµ·åããŠãã³ã³ããã®ãã€ãžãŒãã§ãŒã³æ¥ç¶ãå¯èœã«ããããšãã§ããŸãïŒã³ã³ãããçµäºããããã³ã³ããbãèµ·åããŸãïŒã
ããããããŸããã æ¥ç¶ã®ããã«VPNã¯ã©ã€ã¢ã³ããå¿
èŠãšãããžã§ãã30åããšã«å®è¡ããŸããããããéåžžã«åœ¹ç«ã€å¯èœæ§ã®ãããŠãŒã¹ã±ãŒã¹ãããããããããã§ãïŒããšãã°ãkubectlãããã·ãå¿
èŠãªãã®ïŒã çŸåšãåé¿çãšããŠjobSpec.concurrencyPolicy: Replace
ããŠããŸããããã¡ããããã¯ãaãïŒäžŠåãžã§ãã®å®è¡ãªãã§çããããšãã§ããbãïŒãžã§ãã®å®è¡æéãã¹ã±ãžã¥ãŒã«ééãããçãå Žåã«ã®ã¿æ©èœããŸãã
ç·šéïŒç§ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãã³ã³ãããçµäºã¹ããŒã¿ã¹ãšããŠããŒã¯ãããã®ã³ã³ããã®çµäºã¹ããŒã¿ã¹ãç£èŠããŠæ®ãã®ã³ã³ããã匷å¶çµäºããããã«ããžã§ãä»æ§ã«ããã€ãã®ããããã£ãå«ããã ãã§ååã§ãã
ç§ããããå¿ èŠã§ãã ç§ãã¡ã®å Žåãããã¯ãµã€ãã«ãŒãµãŒãã¹ãšããŠcloudsql-proxyã³ã³ãããå©çšããä»äºã§ãã
ãããå ã®ããã©ã€ããªãã³ã³ããã®ååã«ãããããã¢ãããŒã·ã§ã³ãè¿œå ããã®ã¯ã©ãã§ããããã ããããã°ããããã®ä»æ§ãå€æŽããå¿ èŠã¯ãããŸããã
ãããã®èšèšæ¹æ³ã®æ§è³ªäžãããã¯éåžžã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ã®ããã§ãã @soltysh @erictuneããã«ããã«åãçµãäºå®ã¯ãããŸããïŒ å¯èœãªéãå©ããŠãããŠãããã:)
ãã®æ©èœãå¿
èŠã§ãã ç§ãã¡ã®ãŠãŒã¹ã±ãŒã¹ã®å ŽåïŒ
ãããAã¯ã³ã³ããã«ããå¿
èŠããããŸã
ç§ã欲ãããã®ïŒã³ã³ããA1ãæåããŠå®äºãããšããããAã¯æåããŠå®äºããŸãã ã³ã³ããA1ã«ã¡ã€ã³ã³ã³ããã®ã©ãã«ãä»ããããšã¯ã§ããŸããïŒã¡ã€ã³ã³ã³ãããçµäºãããšãããããçµäºããŸããïŒ @erictune ïŒãã®ã¢ã€ãã¢ã¯@mingfangã«ãã£ãŠã説æãããŠã
ããã¿ããªããã®åé¡ã¯1ãæééããŠããããã§ãã ããã«é¢ããææ°æ
å ±ã¯äœã§ããïŒ ãžã§ããå®è¡ããããŠãŒã¹ã±ãŒã¹ããããŸãã ãã®ãžã§ãã¯ãããã€ãã®ãµã€ãã«ãŒcontainers
å«ãmain
ã³ã³ãããŒãå®è¡ããŸãã main
ã³ã³ãããçµäºãããšãã«ãžã§ããçµäºããå¿
èŠããããŸãã ã³ã³ããéã§signal
ãéä¿¡ããããã«file
ãå
±æããã®ã¯æå
端ã§ããïŒ
ç§ã¯ããã«ã€ããŠããã€ãã®äœæ¥ãéå§ããŠãããŸããŸãããç§ãããããå ŽåïŒããããkubeconã®åŸã§ïŒèª°ããä»åŸã®PRãã¬ãã¥ãŒã§ãããã©ããç¥ãããã§ãã
cc @erictune @ a-robinson @soltysh
@andrewsykimã©ã®ãããªã¢ãããŒããåããŸããã ãŸããããã«è¿œå ããŠããããšã¯ããã£ãŠããŸããäŸåé¢ä¿ã®ãµããŒããè¿œå ããã«ã¯äœãå¿
èŠã§ããã main
ã³ã³ããã®ããã«ããµã€ãã«ãŒãåæåããããŸã§éå§ããªãã§ãã ãã
ã¡ã€ã³ã³ã³ããã®ããã«ããµã€ãã«ãŒãåæåããããŸã§èµ·åããªãã§ãã ãã
main
ã¯ãµã€ãã«ãŒãåæåããããšãã«ãã§ãã¯ã§ããã¯ããªã®ã§ïŒãŸãã¯ã¬ãã£ãã¹ãããŒãã䜿çšããŠïŒããã®ã±ãŒã¹ã¯åé¡ã§ã¯ãªããšæããŸãã ããã¯ãã®åé¡ã«ã¯åœãŠã¯ãŸããŸããã main
ãçµäºããŠããããã§ã:)
çµå±ãkubernetes APIãç£èŠããäžèŽããã¢ãããŒã·ã§ã³ã䜿çšããŠãžã§ããçµäºããã¡ã€ã³ã³ã³ãããçµäºããåçŽãªã¹ã¯ãªãããäœæããŸããã å®ç§ã§ã¯ãããŸããããã³ã¢ã®ããŒãºã«å¯Ÿå¿ããŸãã èå³ã®ããæ¹ã¯ã·ã§ã¢ã§ããŸãã
@ajbouhãããèŠç¹ãšããŠå ±æããŠããã ããã°ãå人çã«æè¬ããŸãã ç§ã¯äŒŒããããªãã®ãæžã蟌ãããšããŠããŸãã
@nrmitchiãããç§ãæžããyamlã®èŠç¹ã§ãã ããã¯éåžžã«ã·ã§ã«ã¹ã¯ãªããã§ããã䜿çšããAPIãšæ©èœãããã®ãååŸããæ¹æ³ã®ç¹ã§ãããããããã¯ããªãã«ãšã£ãŠè¯ãåºçºç¹ã§ãã ãäžæãªç¹ãããããŸããããäœãããŠãããã«ã€ããŠã®è³ªåã«ãçãããŸãã
https://gist.github.com/ajbouh/79b3eb4833aa7b068de640c19060d126
@mrbobbytablesãšåãCloudSQLãããã·ã®ãŠãŒã¹ã±ãŒã¹ããããŸãã ã¯ã©ãŠãSQLã«å®å šã«æ¥ç¶ããã«ã¯ããããã·ã䜿çšããããšããå§ãããŸããããã®ãããã·ã¯ãžã§ãã®å®äºæã«çµäºããªãããã次ã®ãããªã¯ã¬ã€ãžãŒãªãããã³ã°ãç£èŠãçºçããŸãã ããã«é²ãéã¯ãããŸããïŒ
@ amaxwell01ãããžã®ã¯ã©ãŠãSQLãããã·ã®é¢äžã«é¢ããŠãç§ã¯ããªããã¹ã¿ãŒãä»ãããæŽæ°ãç£èŠãããã§ããåé¡ãã°ãŒã°ã«ã§éããŸããïŒ https ïŒ
ããããšã@abevoelkerç§ã¯ããã§ããªãã®æçš¿ããã©ããŒããŠããŸãã ããã«ãããªãã®ã³ã¡ã³ãã¯ç§ãç¬ãããŸããð
ãã®åé¡ã®åœ±é¿ãåããŠããŸãã
ãã€ã¯ããµãŒãã¹ã«ã¯ãk8s cronjobã§å®è¡ã§ããããã€ãã®django管çã³ãã³ãããããŸããããžã§ãã®å®äºæã«åæ¢ããªãcloudsqlproxyãµã€ãã«ãŒãåå ã§æåããŸããã
ãã€è§£æ±ºçãåŸããããã«ã€ããŠã®ææ°æ
å ±ã¯ãããŸããïŒ
ãµã€ãã«ãŒã³ã³ãããã¿ãŒã³ã¯ãŸããŸã䜿çšãããŠãããããã解決ããããŸã§ãå€ãã®äººãk8scronãžã§ããšãžã§ãã䜿çšã§ããªããªããŸãã
ããã®ããã«ç§ã®+1ãæå ¥ãããã£ãã ãã§ãã ç§ã¯ä»ã®ã¿ããªãšåãGCEã¯ã©ãŠãSQLãããã·ã®åé¡ãæ±ããŠããŸãã ããã¯ç§ã殺ããŠããŸã... helmã®ãããã€ã倱æãããããç§ã®ãã©ãã©ãŒã ã®é©çšã«å€±æããŸãã
ããã«ã€ããŠäœããã®è§£æ±ºçãæ¬åœã«èŠãããšæããŸã... @ ajbouhã®jistã¯ããŸãããããã«èŠããŸã...ããããããããããã¯ããããŒã§ãã
cloudsql-proxy
å¿
èŠãšããä»ã®äººã«ãšã£ãŠã cloudsql-proxy
ãDaemonSetãšããŠå®è¡ããã®ã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã«åãã§ããããïŒ ç§ã®å Žåãæ°žç¶çãªãããã€ã¡ã³ããšãããã·ãå¿
èŠãšããCronJobã®äž¡æ¹ããã£ãããããããã·ãåã
ã®ãããããåãé¢ãã代ããã«ããŒãããšã«1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãã¢ã¿ããããã®ãçã«ããªã£ãŠããŸãã
ã¯ãã
cloudsqlãããã·ãµã€ãã«ãŒãåé€ããã®ããŒã«ãæ§ç¯ããããšã«ããŸãã
äžå€®ã®åå空éã«ããcloudsqlãããã·ã¯ãå®å
šã«æ©èœãã
ã¹ã±ãŒã©ããªãã£ãšããç°¡åãªå±éã移åããŸãã
ããã§ãåé¡ãªããžã§ããšcronãžã§ããå®è¡ã§ããŸãã
9:37ã®æ°Žã2018幎2æ7æ¥ã«ã¯ãããã»ãžã£ã¯ãœã³[email protected]
æžããŸããïŒ
cloudsql-proxyãå¿ èŠãšããä»ã®äººã«ãšã£ãŠãããã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã«åãã§ããããïŒ
cloudsql-proxyãDaemonSetãšããŠå®è¡ããŸããïŒ ç§ã®å Žåãç§ã¯äž¡æ¹ãšãæ°žç¶çã§ãã
ãããã€ã¡ã³ããšãããã·ãå¿ èŠãšããCronJobãªã®ã§ããã¿ããããã®ã¯çã«ããªã£ãŠããŸã
åã ã®ãããããååŸãã代ããã«ããŒãããšã«1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãã¢ã¿ããããŸããâ
ã³ã¡ã³ãããã®ã§ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/kubernetes/kubernetes/issues/25908#issuecomment-363710890 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ACAWMwetx6gA_SrHL_RRbTMJVOhW1FKLks5tSW7JgaJpZM4IiqQH
ã
èå³æ·±ãããšã«ãããŒã¢ã³ã»ããã䜿çšããããšã¯è¯ãéžæè¢ã®ããã«æããŸãã daemonsetsã䜿çšããå Žåãã¯ã©ãŠãSQLãããã·ä»äºã®çºèŠãã©ãããã- RJacksonm1ïŒ@devlounge @ïŒ
ãããããªãã¯ãããããã«èŠãããããèŠã€ããŸãã...
https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/
åºæ¬çã«ããã¹ãIPãååŸããããã«æ¬¡ã®ãããªãã®ã䜿çšããå¿ èŠããããŸãã
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
@ RJacksonm1- hostPort
æ©èœãããããã«äœãç¹å¥ãªããšãããŸãããïŒ fieldPath: spec.nodeName
ã¢ãããŒããšçµã¿åãããŠäœ¿çšââãããšãåžžã«connection refused
ãååŸããŸãð€
ç·šéïŒ spec.nodeName
ãæ£ããééããGKE v1.9.2-gke.1
@cvallance DaemonSetãå
¬ââéããããã«ãµãŒãã¹ãèšå®ããŸãããããã«ãããã¢ããªã±ãŒã·ã§ã³ã¯DNSçµç±ã§ã¢ã¯ã»ã¹ã§ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãããèªäœãšåããã¹ãã§å®è¡ãããŠããcloudsql-proxy
ã€ã³ã¹ã¿ã³ã¹ãšéä¿¡ããããšãä¿èšŒãããã®ã§ã¯ãããŸãããã cloudsql-proxy
ãã¯ã©ã¹ã¿ãŒå
šäœã«åãããŠæ¡åŒµãããããšãä¿èšŒããŸãïŒå
ã
ã¯Deploymentããã³HorizoâântalPodAutoscalerãšããŠãããã·ããŸãããã¹ã±ãŒã«ã¢ãã/ã¹ã±ãŒã«ããŠã³ãå€ãããããšãããããŸãããã¢ããªã§MySQL has gone away
ãšã©ãŒãçºçããŸãïŒã ããã¯DaemonSetã®çã®ç²Ÿç¥ã§ã¯ãªããšæããŸã...ð€
@ RJacksonm1 - hostPort
ãšspec.nodeName
åäœããããã«ãªããŸãã...ããã§ãããŒãã®DaemonSetã«çŽæ¥æ¥ç¶ããŸãð
CloudSqlãããã·ã³ãã³ããæ©èœããªãïŒ
-instances={{ .Values.sqlConnectionName }}=tcp:{{ .Values.internalPort }}
åãïŒ
-instances={{ .Values.sqlConnectionName }}=tcp:0.0.0.0:{{ .Values.internalPort }}
ð€Šââïž
ãã®åé¡ã«ã€ããŠã®çœåŒåãåŸãããã«ç§ãã¡ã«ã§ããããšã¯ãããŸããïŒ
ã»ãŒ2幎éãªãŒãã³ããŠããŸããããŸã åé¿çãããããŸãã
èªåã§ãããå®è£ ããããšããŠããå®è£ ãããœãªã¥ãŒã·ã§ã³ãAPIã®å€æŽãªã©ã«ã€ããŠã¯ã瀟å ã®äººããã®æ¿èªãå¿ èŠãªãããå®è¡ã§ããªãã®ã§ã¯ãªãããšæããŸãã
ãããæãéããããã«ç§ã«ã§ããããšã¯ãããŸããïŒ
åèãŸã§ã«ãå ±æããªã¥ãŒã å ã®ãã¡ã€ã«ãç¶æ ããµã€ãã«ãŒã«äŒéãã@ jmillikin-stripeã®åé¿çã®cloud-sql-proxyãµã€ãã«ãŒããŒãžã§ã³ãäœæããŸããã
ããã¯åé¡ãªãåäœããŸãããç§ã®K8sæ§æã§æãåä»ãªããã¯ã§ã:(
apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
template:
spec:
containers:
- name: example-job
image: eu.gcr.io/example/example-job:latest
command: ["/bin/sh", "-c"]
args:
- |
trap "touch /tmp/pod/main-terminated" EXIT
run-job.sh
volumeMounts:
- mountPath: /tmp/pod
name: tmp-pod
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/bin/sh", "-c"]
args:
- |
/cloud_sql_proxy --dir=/cloudsql -instances=example:europe-west3:example=tcp:3306 -credential_file=/secrets/cloudsql/credentials.json &
CHILD_PID=$!
(while true; do if [[ -f "/tmp/pod/main-terminated" ]]; then kill $CHILD_PID; echo "Killed $CHILD_PID as the main container terminated."; fi; sleep 1; done) &
wait $CHILD_PID
if [[ -f "/tmp/pod/main-terminated" ]]; then exit 0; echo "Job completed. Exiting..."; fi
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
- name: cloudsql
mountPath: /cloudsql
- mountPath: /tmp/pod
name: tmp-pod
readOnly: true
restartPolicy: Never
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
- name: cloudsql
emptyDir:
- name: tmp-pod
emptyDir: {}
backoffLimit: 1
ãããžã§ã¯ãã®å éšã®èª°ãããã®åé¡ã®é²æç¶æ³ã«ã€ããŠã³ã¡ã³ãã§ããŸããïŒ
ããã§åãåé¡
cc @ kubernetes / sig-apps-feature-requests @ kubernetes / sig-node-feature-requests
次ã®ããã«ããžã§ãããããå®äºïŒä»ã®ã³ã³ãããåæ¢ããç¶æ ïŒãšããŠããŒã¯ããããã«ããŠãŒã¶ãŒããžã§ãå ã®ã³ã³ãããïŒååã§ïŒæ£åžžã«å®äºããããšæå®ã§ããããã«ããããšã¯çã«ããªã£ãŠããŸããïŒ
apiVersion: batch/v2beta1
kind: Job
metadata:
name: my-job
namespace: app
spec:
template:
spec:
containers:
- name: my-container
image: my-job-image
...
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
...
backoffLimit: 2
jobCompletedWith:
- my-container
ããªãã¡ããããŸã§ãåŸ
æ©ãå®è¡ããŸãmy-container
æåè£ã«çµäºãããã®åŸãã¡ããã©çµäºcloudsql-proxy
ã
ç·šéïŒãã®ã¹ã¬ãããäžã«ã¹ã¯ããŒã«ãããšãããã以åã«ææ¡ãããŠããããšãããããŸãã @erictuneãŸãã¯ä»ã®èª°ããããªããããæ©èœããªãã®ãã«ã€ããŠè©³ãã説æã§ããŸããïŒ
ã¯ããããã¯å®ç§ã ãšæããŸãã ãžã§ãã®ã¹ããŒã¿ã¹ãç£èŠããå®äºããããã€ãã©ã€ã³ãç¶è¡ã§ãããã®ã§ãã
ãããããã¯å®ç§ã§ãããã
ç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ã@jpalomaki
çŽç²ã«ãžã§ãã³ã³ãããŒã©å ã§ããã解決ããã¢ãããŒãã«é¢ããŠç§ãæ±ããŠããæžå¿µã®1ã€ã¯ããžã§ããçµäºããåŸãããããå®è¡ããç¶ããããšã§ãã çŸåšããããã¯çµäºãã§ãŒãºã«å ¥ããããŒãã¯ãããã®ãªãœãŒã¹ã解æŸã§ããŸãã
ã³ã³ãããŒã©ãŒãå®äºãããšå€æãããšãã«ãžã§ãã³ã³ãããŒã©ãŒã«ããããåé€ãããããšãã§ããŸãããããã¯ãçµäºãããããã¬ã³ãŒããïŒããŒããªãœãŒã¹ã䜿çšããã«ïŒAPIãµãŒããŒã«ãšã©ãŸãçŸåšã®åäœãšãç°ãªããŸãã
ãããã®çç±ããããããAPIã¬ãã«ã§ããã«å¯ŸåŠããæ¹ããä»®ã«ãã£ããšããŠããç§ã«ã¯ããããããããã§ãã æ°ã«ãªããå®äºãã³ã³ããã¯ãã§ã«çµäºããŠãããããããŒãã¯åã ã®ã³ã³ããã«å°éããŠåŒ·å¶çµäºããå¿ èŠãããå¯äžã®ãã®ã§ãã ããã¯ãåŸ æ©ããã³ã³ãããŒã®æŠå¿µãæå®ã§ãããããã¬ãã«ã®APIããŸãã¯å€éšãšãŒãžã§ã³ãïŒãžã§ãã³ã³ãããŒã©ãŒãªã©ïŒãå®éã«åé€ããã«ãããã匷å¶çã«çµäºã§ããããã«ãããããã¬ãã«ã®APIã®ããããã®åœ¢åŒããšãããšãã§ããŸãããããã
ãŸããããã»ããµã³ã³ãããæ£åžžã«çµäºããå Žåã«ãã³ã³ããã«ãã£ãŠçæããããã¡ã€ã«ãã¢ããããŒãããããã®ãœãªã¥ãŒã·ã§ã³ãæ¢ããŠããŸãã
ãµã€ãã«ãŒã³ã³ããã«k8sAPIãä»ããŠã³ã³ããã®ã¹ããŒã¿ã¹ãç£èŠãããã¢ããããŒããŸãã¯çµäºãéå§ãããã©ããããã€éå§ããããç¥ãããšã«å¯ŸããŠè¡ããã@mingfangã®äž»åŒµãç解ã§ããŸããã ãµã€ãã«ãŒã³ã³ãããããããåºããšããžã§ãã¯æ£åžžã«çµäºããã¯ãã§ãã
å¥ã®èãã¯ãããã¯ã®ããã«èŠããŸãããããŒã¿çæã³ã³ãããŒãinitã³ã³ãããŒã«ããããŒã¿ã¢ããããŒãã³ã³ãããŒïŒãµã€ãã«ãŒã³ã³ãããŒã§ããå¿ èŠã¯ãªããªããŸãïŒãäœæããããšãã©ãã»ã©æªãããç¥ãããã§ãã ïŒããã»ããµã³ã³ãããæ£åžžã«çµäºããåŸã«ã®ã¿èªåçã«éå§ãããŸãã ç§ã®å ŽåãåŠçã³ã³ããã«ããŒã¿ãæäŸããããã«ãæåã®initã³ã³ãããšããŠããŒã¿ããŠã³ããŒããŒã³ã³ãããå¿ èŠã«ãªããŸãããããç¹ã«æªãèãã§ããå Žåã¯ããã®çç±ãç¥ããããšæããŸãã
ãµã€ãã«ãŒããã¡ãŒã¹ãã¯ã©ã¹ã®k8sã³ã³ã»ããã«ææ Œãããã°ããã®åé¡ã¯è§£æ±ºããŸãããïŒ Kubeletã¯ããããå ã§å®è¡äžã®ãã¹ãŠã®ã³ã³ãããŒããµã€ãã«ãŒã®ã³ã³ãããŒãšããŠããŒã¯ãããŠããå Žåãããããçµäºã§ããŸãã
FWIWãç§ã¯Cloud SQLãããã·ãéåžžã®ãããã€ïŒ replicas: 1
ïŒãšããŠãããã€ããããšã§ãããåé¿ãã Job
ãšCronJob
type: ClusterIP
ä»ããŠäœ¿çšãããŸããããµãŒãã¹ã ããã§ãžã§ãã¯æ£åžžã«å®äºããŸãã
ç§ã¯ããã«é¢ããå ¬åŒã®ç«å Žã欲ããã§ãã
APIããã®ãµããŒãããªãå Žåã¯ãå°ãªããšãããã®åé¡ãçºçãããšãã«äººã ãäœããã¹ãããç解ã§ããããã«ã代æ¿ãœãªã¥ãŒã·ã§ã³ãå ¬åŒã«ææžåããå¿ èŠããããŸãã
誰ã«pingãéä¿¡ããã®ããããã«æ³šæãåããæ¹æ³ãããããŸãã...
ããã«å¯ŸåŠããã®ã¯æ¬åœã«çŽ æŽãããããšã§ãã ãžã§ãããªããªãããšã¯ãªãããšã«å ããŠãå šäœçãªãããã¹ããŒã¿ã¹ã¯æããã«æ£ãããããŸããã
Init Containers:
initializer:
State: Terminated
Reason: Completed
Exit Code: 0
Started: Wed, 21 Mar 2018 17:52:57 -0500
Finished: Wed, 21 Mar 2018 17:52:57 -0500
Ready: True
Containers:
sideCar:
State: Running
Started: Wed, 21 Mar 2018 17:53:40 -0500
Ready: True
mainContainer:
State: Terminated
Reason: Completed
Exit Code: 0
Started: Wed, 21 Mar 2018 17:53:41 -0500
Finished: Wed, 21 Mar 2018 17:55:12 -0500
Ready: False
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
èå³æ·±ãã®ã¯ãinitContainerïŒTerminatedãCompletedãReady = TrueïŒãšã¡ã€ã³ã¢ããªã³ã³ãããŒïŒTerminatedãCompletedãReady = FalseïŒã®ç¶æ ãšæºåå®äºã§ãã ãããFalseã®ãªãŒããŒãããã¬ãã£ç¶æ ãåŒãèµ·ãããŠããããã§ã-ç§ã®èŠè§£ã§ã¯ãééã£ãŠããŸãã ããã«ããããã®ãããã«ããã·ã¥ããŒãã«åé¡ããããšããŠãã©ã°ãç«ãŠãããŸãã
ç¹ã«CloudSQLãããã·ã§ãã®åé¡ãçºçããŠããå¥ã®ã客æ§ãããŸãã cronãžã§ããCloudSQLã«ã¢ã¯ã»ã¹ã§ããããã«ããããã«ãæ°žç¶çãªãµãŒãã¹ãšããŠå®è¡ããå¿ èŠã¯ãããŸããã
@yuriatgoogleæãç°¡åãªè§£æ±ºçã¯ãŸã bashãšemptyDirã®ãéæ³ãã§ãïŒ https ïŒ
ããã¯ããã¯ã§ããããããªããã°ãªããŸããã @phidahãæå³ããæ»æã¯ãããŸããã
ããŸããŸãªçç±ã§ãå€ãã®äººããããæãã§ããããã§ãã å
¬åŒã®ãµããŒããããã°ããã®ã«ãšæããŸãã ç§ã¯èªåã®ãµã€ãã«ãŒãšä»äºã§åãåé¡ãæ±ããŠããã®ã§ããµã€ãã«ãŒã«kube apiã䜿çšããŠããããå
ã®ä»ã®ã³ã³ãããŒã®ã¹ããŒã¿ã¹ãç£èŠãããŸããã completed
ã§çµäºããå Žåããµã€ãã«ãŒã¯0ãçµäºããŸãããµã€ãã«ãŒã1ãçµäºãããšãããšã©ãŒãçºçããŸãããããããæãæŽç·Žããããœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããããéçºè
ã倧å¹
ã«å€æŽããããšãªãããªãã¯ãå®è¡ããŸããã èå³ã®ããæ¹ã¯ã³ãŒããã芧ãã ããïŒ //github.com/uswitch/vault-creds/blob/master/cmd/main.go#L132ã
ããã¯ç§ã«ãŽãªã©ãºã®æM1A1ãæãåºãããŸã...
ããã«ã¡ã¯ïŒ HelloooooooïŒ èª°ãããŸãããïŒ
ã¯ãããã©ã¯ã·ã§ã³+1ãååŸããŠãã ãã
ãããã£ãŠãã¢ããã¹ããªãŒã ã®å€æŽãå¿ èŠãšããææ¡ããããœãªã¥ãŒã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
sidecar: true
by @ jmillikin-stripejobCompletedWith
by @jpalomakiãµã€ãã«ãŒã®äžæçãªè§£æ±ºçãããããŒãªãã®ïŒãããæ©èœããŸãïŒïŒ
cloudsql-proxy
ãµã€ãã«ãŒã®å Žåææ¡ããããœãªã¥ãŒã·ã§ã³ã«é¢ããKubernetesã®ã¡ã³ããããã®åçããåŸ ã¡ããŠãããæ¢åã®kubernetesããŒãžã§ã³ã䜿çšããŠãã®ãŠãŒã¹ã±ãŒã¹ã解決ããæ¹æ³ã«ã€ããŠæšå¥šäºé ãæããŠãã ããã ããããšãïŒ
ã¬ã³ããªã³ã°ã¿ã¹ã¯ã®stdout / stderrãããŒã¿ããŒã¹ã«ã¢ããããŒããããã°ãšãŒãžã§ã³ããäœæããããšããŠ1æ¥ãè²»ãããåŸããã®ã¹ã¬ãããçºèŠããŸãããããããå ã«ãšãŒãžã§ã³ããååšãããšããããšã¯ããžã§ãã決ããŠçµäºããªãããšãæå³ããããšãçºèŠããã ãã§ãã
äžèšã®ææ¡ã®äžã§ãç§ã¯ããµã€ãã«ãŒïŒçããäžçªå¥œãã§ããããã¯ã·ã³ãã«ã§èŠç¹ããããç§ã®ãããªéçºè ã«ã¯éåžžã«ç解ããããããã§ãã ããµã€ãã«ãŒãã¯å®éã«ã¯åãªããžã§ã以äžã®ãã®ã«é©çšãããå®äºèŠä»¶ä»¥å€ã®ä»ã®ãã®ãæ瀺ããããããã¶ã€ã³ãã¿ãŒã³ã§ãããããç§ã¯ãããããããå°ãç°ãªããã®ãšåŒã¶ã§ãããã ç§ã®ãã€ã¯ã·ã§ãã£ã³ã°ãèš±ãã°ããããããambientïŒtrueãã®ãããªãã®ãšåŒãã§ããã®ã¿ã¹ã¯ããŸã å®è¡ãããŠããå Žåã§ããžã§ããå®äºãããšèŠãªãããšãã§ããããšã瀺ããŸãã ä»ã®åèªã¯ãè£å©ããŸãã¯ããµããŒããã§ããå¯èœæ§ããããŸãã
ä»ã®å€ãã®äººã説æããŠããã®ãšåãã¯ãŒã¯ãããŒã§ããã®åé¡ãçºçããŸããïŒæ¥ç¶ã®ãããã·ãŸãã¯ã¡ããªãã¯ã®åéã«äœ¿çšããããããå ã®ä»ã®ã³ã³ãããŒãæ£åžžã«çµäºããåŸã¯ç®çããªããµã€ãã«ãŒã³ã³ãããŒïŒã
以åã®ææ¡ã¯ãäžéšã®ã³ã³ãããŒããå®äºãã³ã³ãããŒãšããŠæå®ããããšã§ããã å察ã®ããšãææ¡ããããšæããŸã-ããã€ãã®ã³ã³ãããããµã€ãã«ãŒããšããŠæå®ããæ©èœã ãããå ã®æåŸã®éãµã€ãã«ãŒã³ã³ãããçµäºãããšããããã¯TERMããµã€ãã«ãŒã«éä¿¡ããå¿ èŠããããŸãã
ãããç§ã®çæ³çãªè§£æ±ºçã§ãã SIGTERMã®ä»£ããã«SIGHUPãææ¡ãããããããŸãã-ããã¯ãSIGHUPã®ã»ãã³ãã£ã¯ã¹ãé¢é£ããæ£ç¢ºãªãŠãŒã¹ã±ãŒã¹ã®ããã§ãïŒ -ã§ãã©ã¡ãã§ããããšæããŸãã
çŸç¶ã§ã¯ãKubernetesã§ãžã§ããå®è¡ããã«ã¯ããµã€ãã«ãŒä»¥å€ã®ã³ã³ãããçµäºãããšãã«Kubernetesåºæã®ã³ã³ããééä¿¡ãåŠçããããã«ã¢ããã¹ããªãŒã ã³ã³ããã€ã¡ãŒãžã«æåã§ããããé©çšãããããŸã³ãããããçµäºããªãããã«ãã¹ãŠã®ãžã§ãã®ãµã€ãã«ãŒãæåã§çµäºããå¿ èŠããããŸãã¶ãã¶ãã ã©ã¡ããç¹ã«æ¥œãããã®ã§ã¯ãããŸããã
ãã®ããããäœæããããšæããŸãããã³ãŒããæãäžããåã«ã@ kubernetes / sig-apps-feature-requestsããã®ã¬ã€ãã³ã¹ããé¡ãããŸãã ãããæ©èœãããããã«ãããä»æ§ã«sidecar
ãã£ãŒã«ããè¿œå ããŠã倧äžå€«ã§ããïŒ ãããã®ä»æ§ãå€æŽããããšãèºèºããŸããããããå¿
èŠãã©ããã¯ããããŸããã ãã¶ãä»ã®ãšãã泚éã䜿çšããŸããïŒ
@andrewsykimç§ã¯ãã°ããã®éãã®åé¡ã
ç§ã®æšè«ã¯ããã§ãïŒ
èãïŒ
ããã«ã¡ã¯ãç§ã¯kubeconã®sig-appsã®äººãã¡ã«ãã®åé¡ã«ã€ããŠè©±ããŸãããåºæ¬çã«ãããã¯åœŒãã®åœé¢ã®ããŒããããã«ãããã®ã§ã¯ãããŸãããã圌ããæå¹ãªãŠãŒã¹ã±ãŒã¹ã§ãããšèãããã®ã§ãã 圌ãã¯ããã«åãçµãã³ãã¥ããã£ã®èª°ãã«éåžžã«ãªãŒãã³ã§ãã
ããã解決ããããã®æ¡åŒµææ¡ã®PRãäœæããã®ã§ãããã«ãã£ãŠãã£ã¹ã«ãã·ã§ã³ãçæãããããšãé¡ã£ãŠããŸãhttps://github.com/kubernetes/community/pull/2148ã
@ Joseph-IrvingããŸãšããŠãããŠããããšãïŒ ããã«ã€ããŠå¯ŸåŠããå¿ èŠã®ãã詳现ãããããã«æãããã®ã§ããããŸã§ã¯äœæ¥ã延æããŸã:)
æ°žç¶çãªé·æçãªåé¡:(
cc @ kow3ns @janetkuo
åé¡ãããã«è€éã«ããããšãæå³ããããšãªãã initContainers
ãšäžç·ã«ããµã€ãã«ãŒãã¹ã¿ã€ã«ã®ã³ã³ãããŒãå®è¡ã§ããããšã圹ç«ã¡ãŸãã
ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ããã®äººã ã«äŒŒãŠããŸããããŒã¿ããŒã¹ã®ç§»è¡ãå®è¡ããinitContainerãšåæã«ã¯ã©ãŠãSQLãããã·ãå®è¡ããå¿ èŠããããŸãã initContainersã¯äžåºŠã«1ã€ãã€å®è¡ãããããããããã·ããããã€ã¡ã³ã+ãµãŒãã¹ãšããŠå®è¡ãã以å€ã¯ããããè¡ãæ¹æ³ãããããŸããããä»ã®ãŠãŒã¹ã±ãŒã¹ïŒãã°ç®¡çãªã©ïŒã§ã¯é©åãªäœæ¥ã§ã¯ãªããšæããŸãããã®åšãã
@mcfedr initã³ã³ããã®åäœã«é¢ãã芳å¯ãè©äŸ¡ãããããªãã¢ã¯ãã£ããªæ¡åŒµææ¡ããããŸãã ããããã®ææ¡ã®ç¯å²å ãªã®ããããã«é¢é£ããæ¹åãªã®ãã¯ç§ã«ã¯ããããŸããããååã«é¢é£ããŠããã®ã§ãæ€èšã®ããã«æèµ·ããã®ã¯çã«ããªã£ãŠãããšæããŸãã
æœåšçãªå®è£ /äºææ§ã®åé¡ã«ãããããããçæ³çãªã¢ãã«ã¯ããµã€ãã«ãŒã®initã³ã³ãããŒããçŸåšã®ããã«é 次å®è¡ããç¶ããéãµã€ãã«ãŒã®initã³ã³ãããŒãšåæã«å®è¡ãããã¡ã€ã³ã·ãŒã±ã³ã¹ã³ã³ãããŒãèµ·åããåã«ãµã€ãã«ãŒãçµäºããããšã§ãã
ãã®äŸ¡å€ã«ã€ããŠã¯ãCloudSQL Proxyet.alã®ããã«ãŸã å®è¡ãããŠãããµã€ãã«ãŒãç¡èŠããå¿ èŠæ§ãè¡šæããããšæããŸãã
ã¹ã¯ãªããã«ããã»ã©æéãããããªãããšãããã£ãŠããã®ã§ã30ç§åŸã«cloudsqlã³ã³ããã匷å¶çµäºã§ããŸããã ãããç§ã®ã¢ãããŒãã§ãïŒ
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: schedule
spec:
concurrencyPolicy: Forbid
schedule: "*/10 * * * *"
startingDeadlineSeconds: 40
jobTemplate:
spec:
completions: 1
template:
spec:
containers:
- image: someimage
name: imagename
args:
- php
- /var/www/html/artisan
- schedule:run
- command: ["sh", "-c"]
args:
- /cloud_sql_proxy -instances=cloudsql_instance=tcp:3306 -credential_file=some_secret_file.json & pid=$! && (sleep 30 && kill -9 $pid 2>/dev/null)
image: gcr.io/cloudsql-docker/gce-proxy:1.11
imagePullPolicy: IfNotPresent
name: cloudsql
resources: {}
volumeMounts:
- mountPath: /secrets/cloudsql
name: secretname
readOnly: true
restartPolicy: OnFailure
volumes:
- name: secretname
secret:
defaultMode: 420
secretName: secretname
ãããŠããã¯ç§ã®ããã«åããŠããŸãã
ãã®ã¢ãããŒãã«äœãæ¬ ç¹ããããŸããïŒ
ãããã¯é¢é£ããŠããŠãCronJobã«ãç°¡åã«é©å¿ã§ãããšæãã®ã§ããããç§ã®ãœãªã¥ãŒã·ã§ã³ã§ãïŒ https ïŒ
ããã¯ãããã«æ²èŒãããŠããåé¿çã®1ã€ã«åºã¥ããŠããŸãããå±éçšã§ããããã preStop
䜿çšããŸãã ãµã€ãã«ãŒããã©ããããããšã¯çŽ æŽãããåããããŸãã
ãã®åé¡ã«ç¶ããŠã ãŸããcronjobã®ãµã€ãã«ãŒãšããŠcloud_sql_proxyã³ã³ããã䜿çšããŠããŸã
@stikoã«ããã¿ã€ã ã¢ãŠãå®è£
ã䜿çšããŸãã
äŒè©±ã«ãReplaceã®äœ¿çšã«é¢ããŠ@ oxygen0211ã«ãã£ãŠææ¡ããã解決çãè¿œå ããã ãã§ãä»ã®ãšããé©åãªåé¿çã§ããç§ã®ããã«ãã®åé¡ãçºçããå Žåã¯ãå¿ ã確èªããŠãã ããã
https://github.com/kubernetes/kubernetes/issues/25908#issuecomment -327396198
ãã®KEPã¯æ«å®çã«æ¿èªãããŠããŸãhttps://github.com/kubernetes/community/pull/2148 ããŸã åæããå¿ èŠã®ããããšãããã€ããããŸãããæ¯èŒçæ©ãäœæ¥ãéå§ã§ããå Žæã«å°éããããšãé¡ã£ãŠããŸãã KEPã¯30æ¥ã«https://github.com/kubernetes/enhancementsã«ç§»åããããããã©ããŒãããå Žåã¯ããã«ãããŸãã
ãµã€ãã«ãŒãµããŒããå°çãããŸã§ãåŸã§ç°¡åã«åé€ã§ããDockerã¬ãã«ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšã§ããŸãïŒ https ïŒ
Dockerãœã±ãããšæšæºã®kubernetesã©ãã«ãããŠã³ããããç¹æš©ã³ã³ãããŒã䜿çšããŠããžã§ãå ã®ã³ã³ãããŒã管çããŸãã
Istioãšãã®ãµã€ãã«ãŒã§ãåãåé¡ãçºçããŠããŸãããããã®ããã«curl + preStopããã¯ã䜿çšããŠããããåé€ããããšã«ããŸããã
ãã®ãããªæå°éã®RBACã«ãŒã«ãä»äºã«äžãã
apiVersion: v1
kind: ServiceAccount
metadata:
name: myservice-job
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: myservice-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["delete"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: myservice-job-rolebinding
subjects:
- kind: ServiceAccount
name: myservice-job
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: myservice-role
ãããŠPOD_NAME
ãšPOD_NAMESPACE
ãããªãã®ENVã«ãã®ããã«
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
æåŸã«ã次ã®ãããªpreStopããã¯ãè¿œå ããŸã
lifecycle:
preStop:
exec:
command:
- "/bin/bash"
- "-c"
- "curl -X DELETE -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://$KUBERNETES_SERVICE_HOST/api/v1/namespaces/$POD_NAMESPACE/pods/$POD_NAME?gracePeriodSeconds=1"
ã¡ãã£ãšé¢åã§ãããé©åãªDockerã³ã³ããã殺ãããšãããããå°ãå®å šã§æ°ãŸããã§ã¯ãããŸããã
ãããããã«æããã ãã§ãããå®è¡äžã®ãããã®å€æŽãç£èŠããããã®ã³ã³ãããŒã©ãŒããã°ããåã«äžç·ã«æããSIGTERMããµã€ãã«ãŒã³ã³ãããŒã«é©åã«éä¿¡ããŸããã ããã¯ééããªãæãå ç¢ã§ã¯ãããŸããããããŠæ£çŽãªãšããç§ã¯ããããã°ãã䜿çšããŠããŸããããå©ãã«ãªããããããŸããã
ClusterIP
ãµãŒãã¹ã䜿çšãããããã€ãšããŠcloud_sql_proxy
ãå®è¡ããããææ¡ããŠãããã httpsïŒ //github.com/kubernetes/kubernetes/issues/25908#issuecomment-371469801ã®@jpalomakiãš@ã§https://github.com/kubernetes/kubernetes/issues/25908#issuecommentèšå®ã®ãã³ãã«ã€ããŠ-364255363 tcp:0.0.0.0
ã§cloud_sql_proxy
instances
ãã©ã¡ãŒã¿ãèš±å¯ããé-ããã»ã¹ãžã®ããŒã«ã«æ¥ç¶ã ããããçµã¿åãããããšã§ãcronãžã§ãã«ãããã·ã䜿çšãããã®ã¯ç°¡åã«ãªããŸããã
é·æçãªåé¡ïŒèªå·±ã¡ã¢ïŒ
åãåé¡ã Cloud SQL
GKE
cronãžã§ãã䜿çšããæ¹æ³ã«é¢ããæ¹æ³ãŸãã¯å
¬åŒããã¥ã¡ã³ããæ¢ããŠããŸã
ãµã€ãããŒãïŒ
Googleã¯ã¯ã©ãŠãSQLãæŽæ°- > Googleã®Kubernetesãšã³ãžã³ããã®æ¥ç¶ãããã¥ã¡ã³ãä»ã«å ããŠã Connecting using the Cloud SQL Proxy Docker image
ããããšãã§ããŸãConnecting using a private IP address
ãããã£ãŠãåãçç±ã§ããã«ããå ŽåïŒcloud_sql_proxyã®ããïŒããã©ã€ããŒãIPã®æ°æ©èœã䜿çšã§ããããã«ãªããŸã
ãµã€ãããŒãïŒ
Googleã¯ã¯ã©ãŠãSQLãæŽæ°- > Googleã®Kubernetesãšã³ãžã³ããã®æ¥ç¶ãããã¥ã¡ã³ãä»ã«å ããŠãConnecting using the Cloud SQL Proxy Docker image
ããããšãã§ããŸãConnecting using a private IP address
ãããã£ãŠãåãçç±ã§ããã«ããå ŽåïŒcloud_sql_proxyã®ããïŒããã©ã€ããŒãIPã®æ°æ©èœã䜿çšã§ããããã«ãªããŸã
ãã©ã€ããŒãIPæ©èœã¯ãã¯ã©ã¹ã¿ãŒå šäœãåé€ããŠåäœæããå¿ èŠãããããã§ã........ïŒ
@cropseããã¯ãã¯ã©ã¹ã¿ãŒãVPCãã€ãã£ãã§ãªãå Žåã«ã®ã¿å¿ èŠã§ãã
ç§ã¯ãã®åé¡ã®åé¿çãäœæããŸããããåªãã解決çã§ã¯ãããŸããã§ããããæ©èœãè¿œå ãããåã«ãã®ãã«ãã圹ç«ã€ããšãé¡ã£ãŠããŸããVPCã¯äººæ°ã®ããæ¹æ³ã®1ã€ã§ãããã¯ã©ã¹ã¿ãŒå šäœãåé€ããã®ã¯äŸç¶ãšããŠèŠçã§ãã
ç§ã®2ã»ã³ããè¿œå ããã ãã§ããããããå®äºããªããããistioãµã€ãã«ãŒã®æ³šå ¥ãçºçããå Žåããã«ã ãã¹ãã倱æããŸãã
@dansiviterããªãã¯ç§ã®åé¿çããã§ãã¯ããããšãã§ããŸããç§ã¯ãã§ã«ç§ã®ãããžã§ã¯ãã§èµããšã£ãŠãã¹ãããŸããã
ãããå®è£ ãããã®ã楜ãã¿ã«ããŠããŸãïŒ :)
Istioãããã·ã泚å
¥ãããå Žåãéåžžã®ãžã§ãã§ãåãåé¡ãçºçããŸãããã以äžã«ãProwã§CIãžã§ããå®è¡ããããããããå¿
èŠã§ãã
äŸïŒãã¹ãç®çã®Railsã¢ããªã³ã³ãããŒ+ãµã€ãã«ãŒããŒã¿ããŒã¹ã³ã³ãããŒã
@cropseããããšãã ãã¹ãŠã®ãã¹ãã§ãããæ§æããå¿ èŠããããããè©ŠããŠããŸããã ãããïŒãã«ã ãã¹ãã§ã¯æ®å¿µãªãããžã§ãã¯èš±å¯ãããŸããïŒã倱æããããšãèš±å¯ãããã®åé¡ãé·æçã«ä¿®æ£ããããŸã§ãã°ãæåã§æ€æ»ããããšã«äŸåããŠããŸãã ããããããã¯ä»ã®ãžã§ãã«ãšã£ãŠãåé¡ã«ãªãã€ã€ããã®ã§ãç§ãã¡ã¯ãã®ç«å Žãåèããå¿ èŠããããããããŸããã
åèãŸã§ã«ããã®æ©èœã®è¿œè·¡ã®åé¡ã¯ããã«ãããŸãhttps://github.com/kubernetes/enhancements/issues/753人ã ããã©ããŒãããå Žåã¯ãKEPããããããã€ãã®ãããã¿ã€ãã³ã°ãè¡ãããŸãïŒPOCãã©ã³ã/ãããªããããŸãïŒ ïŒãå®è£ å¯èœãªç¶æ ã«ãªãåã«ãå®è£ ã®è©³çŽ°ã®äžéšãä¿®æ£ããå¿ èŠããããŸãã
ãµã€ãããŒãïŒ
Googleã¯ã¯ã©ãŠãSQLãæŽæ°- > Googleã®Kubernetesãšã³ãžã³ããã®æ¥ç¶ãããã¥ã¡ã³ãä»ã«å ããŠãConnecting using the Cloud SQL Proxy Docker image
ããããšãã§ããŸãConnecting using a private IP address
ãããã£ãŠãåãçç±ã§ããã«ããå ŽåïŒcloud_sql_proxyã®ããïŒããã©ã€ããŒãIPã®æ°æ©èœã䜿çšã§ããããã«ãªããŸã
åãçç±ã§ç§ã¯ããã«ããŸãããããã®æ©èœã®æºåãæŽãåã«CloudSQLãããããžã§ãã³ã°ãããŸããã 以åã®ææ¡ãçµã¿åãããŠãdbmate migrator helmãã£ãŒãã«ãããïŒããããçæ³çã§ã¯ãããŸããããæ©èœããŸãïŒåºããŸããã
containers:
- name: migrator
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: ["/bin/bash", "-c"]
args:
- |
/cloud_sql_proxy -instances={{ .Values.gcp.project }}:{{ .Values.gcp.region }}:{{ .Values.gcp.cloudsql_database }}=tcp:5432 -credential_file=/secrets/cloudsql/credentials.json &
ensure_proxy_is_up.sh dbmate up
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: mysecret
key: DATABASE_URL
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
ensure_proxy_is_up.sh
#!/bin/bash
until pg_isready -d $(echo $DATABASE_URL); do
sleep 1
done
# run the command that was passed in
exec "$@"
Kubernetesã§ãµã€ãã«ãŒã³ã³ããã®æŠå¿µãç解ãããµã€ãã«ãŒä»¥å€ã®ã³ã³ãããçµäºãããã©ããã«åºã¥ããŠããããã¯ãªãŒã³ã¢ããã§ããããã«ããã®ã¯è¯ãææã§ããããïŒ
@Willuxç§ã¯é»è©±ã®
@krancourã¢ããããŒãããŠãããŠããããšãã ç§ã¯ãã®è©³çŽ°ãèŠéããã«éããããŸããã æè¿ããã§èµ·ãã£ãŠãã掻åã¯ããŸããªãã£ãã®ã§ãäœããé²è¡äžã§ããããšã確èªãããã£ãã ãã§ã:)
åèãŸã§ã«ãå ±æããªã¥ãŒã å ã®ãã¡ã€ã«ãç¶æ ããµã€ãã«ãŒã«äŒéãã@ jmillikin-stripeã®åé¿çã®cloud-sql-proxyãµã€ãã«ãŒããŒãžã§ã³ãäœæããŸããã
ããã¯åé¡ãªãåäœããŸãããç§ã®K8sæ§æã§æãåä»ãªããã¯ã§ã:(
apiVersion: batch/v1 kind: Job metadata: name: example-job spec: template: spec: containers: - name: example-job image: eu.gcr.io/example/example-job:latest command: ["/bin/sh", "-c"] args: - | trap "touch /tmp/pod/main-terminated" EXIT run-job.sh volumeMounts: - mountPath: /tmp/pod name: tmp-pod - name: cloudsql-proxy image: gcr.io/cloudsql-docker/gce-proxy:1.11 command: ["/bin/sh", "-c"] args: - | /cloud_sql_proxy --dir=/cloudsql -instances=example:europe-west3:example=tcp:3306 -credential_file=/secrets/cloudsql/credentials.json & CHILD_PID=$! (while true; do if [[ -f "/tmp/pod/main-terminated" ]]; then kill $CHILD_PID; echo "Killed $CHILD_PID as the main container terminated."; fi; sleep 1; done) & wait $CHILD_PID if [[ -f "/tmp/pod/main-terminated" ]]; then exit 0; echo "Job completed. Exiting..."; fi volumeMounts: - name: cloudsql-instance-credentials mountPath: /secrets/cloudsql readOnly: true - name: cloudsql mountPath: /cloudsql - mountPath: /tmp/pod name: tmp-pod readOnly: true restartPolicy: Never volumes: - name: cloudsql-instance-credentials secret: secretName: cloudsql-instance-credentials - name: cloudsql emptyDir: - name: tmp-pod emptyDir: {} backoffLimit: 1
ãããžã§ã¯ãã®å éšã®èª°ãããã®åé¡ã®é²æç¶æ³ã«ã€ããŠã³ã¡ã³ãã§ããŸããïŒ
ããããGKEã®å®å®ãããªãªãŒã¹ãã£ãã«ã«åãçµãã§ããç§ãã¡ã«ãšã£ãŠæè¯ã®ãªãã·ã§ã³ã§ãããšèããã®ã¯å ¬æ£ã§ããïŒå°ãªããšãæ°ãæã¯Kubernetes 1.18ã«è¿œãã€ããªãã§ãããã
@Datamanceãã®æç¹ã§ããã®åé¡ã«å¯ŸåŠããããã®KEPã¯ãç¡æéã«ä¿çãããŠããããã«èŠããŸãã
ç§ã¯ãã°ããåã«ãã®ã³ã¡ã³ããæçš¿ããŸãããããã¯ç§ã®å€ã解決çã§ããã ç§ã¯ããã«èªåã®ãã®ãããã·ã¥ããããšã¯ããŠããŸãããgithubã®ã100morecomments ...ãã§ãã®ã³ã¡ã³ãã倱ããããªãµãŒãã§ã·ã³ã°ãåã³åœ¹ç«ã€ãããããªããšèããŸããã
@nrmitchiåããããŸãã ç§ã¯ã³ã¡ã³ãã®æµ·ã§ãããèŠèœãšããŠãã人ã§ãããããã¯çŽ æŽãããçæçãªè§£æ±ºçã®ããã«èŠããŸãã
ãããã³ã³ããã«ä»¥äžãè¿œå ãããšãå¥ã®ã¢ãããŒããããããŸãã
securityContext: capabilities: add: - SYS_PTRACE
ãã®åŸãä»ã®ã³ã³ããã§Pidãgrepã§ããããã«ãªããŸããã¡ã€ã³ã®ã³ã³ããã®æåŸã§ã次ã®ããã«å®è¡ããŸãã
sql_proxy_pid=$(pgrep cloud_sql_proxy) && kill -INT $sql_proxy_pid
@krancourã¯ããã圹ã«ç«ã£ãããšãããããæããŸãã ãã®ãªããžããªå ã®ãããã¯ãŒã¯ãèŠããšãã»ãŒééããªãç§ã®å ã®å Žæãããè¯ãå Žæã«ããããã€ãã®ãã©ãŒã¯ãããããããåºã«æ§ç¯/䜿çšããæ¹ãè¯ããããããŸããã
IIRCã®lemonade-hqãã©ãŒã¯ã«ã¯ãããã€ãã®äŸ¿å©ãªè¿œå æ©èœããããŸããã
@nrmitchi ãç§ã¯ã³ãŒããã¡ãã£ãšèŠãŠããŸããããã ããªãã«å°ããæ¹ãéããããããŸãã...
READMEã«èšèŒãããŠããªãåææ¡ä»¶ãååšããå¯èœæ§ãããå Žåã¯ãç°¡åã«ã³ã¡ã³ãããŠããã ããŸããïŒ
ããšãã°ããµã€ãã«ãŒã®åºã«ãªã£ãŠããç»åã«ã¯ããã®åé¿çã«ã€ããŠç¹å¥ãªèªèãå¿ èŠã§ããïŒ ããšãã°ãã³ã³ãããŒã©ãŒããã®ä¿¡å·ãç¹å®ã®ããŒãã§ãªãã¹ã³ããå¿ èŠããããŸããïŒ ãŸãã¯ãç¹å®ã®ã·ã§ã«ãå«ããå¿ èŠããããŸãïŒbashïŒïŒ
@krancourãã®ãœãªã¥ãŒã·ã§ã³ã¯æ°å¹Žåã«äœæããããã®ã§ãããç§ã®èšæ¶ã¯å°ãéã³ãŠããå¯èœæ§ããããšããã¡ã¢ã§å¿çã®çœ®ããŸãã
åœæãåé¡ã®ã³ã³ãããåé¿çãæèããå¿ èŠããªãããã«èšèšãããŠããŸããã ç§ãã¡ã¯äž»ã«ãµã€ãã«ãŒã§ãµãŒãããŒãã£ã®ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠããïŒããšãã°ãã¹ãã©ã€ã/ããã¥ãŒã¯1ã€ã ã£ããšæããŸãïŒããã©ãŒã¯/å€æŽããããããŸããã§ããã
ãµã€ãã«ãŒã®å¯äžã®èŠä»¶ã¯ãSIGTERMä¿¡å·ãé©åã«ãªãã¹ã³ããŠãããã·ã£ããããŠã³ããããšã§ãã ãµã€ãã«ãŒã§å®è¡ãããŠãããµãŒãããŒãã£ã®ã³ãŒãã§ãå¥ã®ä¿¡å·ãäºæããŠåé¿ããå¿ èŠããã£ããšããåé¡ããã£ãããšãæãåºããŸãããå®éã«ã¯ãã³ã³ãããŒã©ãŒã¯éä¿¡ãããä¿¡å·ã®æå®ãèš±å¯ããå¿ èŠããããŸããïŒã€ãŸããSIGTERMã§ã¯ãªãSIGINTïŒã
ã³ã³ãããŒã©ã¯exec
ã䜿çšããŠãµã€ãã«ãŒã®ã¡ã€ã³ããã»ã¹ã«çŽæ¥ä¿¡å·ãéããããä¿¡å·ãããŒãã§ãªãã¹ã³ããå¿
èŠã¯ãããŸããã ã¯ã©ã€ã¢ã³ãã«ååšããªãã£ããããæ©èœãkubernetesã³ãŒãããã³ããŒããããšãã®IIRCã ããã¯çŸåšå
¬åŒã¯ã©ã€ã¢ã³ãã«ååšããããããæŽæ°ããå¿
èŠããããšæããŸãã
ãããã³ã³ããã«ä»¥äžãè¿œå ãããšãå¥ã®ã¢ãããŒããããããŸãã
securityContext: capabilities: add: - SYS_PTRACE
ãã®åŸãä»ã®ã³ã³ããã§Pidãgrepã§ããããã«ãªããŸããã¡ã€ã³ã®ã³ã³ããã®æåŸã§ã次ã®ããã«å®è¡ããŸãã
sql_proxy_pid=$(pgrep cloud_sql_proxy) && kill -INT $sql_proxy_pid
@ ruiyang2015ãã®ããã¯ãããããšãã
ãã ãã誰ãããããå®è£
ããŠããå Žåã¯ãã³ã³ããéã§ããã»ã¹nsãå
±æããããšã®æå³ãå¿
ã
@nrmitchi
execã䜿çšããŠãµã€ãã«ãŒã®ã¡ã€ã³ããã»ã¹ã«çŽæ¥ä¿¡å·ãéããŸã
ãããç§ãå°ããçç±ã®äžéšã§ã...å
·äœçã«ã¯ã FROM scratch
äœæãããã€ã¡ãŒãžã«åºã¥ãã³ã³ããã§ã¯ãããæ©èœããªãã®ã§ã¯ãªãããšæããŸãã
bashã«äŸåããŸãããå€æŽã§ããã¯ãã§ã
ãã¡ããã§ãããå®è¡ããŠããéããã³ã³ããã«ååšãããã€ããªã«åžžã«äŸåããŸããã¹ã¯ã©ããã³ã³ããã®å Žåã¯ãæ瀺çã«é 眮ãããã®ãé€ããŠãããã«ã¯äœããããŸããã ð€·ââ
ãã®å¶éããããããå®è¡äžã®ã³ã³ãããå®å šã«ä»»æã§ããããµãŒãããŒãã£ã«ãã£ãŠæå®ãããŠããå¯èœæ§ããããŠãŒã¹ã±ãŒã¹ã«ã¯ããã䜿çšã§ããŸããã ãããããããç§ãWindowsã³ã³ããã䜿çšããŠããŸãã
代ããã«ãç§ãäœã«èœã¡çãã®ãã«ã€ããŠèšåããŸãã ã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã«ã¯å€åéãããã§ãããããä»ã®èª°ãã®ãŠãŒã¹ã±ãŒã¹ããããåé¿ããã®ã«åå䌌ãŠããå Žåã«åããŠèšåããŠããŸã...
æåã«çµäºã¹ããŒã¿ã¹ãèšé²ããéããããã©ã€ããªãã³ã³ãããçµäºããããããåã«_åé€_ãããšããèŽ æ²¢ãããäœè£ããããŸãã ãããã£ãŠãæå®ãããïŒã¢ãããŒã·ã§ã³ãä»ããŠïŒã³ã³ãããŒã®å®äºãç£èŠãããã®æåãŸãã¯å€±æãæ¢ã«ããžã§ããã¹ããŒã¿ã¹ã远跡ããŠããããŒã¿ã¹ãã¢ã«èšé²ããŠãããããããå®å šã«åé€ããã³ã³ãããŒã©ãŒãäœæããããšã«ãªããŸãã
念ã®ããããããã®åé€ãå°ãé ãããŠãäžå€®ã®ãã°éçŽãéé·ãçºå°ããåã«ãã©ã€ããªã³ã³ããã®åºåã®æåŸã®æ°è¡ãååŸããå¯èœæ§ãæ倧åããã§ãããã
ãããŒãã³ãã§ãããäžéšã®äººã«ãšã£ãŠã¯ããŸããããããããŸããã
@krancourå®å šã«çå®ã çŸç¶ã§ã¯ãã³ã³ãããŒã©ãŒã¯ä»»æã®äœ¿çšããŒã¹ã§ã¯æ©èœããŸããã æ£çŽãªãšãããç§ã¯æ»ã£ãŠãä»ã®ã±ãŒã¹ããµããŒãããããã«å®è£ ã®äžéšãæœè±¡åããããšã¯ããŸããã§ãããåè¿°ã®KEPãããŒãžããããã®æ©èœã®å¿ èŠæ§ããªããªã£ããšæ¬åœã«æã£ãããã§ãã
ãã®åé¡ã¯4幎åã®ãã®ã§ãããKEPã¯ãŸã ã©ãã«ãè¡ããŸããããŸããæå 端ã®æè¡ã¯ãã¹ãŠã®ãšã³ããªãã€ã³ãã眮ãæããããããŒãªã€ã³ã©ã€ã³ã·ã§ã«ã¹ã¯ãªããã§ããããããæšæºãããã¯ïŒå ±æããªã¥ãŒã ã®å¢ç³ïŒãææåããããšã«ããŸããã ïŒå€æ®µéãã«ãã䜿çšããŠã³ã³ããã€ã¡ãŒãžã«ç°¡åã«ãã€ã¯ã§ããGoãã€ããªã«å€æããŸãã
https://github.com/karlkfi/kubexit
ããã䜿çšããããã€ãã®æ¹æ³ããããŸãïŒ
ç·šéïŒ v0.2.0ã¯ããèªçã®äŸåé¢ä¿ãïŒéå§ã®é 延ïŒãšãæ»ã®äŸåé¢ä¿ãïŒèªå·±çµäºïŒããµããŒãããããã«ãªããŸããã
ãã©ã€ããã€ã³ã¡ã³ãïŒããã¯https://github.com/kubernetes/enhancements/issues/753ãšãŸã£ããåãããã«èŠã
@vanzinã¯åã«
ããã®ç§ã®äœ¿çšäŸã¯ãVaultãCronJobãå®è¡ããããã®è³æ Œæ å ±ãæäŸããããšã§ãã ã¿ã¹ã¯ãå®äºãããšãVaultãµã€ãã«ãŒã¯ãžã§ããä¿çç¶æ ã§å®è¡ããããŸãŸã«ãªããç£èŠã·ã¹ãã ãäœããééã£ãŠãããšå€æããŸãã KEPã«äœãèµ·ãã£ãã®ãã¯æ®å¿µã§ãã
æãåèã«ãªãã³ã¡ã³ã
åèãŸã§ã«ããããç§ãæãŸãããµã€ãã«ãŒã®æ¯ãèããã·ãã¥ã¬ãŒãããããã«äœ¿çšããŠããããã·ã¥ããããã¹ã§ãïŒ