โ€œDevOps๋ฅผ ์œ„ํ•œ Kubernetesโ€ ์ฑ…

โ€œDevOps๋ฅผ ์œ„ํ•œ Kubernetesโ€ ์ฑ… ์•ˆ๋…•ํ•˜์„ธ์š”, ์นด๋ธŒ๋กœ ์ฃผ๋ฏผ ์—ฌ๋Ÿฌ๋ถ„! Kubernetes๋Š” ํ˜„๋Œ€ ํด๋ผ์šฐ๋“œ ์ƒํƒœ๊ณ„์˜ ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™”์— ์•ˆ์ •์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ํƒ„๋ ฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. John Arundel๊ณผ Justin Domingus๊ฐ€ Kubernetes ์ƒํƒœ๊ณ„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์ผ์ƒ์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž…์ฆ๋œ ์†”๋ฃจ์…˜์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ณ„๋กœ ์ž์‹ ๋งŒ์˜ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ์ธํ”„๋ผ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์—…์— ๋„์›€์ด ๋  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•œ ์ฑ…์ธ๊ฐ€?

์ด ์ฑ…์€ ์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์„œ๋น„์Šค๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ด€๋ฆฌ ๋ถ€์„œ์˜ ์ง์›์€ ๋ฌผ๋ก  ์ƒˆ๋กœ์šด ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Kubernetes ๋ฐ ํด๋ผ์šฐ๋“œ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ๊ด€๋ จ๋œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ๊ด€๋ จ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. Kubernetes๋‚˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€๋ฅด์ณ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ˆ™๋ จ๋œ Kubernetes ์‚ฌ์šฉ์ž๋Š” RBAC, ์ง€์†์ ์ธ ๋ฐฐํฌ, ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ๊ณผ ๊ฐ™์€ ์ฃผ์ œ์— ๋Œ€ํ•œ ์‹ฌ์ธต์ ์ธ ์„ค๋ช…์„ ํ†ตํ•ด ๋งŽ์€ ๊ฐ€์น˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์ˆ ๊ณผ ๊ฒฝํ—˜์— ๊ด€๊ณ„์—†์ด ์ฑ…์˜ ํŽ˜์ด์ง€์— ๊ท€ํ•˜์—๊ฒŒ ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์ด ํ™•์‹คํžˆ ํฌํ•จ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ์ฑ…์€ ์–ด๋–ค ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•ฉ๋‹ˆ๊นŒ?

์ฑ…์„ ๊ธฐํšํ•˜๊ณ  ์ง‘ํ•„ํ•˜๋Š” ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์ˆ˜๋ฐฑ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค๊ณผ ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ ๊ณผ Kubernetes์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์—…๊ณ„ ๋ฆฌ๋”์™€ ์ „๋ฌธ๊ฐ€๋Š” ๋ฌผ๋ก  ์™„์ „ ์ดˆ๋ณด์ž์™€๋„ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ด ๊ฐ„ํ–‰๋ฌผ์—์„œ ๋‹ต๋ณ€์„ ๋ณด๊ณ  ์‹ถ์€ ์„ ๋ณ„๋œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ๋ชจ๋“  ์งˆ๋ฌธ ์ค‘์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • โ€œํšŒ์‚ฌ์— ์ง€์žฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ Kubernetes๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?โ€

๋ฐœ์ทŒ. ๊ตฌ์„ฑ ๋ฐ ๋น„๋ฐ€ ๊ฐœ์ฒด

Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋…ผ๋ฆฌ๋ฅผ ํ•ด๋‹น ๊ตฌ์„ฑ(์ฆ‰, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๋‚˜ ์„ค์ •)์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๊ฐ’์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •, ํƒ€์‚ฌ ์„œ๋น„์Šค DNS ์ฃผ์†Œ ๋ฐ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

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

