Kubernetes: ์ผ๊ด„ ์ž‘์—…์—์„œ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์ง€์›

์— ๋งŒ๋“  2016๋…„ 05์›” 19์ผ  ยท  116์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubernetes

์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์ข…๋ฃŒํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ๋ช…์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋กœ๊ทธ ๋˜๋Š” ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ๊ฐ™์€ ์ผ์ข…์˜ ์ง€์› ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‘ ๊ฐœ ์žˆ๋Š” ์ž‘์—…์„ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค.

์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ํ˜„์žฌ ์ž‘์—…์€ ๋‘ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๋Š” ์ฒซ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ์‹œ์ ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ๋‘ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ์ œ๋Œ€๋กœ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์งˆ๋ฌธ์€ ๋‘ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ Kubernetes๋ฅผ ๋” ์ž˜ ์ธ์‹ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ๋‹ต๋ณ€ ์—†์ด ์–ผ๋งˆ ์ „

@kubernetes/goog-control-plane @erictune

arebatch areworkload-apjob kinfeature lifecyclfrozen prioritimportant-longterm siapps sinode

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฐธ๊ณ ๋กœ ๋‹ค์Œ์€ ์›ํ•˜๋Š” ์‚ฌ์ด๋“œ์นด ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” bash madness์ž…๋‹ˆ๋‹ค.

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: {}

๋ชจ๋“  116 ๋Œ“๊ธ€

/๋ณด๊ฒฐ

๋˜ํ•œ ํฌ๋“œ๊ฐ€ ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ์ „์ฒด ์ž‘์—…์ด ์„ฑ๊ณต์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— http://stackoverflow.com/questions/36208211/sidecar-containers-in-kubernetes-jobs์— ์ œ์•ˆ๋œ ๋Œ€๋กœ ํ™œ์„ฑ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํฌ๋“œ๊ฐ€ 0์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  ์ž‘์—…์ด ์„ฑ๊ณต์„ ๊ฐ์ง€ํ•˜๋„๋ก ํ”„๋กœ๋ธŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—… ์„ฑ๊ณต ํ”„๋กœ๋ธŒ๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
ํ”„๋กœ๋ธŒ๊ฐ€ ์„ฑ๊ณต์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ํฌ๋“œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ์‹คํ–‰์„ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์ด ๋ฌด๋„ˆ์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์ฃผ๊ฐ€ ๋  ๊ฒƒ์ธ๊ฐ€?

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ํŠน์ • ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"์ „์ฒด ํฌ๋“œ์˜ ์„ฑ๊ณต" ๋˜๋Š” "์ „์ฒด ํฌ๋“œ์˜ ์‹คํŒจ"๋Š” ๋ชจ๋‘
์œ ์šฉํ•œ.

์ด๊ฒƒ์€ Pod ๊ฐ์ฒด์— ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ API๊ฐ€ ํฌ๊ฒŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

