์์ ์ ์ํํ ๋ค์ ์ข ๋ฃํ๋ ์ปจํ ์ด๋์ ๋ช ์์ ์ผ๋ก ์ข ๋ฃ๋๋๋ก ์ค๊ณ๋์ง ์์์ง๋ง ๋ก๊ทธ ๋๋ ๋ฉํธ๋ฆญ ์์ง๊ณผ ๊ฐ์ ์ผ์ข ์ ์ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ปจํ ์ด๋๊ฐ ๋ ๊ฐ ์๋ ์์ ์ ์๊ฐํด ๋ณด์ญ์์ค.
์ด์ ๊ฐ์ ์์ ์ ์ํํ๊ธฐ ์ํด ์ด๋ค ์ต์ ์ด ์์ต๋๊น? ์ด๋ค ์ต์ ์ด ์์ด์ผ ํฉ๋๊น?
ํ์ฌ ์์ ์ ๋ ๋ฒ์งธ ์ปจํ ์ด๋๊ฐ ๊ณ์ ์คํ๋๋ ๋์ ๊ณ์ ์คํ๋ฉ๋๋ค. ์ฆ, ์ฌ์ฉ์๋ ์ฒซ ๋ฒ์งธ ์ปจํ ์ด๋๊ฐ ์๋ฃ๋๋ ์์ ์ ๊ฐ์งํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๋ ๋ฒ์งธ ์ปจํ ์ด๋๋ฅผ ์์ ํด์ผ ์ ๋๋ก ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
์ด ์ง๋ฌธ์ ๋ ๋ฒ์งธ ์ปจํ ์ด๋๋ฅผ Kubernetes๋ฅผ ๋ ์ ์ธ์ํ๋๋ก ์์ ํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ ๋ต๋ณ ์์ด ์ผ๋ง ์
@kubernetes/goog-control-plane @erictune
/๋ณด๊ฒฐ
๋ํ ํฌ๋๊ฐ ์คํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ณ ์ ์ฒด ์์ ์ด ์ฑ๊ณต์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ง ์๊ธฐ ๋๋ฌธ์ 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 ๋น์ ์๊ฒ ์ ์ํฉ๋๋ค:
hostPath
๋ง์ดํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ฏธ ์๋ํ์ต๋๋ค.@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์์๋ ํจ์ฌ ๋ ๋์ฉ๋๋ค.
์ถ๊ฐ ์๋ช ์ฃผ๊ธฐ ํํฌ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ ์ถฉ๋ถํ ๊น์?
๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์ปจํ ์ด๋๋ฅผ ๋ค์ ์์ํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ์ ์ฑ ์ ์ ์ํ๋ ์๋จ์ ์ ์ํ ์ ์์ต๋๋ค. ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์๋์ง ์์ ์ปจํ ์ด๋๋ฅผ ์์ํ์ฌ ์ปจํ ์ด๋์ ์ผ๋ถ ๋ฐ์ด์ง ์ฒด์ธ์ ํ์ฉํ ์๋ ์์ต๋๋ค(์ปจํ ์ด๋ a๊ฐ ๋๋๋ฉด ์ปจํ ์ด๋ b ์์).
๋ํ ์ด๊ฒ์ ๋์น๊ณ ์์ต๋๋ค. ์ฐ๊ฒฐ์ ์ํด VPN ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ์์
์ 30๋ถ๋ง๋ค ์คํํ์ง๋ง ์ด๊ฒ์ด ๋งค์ฐ ์ ์ฉํ ์ ์๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค(์: kubectl ํ๋ก์๊ฐ ํ์ํ ํญ๋ชฉ). ํ์ฌ jobSpec.concurrencyPolicy: Replace
๋ฅผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ฌผ๋ก ์ด๊ฒ์ a.) ๋ณ๋ ฌ ์์
์คํ ์์ด ์ด ์ ์๊ณ b.) ์์
์คํ ์๊ฐ์ด ์์ฝ ๊ฐ๊ฒฉ๋ณด๋ค ์งง์ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
ํธ์ง: ๋ด ์ฌ์ฉ ์ฌ๋ก์์๋ ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃ ์ํ๋ก ํ์ํ๊ณ ์์ ์ด ์ข ๋ฃ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋๋จธ์ง๋ฅผ ์ข ๋ฃํ๋๋ก ์์ ์ฌ์์ ์ผ๋ถ ์์ฑ์ด ์์ผ๋ฉด ์์ ํ ์ถฉ๋ถํ ๊ฒ์ ๋๋ค.
๋ ์ญ์ ์ด๊ฒ์ด ํ์ํ๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ cloudsql-proxy ์ปจํ ์ด๋๋ฅผ ์ฌ์ด๋์นด ์๋น์ค๋ก ์ฌ์ฉํ๋ ์์ ์ ๋๋ค.
ํฌ๋์ '๊ธฐ๋ณธ' ์ปจํ ์ด๋ ์ด๋ฆ์ ๋งคํ๋๋ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ๊ทธ๋ ๊ฒ ํ๋ฉด ํฌ๋ ์ฌ์์ ์ด์จ๋ ์์ ํ ํ์๊ฐ ์์ต๋๋ค.
ํ๋ ์ค๊ณ ๋ฐฉ์์ ํน์ฑ์ ์ด๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ฒ๋ผ ๋ณด์ ๋๋ค. @soltysh @erictune ๊ณง ์์ ํ ๊ณํ์ด ์์ต๋๊น? ๊ฐ๋ฅํ๋ค๋ฉด ๊ธฐ๊บผ์ด ๋์์ฃผ์ธ์ :)
์ด ๊ธฐ๋ฅ๋ ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก :
ํฌ๋ A ๋ ์ปจํ
์ด๋์
๋ด๊ฐ ์ํ๋ ๊ฒ : ์ปจํ ์ด๋ 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์ ์์ ํ๊ฒ ์ฐ๊ฒฐํ๋ ค๋ฉด ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง ์์ ์ด ์๋ฃ๋ ๋ ํด๋น ํ๋ก์๊ฐ ์ข ๋ฃ๋์ง ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฏธ์น ํดํน ๋๋ ๋ชจ๋ํฐ๋ง์ด ๋ฐ์ํฉ๋๋ค. ์์ผ๋ก ๋์๊ฐ ๊ธธ์ ์์ต๋๊น?
@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
๋ฐ๋ผ์ ์ ์คํธ๋ฆผ ๋ณ๊ฒฝ์ด ํ์ํ ์ ์๋ ์๋ฃจ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
sidecar: true
์์ฑ์ @jmillikin-stripejobCompletedWith
@jpalomaki ์์ฑ์ฌ์ด๋์นด๋ฅผ ์ํ ์์ ์๋ฃจ์ , ํดํน๋ ๊ฒ(๊ทธ๋ฌ๋ ์๋ํจ):
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 ๋๋ ์ด ๋ฌธ์ ๋ฅผ ์ ์ ๋์
๋ด ์ถ๋ก ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๊ฐ?
์๋ ํ์ธ์, ์ ๋ ์ด ๋ฌธ์ ์ ๋ํด 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์ ์ฌ์ด๋์นด ์ปจํ ์ด๋์ ์ ์ ํ๊ฒ ๋ณด๋ด๊ธฐ ์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ผ๋ง ์ ์ ํจ๊ป ๋์ก์ต๋๋ค. ํ์คํ ๊ฐ์ฅ ๊ฐ๋ ฅํ์ง๋ ์์ผ๋ฉฐ ์์งํ ํ๋์ ์ฌ์ฉํ์ง ์์์ง๋ง ๋์์ด ๋ ์ ์์ต๋๋ค.
์์ @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
๋ช ๊ฐ์ง ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
ํธ์ง: v0.2.0์ ์ด์ "์ถ์ ์ข ์์ฑ"(์ง์ฐ๋ ์์) ๋ฐ "์ฌ๋ง ์ข ์์ฑ"(์์ฒด ์ข ๋ฃ)์ ์ง์ํฉ๋๋ค.
๋๋ผ์ด๋ธ ๋ฐ์ด ์ฝ๋ฉํธ: https://github.com/kubernetes/enhancements/issues/753 ๊ณผ ์ ํํ ๊ฐ์ต๋๋ค.
@vanzin ์ KEP๊ฐ ๋ฌด๊ธฐํ ๋ณด๋ฅ ์ค์ด๋ผ๊ณ ์ด์ ์ ์ธ๊ธํ์ต๋๋ค .
์ด์ ๋ํ ๋์ ์ฌ์ฉ ์ฌ๋ก๋ Vault๊ฐ CronJob์ ์คํํ ์๊ฒฉ ์ฆ๋ช ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค. ์์ ์ด ์๋ฃ๋๋ฉด Vault ์ฌ์ด๋์นด๋ ๋ณด๋ฅ ์ํ์ ์์ ๊ณผ ํจ๊ป ๊ณ์ ์คํ๋๊ณ ๋ชจ๋ํฐ๋ง ์์คํ ์์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ๊ฒ ํฉ๋๋ค. KEP์ ์ผ์ด๋ ์ผ์ ์ ๊ฐ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฐธ๊ณ ๋ก ๋ค์์ ์ํ๋ ์ฌ์ด๋์นด ๋์์ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ bash madness์ ๋๋ค.