Kubernetes๋Š” ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ €, ํฌ๋“œ ๋ž˜ํผ ์‚ฌ์–‘์— ์ง€์ •๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(192ํŽ˜์ด์ง€์˜ "ํ™˜๊ฒฝ ๋ณ€์ˆ˜" ์ฐธ์กฐ). ๋‘˜์งธ, ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋Š” ConfigMap ๋ฐ Secret ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์— ์ง์ ‘ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์žฅ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ์ฒด๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ๋ฐ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‹œ ํฌ๋“œ ์…ธ ์—…๋ฐ์ดํŠธ

ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๊ฐ€ ์žˆ๊ณ  ํ•ด๋‹น ConfigMap์—์„œ ์ผ๋ถ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Helm ์ฐจํŠธ(102ํŽ˜์ด์ง€์˜ "Helm: Kubernetes์šฉ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž" ์ฐธ์กฐ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ํ•œ ๋ฒˆ์˜ ๊น”๋”ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํฌ๋“œ ์…ธ์„ ๋‹ค์‹œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ์‚ฌ์–‘์— ๋‹ค์Œ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

์ด์ œ ๋ฐฐํฌ ํ…œํ”Œ๋ฆฟ์—๋Š” ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ฒดํฌ์„ฌ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ•ฉ๊ณ„๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. helm ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Helm์€ ๋ฐฐํฌ ์‚ฌ์–‘์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋ชจ๋“  Pod ์…ธ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ

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

๋Œ€์‹  Kubernetes๋Š” ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋„๋ก ์„ค๊ณ„๋œ ํŠน๋ณ„ํ•œ ์œ ํ˜•์˜ ๊ฐ์ฒด์ธ Secret์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, ๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด Secret ๊ฐ์ฒด์— ๋Œ€ํ•œ Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”(hello-secret-env/k8s/secret.yaml ์ฐธ์กฐ).

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

์ด ์˜ˆ์—์„œ MagicWord ๊ฐœ์ธ ํ‚ค๋Š” xyzzy(en.wikipedia.org/wiki/Xyzzy_(computing))์ž…๋‹ˆ๋‹ค. xyzzy๋ผ๋Š” ๋‹จ์–ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํ“จํ„ฐ ์„ธ๊ณ„์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ConfigMap๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ Secret ๊ฐ์ฒด์— ์—ฌ๋Ÿฌ ํ‚ค์™€ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ํ•˜๋‚˜์˜ ํ‚ค-๊ฐ’ ์Œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€ ๊ฐœ์ฒด๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ

ConfigMap๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Secret ๊ฐ์ฒด๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” ๋””์Šคํฌ์˜ ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์—์„œ๋Š” Secret์˜ ๊ฐ’์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๋ฐ๋ชจ ์ €์žฅ์†Œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

์ด์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋กœ์ปฌ ํฌํŠธ๋ฅผ ๋ฐฐํฌ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

์ฃผ์†Œ๋ฅผ ์—ด ๋•Œ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ:9999/ ๋‹ค์Œ์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

The magic word is "xyzzy"

ํŒŒ์ผ์— ๋น„๋ฐ€ ๊ฐœ์ฒด ์“ฐ๊ธฐ

์ด ์˜ˆ์—์„œ๋Š” Secret ๊ฐœ์ฒด๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ํŒŒ์ผ๋กœ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ๋ฐ๋ชจ ์ €์žฅ์†Œ์˜ hello-secret-file ํด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค.

Secret์„ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ฐฐํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

ํŽ˜์ด์ง€์˜ "ConfigMap ๊ฐœ์ฒด์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ ์ƒ์„ฑ" ํ•˜์œ„ ์„น์…˜์—์„œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 240์—์„œ๋Š” ๋ณผ๋ฅจ(์ด ๊ฒฝ์šฐ์—๋Š” ๋ฐ๋ชจ-๋น„๋ฐ€ ๋ณผ๋ฅจ)์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์–‘์˜ VolumeMounts ์„น์…˜์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. mountPath ํ•„๋“œ๋Š” /secrets์ด๋ฏ€๋กœ Kubernetes๋Š” Secret ๊ฐ์ฒด์— ์ •์˜๋œ ๊ฐ ํ‚ค/๊ฐ’ ์Œ์— ๋Œ€ํ•ด ์ด ํด๋”์— ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์—์„œ๋Š” MagicWord๋ผ๋Š” ํ•˜๋‚˜์˜ ํ‚ค-๊ฐ’ ์Œ๋งŒ ์ •์˜ํ–ˆ์œผ๋ฏ€๋กœ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋‹จ์ผ ์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผ /secrets/magicWord๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ์˜ˆ์ œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๋ฉด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

The magic word is "xyzzy"

๋น„๋ฐ€ ๊ฐ์ฒด ์ฝ๊ธฐ

์ด์ „ ์„น์…˜์—์„œ๋Š” kubectl explain ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ConfigMap์˜ ๋‚ด์šฉ์„ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. Secret์—์„œ๋„ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

๋ฐ์ดํ„ฐ ์ž์ฒด๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Kubernetes์˜ ๋น„๋ฐ€ ๊ฐ์ฒด๋Š” Opaque ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด๋‹น ๋‚ด์šฉ์ด kubectl ์„ค๋ช… ์ถœ๋ ฅ, ๋กœ๊ทธ ํ•ญ๋ชฉ ๋˜๋Š” ํ„ฐ๋ฏธ๋„์— ํ‘œ์‹œ๋˜์ง€ ์•Š์•„ ์‹ค์ˆ˜๋กœ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์˜ ์ธ์ฝ”๋”ฉ๋œ YAML ๋ฒ„์ „์„ ๋ณด๋ ค๋ฉด kubectl get ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

์›๋ž˜ ๊ฐ’๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ eHl6enk=๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋Š” ์‹ค์ œ๋กœ base64 ์ธ์ฝ”๋”ฉ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” Secret ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Base64๋Š” ์ž„์˜์˜ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์ผ ์ˆ˜ ์žˆ๊ณ  ์ถœ๋ ฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ(TLS ์•”ํ˜ธํ™” ํ‚ค์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ) Secret ๊ฐ์ฒด๋Š” ํ•ญ์ƒ base64 ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

beHl6enk= ํ…์ŠคํŠธ๋Š” ๋น„๋ฐ€ ๋‹จ์–ด xyzzy์˜ base64 ์ธ์ฝ”๋”ฉ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ base64 โ€”decode ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

echo "eHl6enk=" | base64 --decode
xyzzy

๋”ฐ๋ผ์„œ Kubernetes๋Š” ํ„ฐ๋ฏธ๋„์ด๋‚˜ ๋กœ๊ทธ ํŒŒ์ผ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ˆ˜๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜์ง€๋งŒ, ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Secret ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ base64๋กœ ์ฒ˜๋ฆฌํ•œ ํ›„ ๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ํ…์ŠคํŠธ๋ฅผ base64๋กœ ์ธ์ฝ”๋”ฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: ๋ณด์•ˆ ๋น„๋ฐ€์— ๋„ฃ๊ธฐ ์œ„ํ•ด) ์ธ์ˆ˜ ์—†์ด base64 ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