2016๋…„ 9์›” 22์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 1์‹œ 41๋ถ„์— Ming Fang [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

Job์ด ์ด๋ฅผ ํ”„๋กœ๋ธŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—… ์„ฑ๊ณต ํ”„๋กœ๋ธŒ๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
ํฌ๋“œ๊ฐ€ 0์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  ์„ฑ๊ณต์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๋ธŒ๊ฐ€ ์„ฑ๊ณต์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ํฌ๋“œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/25908#issuecomment -249021627,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AHuudjrpVtef6U35RWRlZr3mDKcCRo7oks5qsugRgaJpZM4IiqQH
.

@erictune ์ข‹์€ ์ง€์ ; ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์กฐ์‚ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌ๋“œ์˜ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ "์™„๋ฃŒ" ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋Š” ๋กœ๊ทธ ์ „๋‹ฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์œ„ํ•ด ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฐ•์ œ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌ๋“œ์˜ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ "์™„๋ฃŒ" ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋ณธ์ ์œผ๋กœ .spec.completions ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ฒซ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ ์ฝ”๋“œ 0์œผ๋กœ ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์—ฌ๊ธฐ ์—์„œ ์ž์„ธํžˆ ์„ค๋ช…๋œ ์ด ๋ฌธ์„œ ํฌ์ธํŠธ 3์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๊นŒ?

์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋Š” ๋กœ๊ทธ ์ „๋‹ฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์œ„ํ•ด ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฐ•์ œ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ด๊ฒƒ๋“ค์€ ์ง์—…์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” RS์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด๋ฉฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ท€ํ•˜์˜ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃจ๋Š” https://github.com/kubernetes/kubernetes/issues/17244 ๋ฐ https://github.com/kubernetes/kubernetes/issues/30243 ํ† ๋ก ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ณด๋‚ธ @soltysh ๋งํฌ, ํฌ์ธํŠธ 3์€ ์ปจํ…Œ์ด๋„ˆ ์™„์„ฑ์ด ์•„๋‹ˆ๋ผ ํฌ๋“œ ์™„์„ฑ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

๋‘ ์ปจํ…Œ์ด๋„ˆ๋Š” emptyDir์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฒซ ๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ๋Š” "์ง€๊ธˆ ์ข…๋ฃŒ ์ค‘์ž…๋‹ˆ๋‹ค" ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ์— ์“ฐ๊ณ  ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ๋•Œ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@erictune ์ด ์–‘๋™์ด์— ํ•ด๋‹นํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์‹์ ์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์•ˆ๋‚ดํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” client-go ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ ํฌ๋“œ์—์„œ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜์ž๋งˆ์ž ํฌ๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ๊ฒฐ๊ณผ ํŒŒ์ผ์ด ์†์‹ค๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์บก์ฒ˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

HostPath ๋ฅผ VolumeSource๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋กœ์ปฌ์—์„œ minikube๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ๋‚ด ์›Œํฌ์Šคํ…Œ์ด์…˜์— ์ €์žฅํ•˜๋ฉด ์ด ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ๊ถŒ์žฅ๋˜์ง€ ์•Š๊ณ  ํ”„๋กœ๋•์…˜ ์ปจํ…Œ์ด๋„ˆ์— ์ด์ƒ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ EmptyDir ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋˜ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŸ ์ž์ฒด์™€ ํ•จ๊ป˜ ์‚ญ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์บก์ฒ˜๊ฐ€ ์•ˆ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ ํŒจํ„ด๋„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ ํ•˜์‹ญ์‹œ์˜ค. ์ž‘์—…์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ํฌ๋“œ์—์„œ 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. 1 ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ž๋งˆ์ž ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์„ ํƒํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ฉ๋‹ˆ๊นŒ?

์ฒ˜์Œ์— 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—… ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด ๋ชจ๋“  ์ž‘์—…์„ ์ž์ฒด์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฆ‰, ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ณ  ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜๊ณ  ์•ก์„ธ์Šค/์ฝ๊ณ  ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

@anshumanbh ๋‹น์‹ ์—๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค:

  1. ์˜๊ตฌ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. 1๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ hostPath ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋ฏธ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์•Œ๋ ค์ง„ ์›๊ฒฉ ์œ„์น˜(s3, google ๋“œ๋ผ์ด๋ธŒ, dropbox), ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ณต์œ  โ€‹โ€‹๋“œ๋ผ์ด๋ธŒ์— ์—…๋กœ๋“œ

@soltysh ํŒŒ์ผ์ด ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ์™€ ๋น„๊ตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๋ฐฉ์‹์€ ๋ชจ๋“  ์‹คํ–‰์—์„œ github ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•œ ๋‹ค์Œ ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด diff๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œ๋กœ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜์—ฌ Github์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์•ก์„ธ์Šคํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ง์ด ๋ฉ๋‹ˆ๊นŒ?

@anshumanbh ์™„๋ฒฝํ•˜๊ฒŒ ๋ช…ํ™•ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ

@soltysh ๊ทธ๋ž˜์„œ ์œ„์—์„œ ์ œ์•ˆํ•œ ๋ชฉ๋ก์—์„œ ์˜ต์…˜ 3์œผ๋กœ ๊ฐ€๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒ์š”?

๋‚ด๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ž๋งˆ์ž ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ํŒŒ์ผ์ด ์†์‹ค๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ S3/Google ๋“œ๋ผ์ด๋ธŒ/Dropbox์™€ ๊ฐ™์€ ๊ณต์œ  ๋“œ๋ผ์ด๋ธŒ์— ์–ด๋–ป๊ฒŒ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ? ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์–ด๋”˜๊ฐ€์— ์ž๋™์œผ๋กœ ์—…๋กœ๋“œํ•˜๋„๋ก ์ž‘์—…์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ถˆํ–‰ํžˆ๋„ ๋จผ์ € ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ ํŒŒ์ผ์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋žฉํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—… ์ค‘์ธ ์ด๋ฏธ์ง€๊ฐ€ ์ด๋ฏธ ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ ๋ณต์‚ฌ ์ฝ”๋“œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ํ™•์žฅํ•˜์„ธ์š”.

@soltysh ๋„ค, ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ์งˆ๋ฌธ์€ - ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ณ (๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ) ์ด๋Ÿฌํ•œ ๋„๊ตฌ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋‚ด์žฅ๋œ ์—…๋กœ๋“œ ๋ถ€๋ถ„์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ œ ํ•ด๋‹น ๋ž˜ํผ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์—…๋กœ๋“œ ๋ถ€๋ถ„์œผ๋กœ ํ•ด๋‹น ๋„๊ตฌ ๊ฐ๊ฐ์„ ํ™•์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ž˜ํผ/ํ™•์žฅ์ž๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ž‘์„ฑํ•˜๊ณ  ๋ชจ๋“  ๋„๊ตฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์‚ฌ์ด๋“œ์นด ํŒจํ„ด์ด ์ €๋Ÿฌ๋ฉด ์•ˆ ์–ด์šธ๋ฆฌ๋‚˜์š”?

์˜ˆ, ๊ทธ๋Ÿด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ํฌ๋“œ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์•„์ด์˜ค. ํฌ๋“œ๋Š” ์ž‘์—… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ์ถœ๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์—…๋กœ๋“œํ•˜๋Š” ์ถ”๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์™€ ํ•จ๊ป˜ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๋ฏธ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋“œ๋Ÿฌ์šด ํ•‘ -- ์‚ฌ์ด๋“œ์นด ์ธ์‹์€ 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"]

์ฐธ๊ณ ๋กœ ๋‹ค์Œ์€ ์›ํ•˜๋Š” ์‚ฌ์ด๋“œ์นด ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” bash madness์ž…๋‹ˆ๋‹ค.

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: {}

๋‚˜๋Š” ๊ทธ ๋ฐ˜๋Œ€์˜ ์ œ์•ˆ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ "์‚ฌ์ด๋“œ์นด"๋กœ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Pod์˜ ๋งˆ์ง€๋ง‰ ๋น„ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด Pod๋Š” TERM์„ ์‚ฌ์ด๋“œ์นด๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jmillikin-stripe ๋‚˜๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด Pod์—์„œ ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์ข…์†์„ฑ์„ ๋„์ž…ํ•˜๋Š” ์›์น™์„ ๋”ฐ๋ฅด๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ†ตํ™”๋Š” @erictune ์œผ๋กœ

ํ•˜์ง€๋งŒ #17244๋ฅผ ํ™•์ธํ–ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์†”๋ฃจ์…˜์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ• ๊นŒ์š”? ์ด๊ฒƒ์€ @erictune ์ด ์ด์ „์— ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์„ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ํŠน์ • ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jmillikin-stripe ๋‚˜๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด Pod์—์„œ ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์ข…์†์„ฑ์„ ๋„์ž…ํ•˜๋Š” ์›์น™์„ ๋”ฐ๋ฅด๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ํ†ตํ™”๋Š” @erictune ์œผ๋กœ

Kubernetes๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์›์น™์— ๋Œ€ํ•ด ์œ ์—ฐํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ(Stripe)๋Š” Envoy์™€ ๊ฐ™์€ ํƒ€์‚ฌ ์ฝ”๋“œ๋ฅผ Lamprey ์Šคํƒ€์ผ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ ํ›„ํฌ๋ฅผ ๊ฐ–๋„๋ก ๊ฐœ์กฐํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ Envelope ์Šคํƒ€์ผ์˜ exec ๋ฐ˜์ „์„ ์ฑ„ํƒํ•˜๋ ค๋Š” ์‹œ๋„๋Š” Kubelet์ด ํŠน์ • ์‚ฌ์ด๋“œ์นด๋ฅผ ์ข…๋ฃŒํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ #17244๋ฅผ ํ™•์ธํ–ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์†”๋ฃจ์…˜์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ• ๊นŒ์š”? ์ด๊ฒƒ์€ @erictune ์ด ์ด์ „์— ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์„ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ํŠน์ • ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” Kubernetes ๋˜๋Š” Kubelet์ด "0 ๋˜๋Š” 0์ด ์•„๋‹Œ ๊ฒƒ"๋ณด๋‹ค ๋” ๋ฏธ์„ธํ•œ ๋‹จ์œ„๋กœ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋Š” ๊ฒƒ์— ๋งค์šฐ ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. Borglet์˜ ์ข…๋ฃŒ ์ฝ”๋“œ ๋งค์ง ๋ฒˆํ˜ธ ์‚ฌ์šฉ์€ ๋ถˆ์พŒํ•œ ์˜ค์ž‘๋™์ด์—ˆ๊ณ  ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค๋ฅธ ํŒŒ๋“œ์—์„œ "๋ฉ”์ธ" ๋˜๋Š” "์‚ฌ์ด๋“œ์นด"๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” Kubernetes์—์„œ๋Š” ํ›จ์”ฌ ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ˆ˜๋ช… ์ฃผ๊ธฐ ํ›„ํฌ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ• ๊นŒ์š”?

๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • PostStop: ํฌ๋“œ์˜ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ˆ˜๋‹จ(์˜ˆ: ํŠธ๋ฆฌ๊ฑฐ ์ค‘์ง€)
  • PeerStopped: ํฌ๋“œ์˜ "ํ”ผ์–ด" ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์—ˆ๋‹ค๋Š” ์‹ ํ˜ธ - ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

์ด๊ฒƒ์€ ๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์ •์ฑ…์„ ์ •์˜ํ•˜๋Š” ์ˆ˜๋‹จ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ์ž‘๋˜์ง€ ์•Š์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์˜ ์ผ๋ถ€ ๋ฐ์ด์ง€ ์ฒด์ธ์„ ํ—ˆ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์ปจํ…Œ์ด๋„ˆ a๊ฐ€ ๋๋‚˜๋ฉด ์ปจํ…Œ์ด๋„ˆ b ์‹œ์ž‘).

