๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Book Review/๐Ÿ“˜ Kubernetes Best Practice

[Kubernetes Best Practice] 1. ๊ธฐ๋ณธ ์„œ๋น„์Šค ์„ค์น˜

by Seongpyo Hong 2021. 1. 30.

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

์ตœ๊ทผ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฑฐ๋‚˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์€ ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ธ๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์„ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋„์›€์ด ๋ ๋งŒํ•œ ์ฑ…์„ ๋ฐœ๊ฒฌํ•ด์„œ ์ฝ์–ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.


์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌ

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

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


์ด๋ฏธ์ง€ ๊ด€๋ฆฌ

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

์ด๋ฏธ์ง€ ํƒœ๊ทธ์— ๊ด€ํ•ด์„œ๋Š” ๋ฒ„์ „ ํƒœ๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋นŒ๋“œ๋œ ์ปค๋ฐ‹์˜ SHA ํ•ด์‹œ๊ฐ’๊ณผ ๋ฒ„์ „์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋„ค์ด๋ฐ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•(ex: v1.0.3-basedq122)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํƒœ๊ทธ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ๋˜๋Š” latest ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…์‹œ์ ์ธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


Deployment

์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” Stateless ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•  ๋•Œ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด 2๊ฐœ ์ด์ƒ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์ด๋ฅผ ReplicaSet์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ๋˜ํ•œ ReplicaSet์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ๋กค์•„์›ƒ์„ ๊ด€๋ฆฌํ•˜๋Š” Deployment์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. 


ConfigMap์„ ํ†ตํ•œ ์„ค์ • ๋ถ„๋ฆฌ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ๋•Œ, ConfigMap์„ ํ†ตํ•ด ์„ค์ •์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์€ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์„ค์ •์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ ์„ค์ •์ด ํ†ตํ•ฉ๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. 

ํ•˜์ง€๋งŒ ConfigMap์ด ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ๋‚ด์šฉ๋งŒ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Deployment๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  Pod์„ ์žฌ์‹œ์ž‘ํ•จ์œผ๋กœ์จ ์ƒˆ๋กœ์šด ์„ค์ •์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋ณ€๊ฒฝ๋˜๋Š” configMap์˜ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋„ค์ด๋ฐ์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ณ , ์ด๋ฅผ Deployment์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋ฐฉ๋ฒ•๊ณผ๋Š” ๋‹ฌ๋ฆฌ HeathCheck ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋กค์•„์›ƒ๋จ์œผ๋กœ ๋ณ€๊ฒฝ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 


Secret ์ธ์ฆ ๊ด€๋ฆฌ

๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œํฌ๋ฆฟ์€ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ฟ ๋ฒ ๋„คํ‹ฐ์Šค ์•ˆ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Hashcorp์˜ Vault์™€ ๊ฐ™์€ Secret Management ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹œํฌ๋ฆฟ์„ ๋ณด๋‹ค ์šฉ์ดํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ผ๋ฐ˜์ ์œผ๋กœ ์‹œํฌ๋ฆฟ์˜ ๊ฒฝ์šฐ ๋ฐฐํฌ ์‹œ์ ์— ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ฃผ์ž…๋˜๋Š”๋ฐ ์ด ๋•Œ tmpfs ๋žจ ๊ธฐ๋ฐ˜์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณผ๋ฅจ์ด ์ƒ์„ฑ๋˜์–ด ๋งˆ์šดํŠธ ๋˜๊ณ , ์ด๋กœ ์ธํ•ด ๋ฌผ๋ฆฌ์ ์ธ ํ”ผํ•ด๋ฅผ ์ž…๋”๋ผ๋„ ์‹œํฌ๋ฆฟ์ด ๋…ธ์ถœ๋  ์œ„ํ—˜์ด ์ ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


StatefulSet

Statefulํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ Statelessํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” Pod์€ ์ž„์‹œ์ ์ธ ์„ฑ์งˆ์„ ๋„๋Š”๋ฐ ์ด๋กœ์ธํ•ด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด pod์ด ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์žฌ์‹œ์ž‘ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” PV๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. StatefulSet์€ ์ผ๊ด€๋œ pod์˜ ์ด๋ฆ„๊ณผ Scaling์— ๋Œ€ํ•œ ์ˆœ์„œ ์ง€์ •๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. 

PV๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด PVC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ๋ช…์„ธ๋ฅผ ์•Œ ํ•„์š” ์—†์ด ์ถ”์ƒํ™” ๋œ ๋ฆฌ์†Œ์Šค์— ์š”์ฒญ์„ ๋ณด๋ƒ„์œผ๋กœ PV๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Headless Service

๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋น„์Šค๋Š” ํ•ด๋‹นํ•˜๋Š” Pod๋“ค์— ๋Œ€ํ•ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ Pod์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ StatefulSet์˜ ๊ฒฝ์šฐ ํŠน์ • Pod์— ์ ‘๊ทผํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  Pod์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์ธ DNS๋ฅผ ์ œ๊ณตํ•˜๋Š” Headless Service๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, Headless Service๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ClusterIP๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 


Helm

ํ™˜๊ฒฝ์˜ ๋‹ค์–‘์„ฑ์œผ๋กœ ์ธํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋ฐฐํฌํ•ด์•ผ ํ•  ๋ฆฌ์†Œ์Šค์˜ ์ƒํƒœ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•˜๋Š” ํ•„์š”๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. VCS ๋ฐ Branch ์ „๋žต์„ ํ†ตํ•ด ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ Template ์—”์ง„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Template ์—”์ง„์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋Š” Helm์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋ถ„๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ฐจํŠธ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์— ์ข€ ๋” ์†์‰ฝ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€