echo xyzzy | base64
eHl6enkK

๋น„๋ฐ€ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ

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

์ˆ˜๋™์  ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”

Kubernetes๊ฐ€ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” etcd ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? API๋ฅผ ํ†ตํ•ด Secret ๊ฐ์ฒด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์–ด๋„ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‚˜์š”?

๋ฒ„์ „ 1.7๋ถ€ํ„ฐ Kubernetes๋Š” ์ˆ˜๋™ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” etcd ๋‚ด๋ถ€์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋””์Šคํฌ์— ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์ฝ์„ ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๋…ํ•˜๋ ค๋ฉด Kubernetes API ์„œ๋ฒ„์—๋งŒ ์žˆ๋Š” ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ์ˆ˜๋™ ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ˆ˜๋™ ์•”ํ˜ธํ™”๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Experiment-encryption-provider-config ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ์ˆ˜๋™ ์•”ํ˜ธํ™”๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Google Kubernetes Engine ๋˜๋Š” ๊ธฐํƒ€ Kubernetes ๊ด€๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋˜๋ฏ€๋กœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. etcd ์ฝ˜ํ…์ธ ๊ฐ€ ์•”ํ˜ธํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด Kubernetes ๊ณต๊ธ‰์—…์ฒด์— ๋ฌธ์˜ํ•˜์„ธ์š”.

๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ ์ €์žฅ

๋งค์šฐ ๋ฏผ๊ฐํ•œ ๋ณด์•ˆ ๋น„๋ฐ€ ๊ฐœ์ฒด์™€ ๊ฐ™์ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ œ๊ฑฐํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ผ๋ถ€ Kubernetes ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Helm ๊ด€๋ฆฌ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

๋น„๋ฐ€ ๊ฐ์ฒด ๊ด€๋ฆฌ ์ „๋žต

์ด์ „ ์„น์…˜์˜ ์˜ˆ์—์„œ๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์ €์žฅ๋œ ํ›„ ์ฆ‰์‹œ ๋ฌด๋‹จ ์•ก์„ธ์Šค๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์—์„œ๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ ๊ด€๋ฆฌ ๋Œ€์ƒ ํŒŒ์ผ์— ๊ธฐ๋ฐ€ ์ •๋ณด๋ฅผ ๋ฐฐ์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋ฅผ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•˜๊ธฐ ์ „์— ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋‚˜ ์ „๋žต์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์†Œํ•œ ๋‹ค์Œ ์งˆ๋ฌธ์— ๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ด๋””์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  • ํ™œ์„ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ €์ž ์†Œ๊ฐœ

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

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

ยป ์ฑ…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœํ–‰์ธ์˜ ์›น์‚ฌ์ดํŠธ
ยป ์ฐจ๋ก€
ยป ๋ฐœ์ทŒ

Khabrozhiteley์˜ ๊ฒฝ์šฐ ์ฟ ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ 25% ํ• ์ธ์„ ๋ฐ›์œผ์„ธ์š” - Kubernetes

์ข…์ด์ฑ…์„ ๊ฒฐ์ œํ•˜์‹œ๋ฉด ์ „์ž์ฑ…์ด ์ด๋ฉ”์ผ๋กœ ๋ฐœ์†ก๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€