๋˜ํ•œ ์ด๊ฒƒ์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์„ ์œ„ํ•ด VPN ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…์„ 30๋ถ„๋งˆ๋‹ค ์‹คํ–‰ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์˜ˆ: kubectl ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•œ ํ•ญ๋ชฉ). ํ˜„์žฌ jobSpec.concurrencyPolicy: Replace ๋ฅผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ฌผ๋ก  ์ด๊ฒƒ์€ a.) ๋ณ‘๋ ฌ ์ž‘์—… ์‹คํ–‰ ์—†์ด ์‚ด ์ˆ˜ ์žˆ๊ณ  b.) ์ž‘์—… ์‹คํ–‰ ์‹œ๊ฐ„์ด ์˜ˆ์•ฝ ๊ฐ„๊ฒฉ๋ณด๋‹ค ์งง์€ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒ ์ƒํƒœ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์ž‘์—…์ด ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์ข…๋ฃŒํ•˜๋„๋ก ์ž‘์—… ์‚ฌ์–‘์— ์ผ๋ถ€ ์†์„ฑ์ด ์žˆ์œผ๋ฉด ์™„์ „ํžˆ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜ ์—ญ์‹œ ์ด๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” cloudsql-proxy ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์ด๋“œ์นด ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

ํฌ๋“œ์˜ '๊ธฐ๋ณธ' ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์— ๋งคํ•‘๋˜๋Š” ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํฌ๋“œ ์‚ฌ์–‘์„ ์–ด์จŒ๋“  ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํŒŒ๋“œ ์„ค๊ณ„ ๋ฐฉ์‹์˜ ํŠน์„ฑ์ƒ ์ด๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. @soltysh @erictune ๊ณง ์ž‘์—…ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ธฐ๊บผ์ด ๋„์™€์ฃผ์„ธ์š” :)

์ด ๊ธฐ๋Šฅ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€ :
ํฌ๋“œ A ๋Š” ์ปจํ…Œ์ด๋„ˆ์—

  • ์ปจํ…Œ์ด๋„ˆ A1 : ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์‹คํ–‰ ์™„๋ฃŒ ์ปจํ…Œ์ด๋„ˆ
  • ์ปจํ…Œ์ด๋„ˆ A2 : ํŒŒ์ผ์—์„œ stdout์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ถ”์ ํ•˜๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ : ์ปจํ…Œ์ด๋„ˆ A1 ์ด ์„ฑ๊ณต์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ํฌ๋“œ A ๊ฐ€ ์„ฑ๊ณต์œผ๋กœ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ A1 ์„ ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ๋กœ ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ํฌ๋“œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๊นŒ? @erictune (์ด ์•„์ด๋””์–ด๋Š” @mingfang ๋„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค)

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ด ๋ฌธ์ œ๊ฐ€ ๊ณต๊ฐœ๋œ ์ง€ ํ•œ ๋‹ฌ์ด ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ ค๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์€ ๋ช‡ ๊ฐœ์˜ ์‚ฌ์ด๋“œ์นด containers ๊ฐ€ ์žˆ๋Š” main ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. main ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. file ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— signal ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ตœ์‹  ๊ธฐ์ˆ ์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๊บผ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‚ด๊ฐ€ ํ•  ๊ฒฝ์šฐ(์•„๋งˆ๋„ kubecon ์ดํ›„) ํ–ฅํ›„ PR์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

cc @erictune @a-robinson @soltysh

@andrewsykim ์–ด๋–ค ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจ main ์ปจํ…Œ์ด๋„ˆ๋Š” ์‚ฌ์ด๋“œ์นด๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ๊นŒ์ง€ ์‹œ์ž‘๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ด๋“œ์นด๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ๊นŒ์ง€ ๋ฉ”์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ

main ์‚ฌ์ด๋“œ์นด๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ(๋˜๋Š” ์ค€๋น„ ํ”„๋กœ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ main ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. :)

๋‚˜๋Š” kubernetes API๋ฅผ ๊ฐ์‹œํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ์ฃผ์„์œผ๋กœ ์ž‘์—…์„ ์ข…๋ฃŒํ•˜๊ณ  ์ฃผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋œ ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ajbouh ์š”์ ์œผ๋กœ ๊ณต์œ ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ๊ฑฐ ์“ฐ๋ ค๊ณ ํ–ˆ๋Š”๋ฐ

@nrmitchi ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ yaml์˜ ์š”์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์…ธ ์Šคํฌ๋ฆฝํŠธ์ด์ง€๋งŒ ์‚ฌ์šฉํ•  API์™€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์–ป๋Š” ๋ฐฉ๋ฒ• ์ธก๋ฉด์—์„œ ์ข‹์€ ์ถœ๋ฐœ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://gist.github.com/ajbouh/79b3eb4833aa7b068de640c19060d126

@mrbobbytables์™€ ๋™์ผํ•œ Cloud SQL ํ”„๋ก์‹œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ SQL์— ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ ํ•ด๋‹น ํ”„๋ก์‹œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฏธ์นœ ํ•ดํ‚น ๋˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๊ธธ์€ ์žˆ์Šต๋‹ˆ๊นŒ?

image

@amaxwell01 Cloud SQL Proxy๊ฐ€ ์ด์— ๊ด€์—ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ Google์— ๋ฌธ์ œ๋ฅผ ์—ด์–ด ๋ณ„ํ‘œ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://issuetracker.google.com/issues/70746902 ๊ทธ ์ˆœ๊ฐ„์˜ ์—ด๊ธฐ ์†์—์„œ ๊ฑฐ๊ธฐ์—; ๋ถˆํ–‰ํžˆ๋„ ๊ทธ๊ฒƒ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค)

@abevoelker ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ ๊ท€ํ•˜์˜ ๊ฒŒ์‹œ๋ฌผ์„

์šฐ๋ฆฌ๋„ ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—๋Š” k8s cronjob์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž‘์—… ์™„๋ฃŒ ์‹œ ์ค‘์ง€๋˜์ง€ ์•Š๋Š” cloudsqlproxy ์‚ฌ์ด๋“œ์นด๋กœ ์ธํ•ด ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ django ๊ด€๋ฆฌ ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์–ธ์ œ ์†”๋ฃจ์…˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ ํŒจํ„ด์€ โ€‹โ€‹์ ์  ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ k8s cronjob ๋ฐ ์ž‘์—…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์œ„ํ•ด ๋‚ด +1์„ ๋˜์ง€๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๊ณผ ๋™์ผํ•œ GCE Cloud SQL ํ”„๋ก์‹œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์ฃฝ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ... helm deploy ์‹คํŒจํ•˜๊ณ  ์ฐจ๋ก€๋กœ ๋‚ด terraform ์ ์šฉ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ•ด๊ฒฐ์ฑ…์„ ์ •๋ง๋กœ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค... ์  ์žฅ , ๊ทธ๊ฑด ํ•ดํ‚ค์ž…๋‹ˆ๋‹ค.

cloudsql-proxy ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ cloudsql-proxy ๋ฅผ DaemonSet์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ•ฉ๋‹ˆ๊นŒ? ์ œ ๊ฒฝ์šฐ์—๋Š” ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•œ ์˜๊ตฌ ๋ฐฐํฌ์™€ CronJob์ด ๋ชจ๋‘ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ณ„ ํฌ๋“œ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ๋Œ€์‹  ๋…ธ๋“œ๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋„ค,

์šฐ๋ฆฌ๋Š” cloudsql ํ”„๋ก์‹œ ์‚ฌ์ด๋“œ์นด๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ  ๋‹ค์Œ ํ’€์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
cloudsql ํ”„๋ก์‹œ๋Š” ์ค‘์•™ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ์œผ๋ฉฐ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ
ํ™•์žฅ์„ฑ๊ณผ ๋” ์‰ฌ์šด ๋ฐฐํฌ๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ๋ฌธ์ œ ์—†์ด ์ž‘์—…๊ณผ cronjob์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 2์›” 7์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 9:37, Rob Jackson ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

cloudsql-proxy๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ•ฉ๋‹ˆ๊นŒ?
cloudsql-proxy๋ฅผ DaemonSet์œผ๋กœ ์‹คํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์ง€์†์ ์œผ๋กœ
ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•œ ๋ฐฐํฌ ๋ฐ CronJob, ๋”ฐ๋ผ์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ณ„ ํฌ๋“œ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ๋Œ€์‹  ๋…ธ๋“œ๋‹น ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/kubernetes/kubernetes/issues/25908#issuecomment-363710890 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ACAWMwetx6gA_SrHL_RRbTMJVOhW1FKLks5tSW7JgaJpZM4IiqQH
.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ deamonset์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @RJacksonm1 & @devlounge - ๋ฐ๋ชฌ์…‹์„ ์‚ฌ์šฉํ•  ๋•Œ ํด๋ผ์šฐ๋“œ SQL ํ”„๋ก์‹œ ๊ฒ€์ƒ‰์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

ํŠธ๋ฆญ์„ ํ•  ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค ...
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 ์žˆ๋Š”์ง€ ํ™•์ธ spec.nodeName

@cvallance ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด DNS๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” DaemonSet์„ ๋…ธ์ถœํ•˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ธ cloudsql-proxy ์ธ์Šคํ„ด์Šค์™€ ํ†ต์‹ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์žฅํ•˜์ง€ ์•Š์ง€๋งŒ cloudsql-proxy ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์™€ ํ•จ๊ป˜ ํ™•์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค(์›๋ž˜๋Š” ํ”„๋ก์‹œ๋ฅผ Deployment ๋ฐ HorizontalPodAutoscaler๋กœ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์ด ํ™•์žฅ/์ถ•์†Œํ•˜์—ฌ ์•ฑ์—์„œ 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

์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ž‘์—… ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์šฐ๋ ค๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์—๋„ ํฌ๋“œ๊ฐ€ ๊ณ„์† ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ํฌ๋“œ๋Š” ์ข…๋ฃŒ ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ€๊ณ  ๋…ธ๋“œ๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ๊ฒฐ์ •ํ•˜๋ฉด Job ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํฌ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์ข…๋ฃŒ๋œ ํฌ๋“œ ๋ ˆ์ฝ”๋“œ๊ฐ€ API ์„œ๋ฒ„์—์„œ ์œ ์ง€๋˜๋Š” ํ˜„์žฌ ๋™์ž‘๊ณผ๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค(๋…ธ๋“œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐจ์ง€ํ•˜์ง€ ์•Š์Œ).

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Pod API ์ˆ˜์ค€์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋” ๊น”๋”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋…ธ๋“œ๋Š” ๊ด€์‹ฌ ์žˆ๋Š” "์™„๋ฃŒ" ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ ์ข…๋ฃŒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ์— ๋„๋‹ฌํ•˜์—ฌ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐœ๋…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ๋“œ ์ˆ˜์ค€ API์˜ ํ˜•ํƒœ๋ฅผ ์ทจํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์—์ด์ „ํŠธ(์˜ˆ: ์ž‘์—… ์ปจํŠธ๋กค๋Ÿฌ)๊ฐ€ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํŒŒ๋“œ๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ํŒŒ๋“œ ์ˆ˜์ค€ API์˜ ํ˜•ํƒœ๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๋“œ.

๋˜ํ•œ ํ”„๋กœ์„ธ์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ k8s API๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•˜์—ฌ ์—…๋กœ๋“œ ๋˜๋Š” ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ• ์ง€ ์—ฌ๋ถ€์™€ ์‹œ๊ธฐ๋ฅผ ์•Œ๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•˜๋Š” @mingfang ์˜ ์ฃผ์žฅ์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ดํ‚น์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™” ์ปจํ…Œ์ด๋„ˆ๋กœ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ(๋” ์ด์ƒ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์ผ ํ•„์š”๊ฐ€ ์—†๋Š” ) ํ”„๋กœ์„ธ์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ํ›„์—๋งŒ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ์ฒ˜๋ฆฌ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ์ดˆ๊ธฐํ™” ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋” ์ปจํ…Œ์ด๋„ˆ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํŠนํžˆ ๋‚˜์œ ์ƒ๊ฐ์ด๋ผ๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ด๋“œ์นด๋ฅผ ์ผ๋ฅ˜ k8s ๊ฐœ๋…์œผ๋กœ ํ™๋ณดํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? Kubelet์€ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋กœ ํ‘œ์‹œ๋œ ๊ฒฝ์šฐ ํฌ๋“œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FWIW, Cloud SQL ํ”„๋ก์‹œ๋ฅผ ์ผ๋ฐ˜ ๋ฐฐํฌ( replicas: 1 )๋กœ ๋ฐฐํฌํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  Job ๋ฐ CronJob ๊ฐ€ type: ClusterIP ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค. ์ด์ œ ์ž‘์—…์ด ์ž˜ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๊ณต์‹์ ์ธ ์ž…์žฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

API์˜ ์ง€์›์„ ๋ฐ›์ง€ ์•Š์œผ๋ ค๋ฉด ์ตœ์†Œํ•œ ๋Œ€์ฒด ์†”๋ฃจ์…˜์„ ๊ณต์‹์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ์—๊ฒŒ ํ•‘์„ ๋ณด๋‚ด์•ผ ํ• ์ง€, ์–ด๋–ป๊ฒŒ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค...

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๊ฒƒ ์™ธ์—๋„ ์ „์ฒด Pod ์ƒํƒœ๊ฐ€ ๋ถ„๋ช…ํžˆ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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์˜ over Pod Ready ์ƒํƒœ๋ฅผ ์œ ๋„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ด Pod๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ Cloud SQL ํ”„๋ก์‹œ์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๋‹ค๋ฅธ ๊ณ ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๋ก  ์ž‘์—…์ด Cloud SQL์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์˜๊ตฌ ์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@yuriatgoogle ๊ฐ€์žฅ ์‰ฌ์šด ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ bash ๋ฐ emptyDir "๋งˆ๋ฒ•"์ž…๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/issues/25908#issuecomment -365924958

ํ•ดํ‚น์ด์ง€๋งŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @phidah๋ฅผ ๊ณต๊ฒฉํ•˜๋ ค๋Š” ์˜๋„๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์ด๊ฒƒ์„ ์›ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณต์‹์ ์ธ ์ง€์›์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ ์ž์‹ ์˜ ์‚ฌ์ด๋“œ์นด์™€ ์ž‘์—…์— ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด๋“œ์นด๊ฐ€ kube API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋“œ์— ์žˆ๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. completed ์‚ฌ์ด๋“œ์นด๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ์ด๋“œ์นด๊ฐ€ 1์„ ์ข…๋ฃŒํ•œ๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ์ด ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์—ฌ๊ธฐ์— ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/uswitch/vault-creds/blob/master/cmd/main.go#L132.

๊ณ ๋ฆด๋ผ์ฆˆ ๋…ธ๋ž˜ M1 A1 ์ƒ๊ฐ๋‚˜๋„ค...

์•ˆ๋…•ํ•˜์„ธ์š”? ์•ˆ๋…•ํ•˜์„ธ์š”? ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๊ฒฌ์ธ๋ ฅ์„ ์–ป์œผ์‹ญ์‹œ์˜ค. +1

๋”ฐ๋ผ์„œ ์—…์ŠคํŠธ๋ฆผ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. sidecar: true ์ž‘์„ฑ์ž @jmillikin-stripe
  2. @msperl์˜ ์ถ”๊ฐ€ ์ˆ˜๋ช… ์ฃผ๊ธฐ ํ›„ํฌ
  3. jobCompletedWith @jpalomaki ์ž‘์„ฑ

์‚ฌ์ด๋“œ์นด๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์†”๋ฃจ์…˜, ํ•ดํ‚น๋œ ๊ฒƒ(๊ทธ๋Ÿฌ๋‚˜ ์ž‘๋™ํ•จ):

  1. @phidah์˜ cloudsql-proxy ์‚ฌ์ด๋“œ์นด

์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ Kubernetes ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ์‘๋‹ต์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด kubernetes ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์•Œ๋ ค์ฃผ์„ธ์š”. ๊ฐ์‚ฌ ํ•ด์š”!

๋‚ด ๋ Œ๋”๋ง ์ž‘์—…์˜ stdout / stderr์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—…๋กœ๋“œํ•˜๋Š” ๋กœ๊ทธ ์—์ด์ „ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ธ ํ›„ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํฌ๋“œ์— ์—์ด์ „ํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ž‘์—…์ด ์ ˆ๋Œ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์œ„์— ์ œ์‹œ๋œ ์ œ์•ˆ ์ค‘์—์„œ ์ €๋Š” 'sidecar: true'๊ฐ€ ๊ฐ€์žฅ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์ € ๊ฐ™์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งค์šฐ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๊ฐ„๋‹จํ•˜๊ณ  ์š”์ ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. '์‚ฌ์ด๋“œ์นด'๋Š” ์‹ค์ œ๋กœ ๋‹จ์ˆœํ•œ ์ž‘์—… ์ด์ƒ์— ์ ์šฉ๋˜๊ณ  ์™„๋ฃŒ ์š”๊ตฌ ์‚ฌํ•ญ ์™ธ์— ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ํฌ๋“œ ๋””์ž์ธ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ถ€๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ž์ „๊ฑฐ ์ด๋™์„ ์šฉ์„œํ•œ๋‹ค๋ฉด, ์ด ์ž‘์—…์ด ์•„์ง ์‹คํ–‰ ์ค‘์ด๋”๋ผ๋„ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์•„๋งˆ๋„ 'ambient: true'์™€ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‹จ์–ด๋Š” '๋ณด์กฐ' ๋˜๋Š” '์ง€์›'์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์›Œํฌํ”Œ๋กœ(์—ฐ๊ฒฐ์„ ํ”„๋ก์‹œํ•˜๊ฑฐ๋‚˜ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ํฌ๋“œ์˜ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ํ›„์—๋Š” ๋ชฉ์ ์ด ์—†๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ)์— ๋Œ€ํ•ด ์ด ๋ฌธ์ œ๋„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ์ œ์•ˆ์€ ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ "์™„๋ฃŒ" ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ๋ฐ˜๋Œ€์˜ ์ œ์•ˆ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ "์‚ฌ์ด๋“œ์นด"๋กœ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Pod์˜ ๋งˆ์ง€๋ง‰ ๋น„ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด Pod๋Š” TERM์„ ์‚ฌ์ด๋“œ์นด๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜์˜ ์ด์ƒ์ ์ธ ์†”๋ฃจ์…˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. SIGTERM ๋Œ€์‹  SIGHUP์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ SIGHUP์˜ ์˜๋ฏธ๊ฐ€ ๊ด€๋ จ๋œ ์ •ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! - ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋‘˜ ์ค‘ ํ•˜๋‚˜์— ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Œ€๋กœ Kubernetes์—์„œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์‚ฌ์ด๋“œ์นด๊ฐ€ ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ Kubernetes ๊ด€๋ จ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—…์ŠคํŠธ๋ฆผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜๋™์œผ๋กœ ํŒจ์น˜ํ•˜๊ฑฐ๋‚˜ ์ข€๋น„ ํฌ๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋„๋ก ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•œ ์‚ฌ์ด๋“œ์นด๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™์œผ๋กœ ๊ฐœ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋†€์•„์š”. ๋‘˜ ๋‹ค ํŠนํžˆ ์ฆ๊ฒ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ํŒจ์น˜๋ฅผ ๊ธฐ๊บผ์ด ๋งŒ๋“ค๊ณ  ์‹ถ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ํŒŒํ—ค์น˜๊ธฐ ์ „์— @kubernetes/sig-apps-feature-requests์˜ ์ง€์นจ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํฌ๋“œ ์‚ฌ์–‘์— sidecar ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ๋ฉ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ์›ํ•œ๋‹ค๋Š” ํ™•์‹  ์—†์ด ํฌ๋“œ ์‚ฌ์–‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@andrewsykim ๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ž ์‹œ ๋™์•ˆ

๋‚ด ์ถ”๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ด ๋ฌธ์ œ๋Š” ๊ฑฐ์˜ 2๋…„ ๋™์•ˆ ์ฃผ๋ณ€์— ์žˆ์—ˆ๊ณ  ์‹ค์ œ๋กœ kubernetes ์ฝ”์–ด์—์„œ ๋งŽ์€ ๊ด€์‹ฌ์„ ๋Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Pod ์‚ฌ์–‘ ๋ณ€๊ฒฝ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์ง์ ‘ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์•„๋งˆ ์˜ค๋žœ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ PR์€ ์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ณด๋‹ค ๊ด€์‹ฌ์„ ๋Œ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ๋‚˜์ค‘์— pod ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์„ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ๊ฐ ์˜ˆ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒ๊ฐ?

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด kubecon์˜ sig-apps ์ง์› ์ค‘ ์ผ๋ถ€์™€ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฆ‰๊ฐ์ ์ธ ๋กœ๋“œ๋งต์— ์—†๋Š” ๊ฒƒ์ด์ง€๋งŒ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด๊ฒƒ์„ ๋‹ค๋ฃจ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋งค์šฐ ๊ฐœ๋ฐฉ์ ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์„  ์ œ์•ˆ์„ ์œ„ํ•œ PR์„ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด https://github.com/kubernetes/community/pull/2148์— ๋Œ€ํ•œ ํ† ๋ก ์„ ์ผ์œผํ‚ค๊ธฐ๋ฅผ

@Joseph-Irving์„ ํ•จ๊ป˜ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด์— ๋Œ€ํ•ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ๋” ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ๊ทธ๋•Œ๊นŒ์ง€ ์ž‘์—…์„ ๋ณด๋ฅ˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :)

์ง€์†์ -์žฅ๊ธฐ์  ๋ฌธ์ œ :(

cc @ kow3ns @janetkuo

๋ฌธ์ œ๋ฅผ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ํ•„์š” ์—†์ด initContainers ์™€ ํ•จ๊ป˜ "์‚ฌ์ด๋“œ์นด" ์Šคํƒ€์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์—ฌ๊ธฐ ์‚ฌ๋žŒ๋“ค๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” initContainer์™€ ๋™์‹œ์— ํด๋ผ์šฐ๋“œ SQL ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. initContainers๊ฐ€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌ+์„œ๋น„์Šค๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณผ ์ˆ˜ ์—†์ง€๋งŒ ์ ์ ˆํ•œ ์ž‘์—…์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€(๋กœ๊ทธ ๊ด€๋ฆฌ ๋“ฑ)๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•ฝ.

@mcfedr ์ดˆ๊ธฐํ™” ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘์— ๋Œ€ํ•œ ๊ด€์ฐฐ์„ ๋†’์ด ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ ๊ทน์ ์ธ ๊ฐœ์„  ์ œ์•ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด ์ œ์•ˆ์˜ ๋ฒ”์œ„ ๋‚ด์ธ์ง€ ๋˜๋Š” ๊ด€๋ จ ๊ฐœ์„  ์‚ฌํ•ญ์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ณ ๋ ค ๋Œ€์ƒ์œผ๋กœ ์ œ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํžˆ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ž ์žฌ์ ์ธ ๊ตฌํ˜„/ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด์ƒ์ ์ธ ๋ชจ๋ธ์€ ์•„๋งˆ๋„ ์‚ฌ์ด๋“œ์นด ์ดˆ๊ธฐํ™” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜„์žฌ์™€ ๊ฐ™์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๊ณ„์† ์‹คํ–‰๋˜๋Š” ๋น„-์‚ฌ์ด๋“œ์นด ์ดˆ๊ธฐํ™” ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์‹œ์— ์‹คํ–‰๋˜๊ณ  ๋ฉ”์ธ ์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์‚ฌ์ด๋“œ์นด๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ๊ฐ€์น˜์— ๋Œ€ํ•ด CloudSQL Proxy et.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

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

CronJobs์—๋„ ๊ด€๋ จ์ด ์žˆ๊ณ  ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. https://github.com/GoogleCloudPlatform/cloudsql-proxy/issues/128#issuecomment -413444029

์—ฌ๊ธฐ์— ๊ฒŒ์‹œ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ ๋ฐฐํฌ์šฉ์ด๋ฏ€๋กœ 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 ๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ ๋”ฐ๋ผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์ด๋“œ์นด ์ง€์›์ด ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๋‚˜์ค‘์— ์‰ฝ๊ฒŒ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๋„์ปค ์ˆ˜์ค€ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://gist.github.com/janosroden/78725e3f846763aa3a660a6b2116c7da

๋งˆ์šดํŠธ๋œ ๋„์ปค ์†Œ์ผ“๊ณผ ํ‘œ์ค€ Kubernetes ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๊ถŒํ•œ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Istio์™€ ๊ทธ ์‚ฌ์ด๋“œ์นด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์—ˆ๊ณ , ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด curl + preStop hook์„ ํ†ตํ•ด ํฌ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ตœ์†Œํ•œ์˜ 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"

์ผ์ข…์˜ ์ง€์ €๋ถ„ํ•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฃฝ์ด๋Š” ๊ฒƒ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์•ˆ์ „ํ•˜๊ณ  ๋œ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ด๊ฒƒ์„ ๋˜์ง€๊ณ  ์žˆ์ง€๋งŒ ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  SIGTERM์„ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์— ์ ์ ˆํ•˜๊ฒŒ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์–ผ๋งˆ ์ „์— ํ•จ๊ป˜ ๋˜์กŒ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ ์†”์งํžˆ ํ•œ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/nrmitchi/k8s-controller-sidecars

์—์„œ @jpalomaki ๋•๋ถ„์— https://github.com/kubernetes/kubernetes/issues/25908#issuecomment ์ œ์•ˆ์— ๋Œ€ํ•œ -371469801 ์‹คํ–‰ํ•˜๊ธฐ cloud_sql_proxy ์™€ ๋ฐฐํฌ๋กœ ClusterIP , ๊ทธ๋ฆฌ๊ณ ์— ์„œ๋น„์Šค๋ฅผ @ cvallance ( https://github.com/kubernetes/kubernetes/issues/25908#issuecomment -364255363) cloud_sql_proxy instances ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ tcp:0.0.0.0 ์„ค์ •์— ๋Œ€ํ•œ ํŒ์„ -ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๋กœ์ปฌ ์—ฐ๊ฒฐ. ๊ทธ๊ฒƒ๋“ค์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด cron ์ž‘์—…์ด ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ๊ธฐ ๋ฌธ์ œ(์ž์‹ ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ)

๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Cloud SQL GKE cron ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ• ๋˜๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ:
๊ตฌ๊ธ€์€ ํด๋ผ์šฐ๋“œ SQL ์—…๋ฐ์ดํŠธ -> ๊ตฌ๊ธ€๋Š” Kubernetes ์—”์ง„์—์„œ ์—ฐ๊ฒฐ , ๋ฌธ์„œ ์ด์ œ ์ด์™ธ์— Connecting using the Cloud SQL Proxy Docker image ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Connecting using a private IP address
๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์—ฌ๊ธฐ ์žˆ๋‹ค๋ฉด(cloud_sql_proxy ๋•Œ๋ฌธ์—) ์ด์ œ ์‚ฌ์„ค IP์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ:
๊ตฌ๊ธ€์€ ํด๋ผ์šฐ๋“œ SQL ์—…๋ฐ์ดํŠธ -> ๊ตฌ๊ธ€๋Š” Kubernetes ์—”์ง„์—์„œ ์—ฐ๊ฒฐ , ๋ฌธ์„œ ์ด์ œ ์ด์™ธ์— Connecting using the Cloud SQL Proxy Docker image ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Connecting using a private IP address
๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์—ฌ๊ธฐ ์žˆ๋‹ค๋ฉด(cloud_sql_proxy ๋•Œ๋ฌธ์—) ์ด์ œ ์‚ฌ์„ค IP์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Private IP ๊ธฐ๋Šฅ์€ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค........?

@cropse ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ VPC ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์„ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ธฐ ์ „์— ์ด ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. VPC๋Š” โ€‹โ€‹์Šฌ๋ ˆ์ด๋ธŒ์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋‘ ์„ผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด: ํฌ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•„ istio ์‚ฌ์ด๋“œ์นด ์ฃผ์ž…์ด ๋ฐœ์ƒํ•˜๋ฉด ์กฐํƒ€ ์žฅ์น˜ ํ…Œ์ŠคํŠธ๋„ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

@dansiviter ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ตฌํ˜„๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค! :)

Istio ํ”„๋ก์‹œ๊ฐ€ ์ฃผ์ž…๋  ๋•Œ ์ผ๋ฐ˜ ์ž‘์—…๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ Prow๋กœ CI ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ: ํ…Œ์ŠคํŠธ ๋ชฉ์ ์„ ์œ„ํ•œ Rails ์•ฑ ์ปจํ…Œ์ด๋„ˆ + ์‚ฌ์ด๋“œ์นด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ.

@cropse ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ์ด๊ฒƒ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ Pod(์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ๋„ Helm ํ…Œ์ŠคํŠธ์—์„œ๋Š” Job์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ)๊ฐ€ ์‹คํŒจํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ  ์ด ๋ฌธ์ œ๊ฐ€ ์žฅ๊ธฐ์ ์œผ๋กœ ์ˆ˜์ •๋  ๋•Œ๊นŒ์ง€ ์ˆ˜๋™์œผ๋กœ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ ์žก์Šค์—๊ฒŒ๋„ ๋ฌธ์ œ๊ฐ€ ๋˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ทธ ์ž…์žฅ์„ ์žฌ๊ณ ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ๋Š” https://github.com/kubernetes/enhancements/issues/753์— ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋”ฐ๋ผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด KEP๊ฐ€ ์žˆ๊ณ  ์ผ๋ถ€ ํ”„๋กœํ† ํƒ€์ดํ•‘์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(POC ๋ถ„๊ธฐ/๋น„๋””์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ), ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์ „์— ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ:
๊ตฌ๊ธ€์€ ํด๋ผ์šฐ๋“œ SQL ์—…๋ฐ์ดํŠธ -> ๊ตฌ๊ธ€๋Š” Kubernetes ์—”์ง„์—์„œ ์—ฐ๊ฒฐ , ๋ฌธ์„œ ์ด์ œ ์ด์™ธ์— Connecting using the Cloud SQL Proxy Docker image ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Connecting using a private IP address
๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์—ฌ๊ธฐ ์žˆ๋‹ค๋ฉด(cloud_sql_proxy ๋•Œ๋ฌธ์—) ์ด์ œ ์‚ฌ์„ค IP์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ์ด์œ ๋กœ ์—ฌ๊ธฐ์— ์™”์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์ด ์ค€๋น„๋˜๊ธฐ ์ „์— Cloud SQL์ด ํ”„๋กœ๋น„์ €๋‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด์ „ ์ œ์•ˆ์„ ๊ฒฐํ•ฉํ•˜๊ณ  ๋‚ด 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 ์ €๋Š” atm์— ์ „ํ™”๋ฅผ ํ•˜๊ณ  ์žˆ์–ด์„œ ์ฐธ๊ณ ํ•  ๋งํฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์ง€๋งŒ, ๋ฐฉ๊ธˆ ์ œ์•ˆํ•˜์‹  ๋‚ด์šฉ์€ ์ด๋ฏธ ์ž˜ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@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

ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฌธ์ œ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ์•„๋งˆ๋„ ์ตœ์†Œํ•œ ๋ช‡ ๋‹ฌ ๋™์•ˆ Kubernetes 1.18์„ ๋”ฐ๋ผ์žก์ง€ ๋ชปํ•  GKE์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์—์„œ ์ž‘์—…ํ•˜๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์ตœ๊ณ ์˜ ์˜ต์…˜์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ณต์ •ํ•ฉ๋‹ˆ๊นŒ?

@Datamance ์ด ์‹œ์ ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ KEP ๋Š” ๋ฌด๊ธฐํ•œ ๋ณด๋ฅ˜๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค .

๋‚˜๋Š” ์–ผ๋งˆ ์ „์— ์ด ๋Œ“๊ธ€์„ ๊ฒŒ์‹œํ–ˆ๋Š”๋ฐ, ์ด๋Š” ๋‚ด ์˜ค๋ž˜๋œ ์†”๋ฃจ์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ์ž์‹ ์˜ ๊ฒƒ์„ ์—ฌ๊ธฐ์— ๋ฐ€์–ด ๋„ฃ์œผ๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ github์˜ "100 more comments..."์—์„œ ํ•ด๋‹น ๋Œ“๊ธ€์ด ์†์‹ค๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์‹œ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ๋‹ค์‹œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@nrmitchi ๋‹ค์‹œ ๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ“๊ธ€์˜ ๋ฐ”๋‹ค์—์„œ ๊ทธ๊ฒƒ์„ ๊ฐ„๊ณผํ–ˆ๋˜ ์‚ฌ๋žŒ์ด๋ฉฐ ์ด๊ฒƒ์€ ํ™˜์ƒ์ ์ธ ๋‹จ๊ธฐ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

Pod ์ปจํ…Œ์ด๋„ˆ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค.

    securityContext:
            capabilities:
                   add:
                    - SYS_PTRACE

๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ Pid๋ฅผ grepํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ๋์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
sql_proxy_pid=$(pgrep cloud_sql_proxy) && kill -INT $sql_proxy_pid

@krancour ๋„์›€์ด ๋˜์—ˆ๋‹ค

IIRC ๋ ˆ๋ชจ๋„ค์ด๋“œ-HQ ํฌํฌ ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@nrmitchi , ๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ํ˜๋— ๋ณด์•˜์ง€๋งŒ ๋‹น์‹ ์—๊ฒŒ ๋ฌป๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ...

README์— ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ์ „์ œ ์กฐ๊ฑด์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์–ธ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์ด๋“œ์นด์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์ด๋ฏธ์ง€์— ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ธ์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ์ปจํŠธ๋กค๋Ÿฌ์˜ ์‹ ํ˜ธ์— ๋Œ€ํ•ด ํŠน์ • ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํŠน์ • ์‰˜(bash?)์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@krancour ์ด ์†”๋ฃจ์…˜์€ ๋ช‡ ๋…„ ์ „์— ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋‚ด ๊ธฐ์–ต์ด ์•ฝ๊ฐ„ ๋…น์Šฌ ์„œ๋‘์— ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋‹น์‹œ์— ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์ด๋“œ์นด์—์„œ ์ฃผ๋กœ ํƒ€์‚ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ (์˜ˆ: ์ŠคํŠธ๋ผ์ดํ”„/๋ฒ ๋„ˆ ๊ฐ€ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ๋ถ„๊ธฐ/์ˆ˜์ •์„ ์›ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์‚ฌ์ด๋“œ์นด์˜ ์œ ์ผํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ SIGTERM ์‹ ํ˜ธ๋ฅผ ์ œ๋Œ€๋กœ ์ˆ˜์‹ ํ•œ ๋‹ค์Œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹ ํ˜ธ๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ๋˜ ์‚ฌ์ด๋“œ์นด์—์„œ ์‹คํ–‰๋˜๋Š” ํƒ€์‚ฌ ์ฝ”๋“œ์— ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ „์†ก๋œ ์‹ ํ˜ธ๋ฅผ ์ง€์ •ํ•˜๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, SIGTERM ๋Œ€์‹  SIGINT).

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ exec ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์ด๋“œ์นด์˜ ์ฃผ์š” ํ”„๋กœ์„ธ์Šค์— ์ง์ ‘ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ ํ˜ธ๋ฅผ ์œ„ํ•ด ํฌํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ธฐ๋Šฅ์ด ํด๋ผ์ด์–ธํŠธ์— ์กด์žฌํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— kubernetes ์ฝ”๋“œ์—์„œ ๋ณต์‚ฌ๋œ ์‹œ์ ์˜ IIRC์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ˜„์žฌ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์— ์กด์žฌํ•˜๋ฉฐ ์•„๋งˆ๋„ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Pod ์ปจํ…Œ์ด๋„ˆ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค.

    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 ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@krancour ๊ณต์ •ํ•œ ์š”์ , ๋‚˜๋Š” scratch ๋–จ์–ด์ ธ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฐ€์„œ ํ…Œ์ŠคํŠธ ํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ(๋˜๋Š” ๋‚ด ์›๋ž˜ ๋ฒ„์ „, ํฌํฌ์—์„œ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Œ)๋ฅผ ๋ณด๋ฉด bash ์— ์ข…์†๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

bash์— ์˜์กดํ•  ๊ฒƒ์ด์ง€๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก , ํ•˜์ง€๋งŒ ์‹คํ–‰๋˜๋Š” ํ•œ ํ•ญ์ƒ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ์ผ๋ถ€ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ข…์†๋˜๊ณ  ์Šคํฌ๋ž˜์น˜ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ ๊ฑฐ๊ธฐ์— ๋„ฃ๋Š” ๊ฒƒ ์™ธ์—๋Š” _์•„๋ฌด๊ฒƒ๋„_ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿคทโ€โ™‚

์ด๋Ÿฌํ•œ ์ œํ•œ ์‚ฌํ•ญ์„ ๊ฐ์•ˆํ•  ๋•Œ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™„์ „ํžˆ ์ž„์˜์ ์ด๊ณ  ์ œ3์ž๊ฐ€ ์ง€์ •ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„, ๊ทธ๋ฆฌ๊ณ  Windows ์ปจํ…Œ์ด๋„ˆ๋„ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋Œ€์‹  ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋Š” ๋„ˆ๋ฌด ๋ฌด๊ฒ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋‚˜์™€ ๋น„์Šทํ•œ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ๋จผ์ € ๊ธฐ๋กํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด "๊ธฐ๋ณธ" ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋œ ํฌ๋“œ๋ฅผ ๋‹จ์ˆœํžˆ _์‚ญ์ œ_ํ•˜๋Š” ์‚ฌ์น˜๋ฅผ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์™„๋ฃŒ๋ฅผ ์œ„ํ•ด ์ผ๋ถ€ ์ง€์ •๋œ(์ฃผ์„์„ ํ†ตํ•ด) ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ์ด๋ฏธ "์ž‘์—…" ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ๋ฅผ ๊ธฐ๋กํ•œ ๋‹ค์Œ, ํฌ๋“œ๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์ธก์ •์„ ์œ„ํ•ด, ์–ด๋ขฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ์ถœ๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ๋ช‡ ์ค„์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ค‘์•™ ๋กœ๊ทธ ์ง‘๊ณ„์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํฌ๋“œ ์‚ญ์ œ์— ์•ฝ๊ฐ„์˜ ์ง€์—ฐ์„ ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌด๊ฒ์ง€๋งŒ ์ผ๋ถ€์—๊ฒŒ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@krancour ์™„์ „ํžˆ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž„์˜์˜ ์‚ฌ์šฉ ๊ธฐ๋ฐ˜์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ์ €๋Š” ์ด์ „์— ์–ธ๊ธ‰ํ•œ KEP๊ฐ€ ๋ณ‘ํ•ฉ๋˜์–ด ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ๋ฌด์˜๋ฏธํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ด๋ผ๊ณ  ์ •๋ง๋กœ ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„์˜ ์ผ๋ถ€๋ฅผ ์ถ”์ƒํ™”ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ 4๋…„ ์ „์˜ ์ผ์ด๊ณ  KEP๊ฐ€ ์•„์ง ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š์•˜๊ณ  ์ตœ์‹  ๊ธฐ์ˆ ์ด ๋ชจ๋“  ์ง„์ž…์ ์„ ๋Œ€์ฒดํ•˜๋Š” ํ•ดํ‚น ์ธ๋ผ์ธ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ "ํ‘œ์ค€" ํ•ต(๊ณต์œ  ๋ณผ๋ฅจ์˜ ์‚ญ์ œ ํ‘œ์‹œ)์„ ์„ฑ๋ฌธํ™”ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ) ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ์‰ฝ๊ฒŒ ๊ตฌ์šธ ์ˆ˜ ์žˆ๋Š” Go ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ.

https://github.com/karlkfi/kubexit

๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹น์‹ ์˜ ์ด๋ฏธ์ง€์— ๊ตฝ๊ธฐ
  2. init ์ปจํ…Œ์ด๋„ˆ์™€ ์ž„์‹œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์ด๋“œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ ๋…ธ๋“œ์— ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์— ์‚ฌ์ด๋“œ ๋กœ๋“œ

ํŽธ์ง‘: v0.2.0์€ ์ด์ œ "์ถœ์ƒ ์ข…์†์„ฑ"(์ง€์—ฐ๋œ ์‹œ์ž‘) ๋ฐ "์‚ฌ๋ง ์ข…์†์„ฑ"(์ž์ฒด ์ข…๋ฃŒ)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋“œ๋ผ์ด๋ธŒ ๋ฐ”์ด ์ฝ”๋ฉ˜ํŠธ: https://github.com/kubernetes/enhancements/issues/753 ๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@vanzin ์€ KEP๊ฐ€ ๋ฌด๊ธฐํ•œ ๋ณด๋ฅ˜ ์ค‘์ด๋ผ๊ณ  ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค .

์ด์— ๋Œ€ํ•œ ๋‚˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” Vault๊ฐ€ CronJob์„ ์‹คํ–‰ํ•  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด Vault ์‚ฌ์ด๋“œ์นด๋Š” ๋ณด๋ฅ˜ ์ƒํƒœ์˜ ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๊ณ„์† ์‹คํ–‰๋˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. KEP์— ์ผ์–ด๋‚œ ์ผ์€ ์œ ๊ฐ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