๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Container/Kubernetes

[Kubernetes] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ธฐ์ดˆ: ํŒŸ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ๋””ํ”Œ๋กœ์ด๋จผํŠธ

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์‹œ์ž‘ํ•˜์„ธ์š”! ๋„์ปค/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ์ ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŒ…์— ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•˜์˜€์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
 

Kubernetes


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ธฐ์ดˆ์ธ ํŒŸ(Pods), ๋ ˆํ”Œ๋ฆฌ์นด์…‹(Replica set), ๋””ํ”Œ๋กœ์ด๋จผํŠธ(Deployment) ๊ฐœ๋…์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋Œ€ํ•ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋‹ค๋ฃจ์–ด๋ณด๊ธฐ ์ „์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ณ  ๋„˜์–ด๊ฐ€์ž.

A. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ '์˜ค๋ธŒ์ ํŠธ(Object)'๋กœ ๋‹ค๋ฃฌ๋‹ค

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

B. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋‹ค๋ฃฐ ์ค„ ์•„๋Š” ๋Šฅ๋ ฅ = YAML ํŒŒ์ผ ์ž‘์„ฑํ•  ์ค„ ์•„๋Š” ๋Šฅ๋ ฅ!? 

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

C. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๋ชจ์Œ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

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

 

์˜ˆ๋ฅผ ๋“ค์–ด, ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ๋Š” API ์„œ๋ฒ„(kube-apiserver), ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €(kube-controller-manager), ์Šค์ผ€์ฅด๋Ÿฌ(kube-scheduler), DNS ์„œ๋ฒ„(coreDNS) ๋“ฑ์ด ์‹คํ–‰๋˜๊ณ , ๋ชจ๋“  ๋…ธ๋“œ์—์„œ๋Š” ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ํ”„๋ก์‹œ(kube-proxy)์™€ ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ(calico, flannel ๋“ฑ)์ด๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์‹คํ–‰๋œ๋‹ค. ๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ '์ปจํ…Œ์ด๋„ˆ'์˜ ํ˜•ํƒœ๋กœ ์‹คํ–‰๋œ๋‹ค. ์‹ค์ œ๋กœ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์ง€๊ธˆ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ปจํ…Œ์ด๋„ˆ ํ˜•ํƒœ๋กœ ์‹คํ–‰ ์ค‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
 

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

 

๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์ธํ„ฐํŽ˜์ด์Šค ์ฆ‰, CRI๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ CRI๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, ๋„์ปค ์Šค์›œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋„์ปค ์—”์ง„ ์ž์ฒด์— ๋‚ด์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ณ„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” CRI ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— CRI ๊ตฌํ˜„์ฒด์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ, kubelet์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” CRI ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋กœ containerd, cri-o ๋“ฑ ์ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
 
์ด์ œ ๊ทธ๋Ÿฌ๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ์–ด ๋ณด๋ฉด์„œ ๊ธฐ์ดˆ ๊ฐœ๋…์„ ์Œ“์•„๊ฐ€ ๋ณด์ž. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ ํŒŸ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ์„œ๋น„์Šค, ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์ด๋‹ค. ์ด์ œ ์ด๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์”ฉ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž.

1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„, ํŒŸ(Pod)

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

1๊ฐœ์˜ ํŒŸ ์•ˆ์— 1๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ

 
๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์‹ค์Šต์œผ๋กœ, Nginx ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ 1๊ฐœ๋ฅผ ํฌํ•จํ•œ ํŒŸ 1๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” YAML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด๋ณด์ž. YAML ํŒŒ์ผ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ฐธ๊ณ ๋กœ ์‹ค์Šต์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ 1๊ฐœ, ์›Œ์ปค ๋…ธ๋“œ 3๊ฐœ๋ฅผ ํ™œ์šฉํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค.
 

apiVersion: v1
kind: Pod
metadata:
  name: zedd-nginx-pod
spec:
  containers:
  - name: zedd-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

 
์œ„ YAML ํŒŒ์ผ์„ ํŒŸ์œผ๋กœ ๋ฐฐํฌํ•ด๋ณด๊ธฐ ์ „์— ์ž‘์„ฑ๋œ YAML ํŒŒ์ผ ๋‚ด์šฉ์˜ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๋„๋ก ํ•˜์ž. 
 

  • apiVersion : YAML ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ์˜ค๋ธŒ์ ํŠธ์˜ API ๋ฒ„์ „์„ ์˜๋ฏธ. ์˜ค๋ธŒ์ ํŠธ์˜ ์ข…๋ฅ˜ ๋ฐ ๊ฐœ๋ฐœ ์„ฑ์ˆ™๋„์— ๋”ฐ๋ผ ํ•ด๋‹น ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
  • kind : ๋ฆฌ์†Œ์Šค์˜ ์ข…๋ฅ˜๋ฅผ ์˜๋ฏธ. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ํŒŸ์„ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด Pod์ด ๋œ๋‹ค. kind ํ•ญ๋ชฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ์˜ค๋ธŒ์ ํŠธ ์ข…๋ฅ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, kubectl api-resources ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ์ถœ๋ ฅ๋˜๋Š” ํ™”๋ฉด ์ค‘ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— KIND ๋ผ๋Š” ํ•ญ๋ชฉ์„ ๋ณด๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • metadata : ๋ฆฌ์†Œ์Šค์— ๋ถ™ํžˆ๋Š” ๋ผ๋ฒจ,  ์ฃผ์„, ์ด๋ฆ„๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์˜ ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ์˜๋ฏธ
  • spec : ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์˜๋ฏธ. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ํŒŸ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด containers ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ณ , ํ•˜์œ„ ํ•ญ๋ชฉ์— ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์ด๋ฏธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ‚ค์›Œ๋“œ๊ฐ€ ๋„์ปค ์ปดํฌ์ฆˆ๋ฅผ ๋ฐฐ์› ์„ ๋•Œ์™€ ๋น„์Šทํ•˜๋‹ค.

์ด์ œ ๊ทธ๋Ÿฌ๋ฉด ์ •์˜ํ•œ YAML ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ํŒŸ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์ƒ์„ฑํ•ด๋ณด๋„๋ก ํ•˜์ž. ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
 

$ kubectl apply -f nginx-pod.yaml

 
๊ทธ๋Ÿฌ๋ฉด ํŒŸ์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  kubectl get pods ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ƒ์„ฑ๋œ ํŒŸ์„ ์•„๋ž˜์ฒ˜๋Ÿผ ํ™•์ธํ•ด๋ณด์ž. ์ฐธ๊ณ ๋กœ kubectl get [์˜ค๋ธŒ์ ํŠธ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. '์˜ค๋ธŒ์ ํŠธ ์ด๋ฆ„'์—๋Š” ํŒŸ์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋…ธ๋“œ, ๋˜๋Š” ๊ธฐํƒ€ ์˜ค๋ธŒ์ ํŠธ ์ด๋ฆ„์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
 

 
๊ทธ๋Ÿฌ๋ฉด ์ƒ์„ฑ๋œ ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ์ฆ‰, Nginx ์„œ๋ฒ„๋กœ ํ…Œ์ŠคํŠธ ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด๋„๋ก ํ•˜์ž. ์œ„ YAML ํŒŒ์ผ์—์„œ ๋น„๋ก ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ •์˜ํ•˜๊ธด ํ–ˆ์ง€๋งŒ, ํ˜„์žฌ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ์ถœ๋œ ์ƒํƒœ๋Š” ์•„๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ํŒŒ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์„œ๋น„์Šค๋ผ๊ณ  ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ์น˜๋ฉด docker run ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ํฌํŠธํฌ์›Œ๋”ฉ ์˜ต์…˜์ธ -p(--publish) ์˜ต์…˜์„ ์ง€์ •ํ•ด์ฃผ ์•Š์€ ์ฑ„ ์‹คํ–‰ํ•œ ๊ฒƒ์ธ ์…ˆ์ด๋‹ค. ์„œ๋น„์Šค ์˜คํ”„์ ํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ถ”ํ›„์— ๋ฐฐ์šฐ๋„๋ก ํ•˜๊ณ  ์ง€๊ธˆ์€ ์„œ๋น„์Šค ์˜ค๋ธŒ์ ํŠธ ์—†์ด ์ปจํ…Œ์ด๋„ˆ์˜ IP ๋งŒ์œผ๋กœ ํ•ด๋‹น ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•ด๋ณด๋„๋ก ํ•˜์ž. ์šฐ์„  ์šฐ๋ฆฌ๋Š” ์ƒ์„ฑํ•œ ํŒŒ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ IP ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŠน์ • ํŒŒ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
 

$ kubectl describe pods zedd-nginx-pod

 
์œ„ ๋ช…๋ น์–ด๋กœ ์ถœ๋ ฅ๋œ ๋‚ด์šฉ ์ค‘ IP ๋ผ๋Š” ํ•ญ๋ชฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์•Œ๊ฒŒ ๋œ IP๋Š” 123.456.789.000 ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์›Œ์ปค๋…ธ๋“œ 3๊ฐœ ์ค‘ ์•„๋ฌด ๋…ธ๋“œ๋กœ ๋“ค์–ด๊ฐ€ ํ•ด๋‹น IP ์ฃผ์†Œ๋กœ curl ๋ช…๋ น์–ด๋ฅผ ๋‚ ๋ ค๋ณด๋„๋ก ํ•˜์ž.
 

์ƒ์„ฑ๋ค ํŒŒ๋“œ์— curl ํ…Œ์ŠคํŠธ ๋‚ ๋ฆฌ๊ธฐ

 
ํ„ฐ๋ฏธ๋„ ํ‘œ์ค€ ์ถœ๋ ฅ์— ๋ณด๋ฉด nginx ์„œ๋ฒ„์—์„œ ๋ณด์—ฌ์ง€๋Š” HTML Response๊ฐ€ ๋ฐ˜ํ™˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ƒ์„ฑํ•œ ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•ด๋ณด๋„๋ก ํ•˜์ž. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ์‹œ์ผœ์ฃผ์ž.
 

$ kubectl delete -f nginx-pod.yaml

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

 
READY ํ•ญ๋ชฉ์„ ๋ณด๋ฉด 1/1 ์ด๋ผ๊ณ  ์“ฐ์—ฌ์ ธ ์žˆ๋‹ค. ์ด๋Š” ํ•ด๋‹น ํŒŒ๋“œ์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 1๊ฐœ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๊ณ , ๊ทธ ์ค‘ 1๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ 1/1์ด ์•„๋‹Œ 2/2, 3/3, 2/3์€ ๋ถˆ๊ฐ€๋Šฅํ• ๊นŒ? ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฌผ๋ก  ๋Œ€๋ถ€๋ถ„์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์œ„์ฒ˜๋Ÿผ 1๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ํŒŒ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด ์‚ฌ์šฉํ•˜๊ธด ํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ 1๊ฐœ์˜ ์ปจ์—ํ‹ฐ๋„ˆ๋กœ ๊ตฌ์„ฑ๋˜์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ฆ‰, READY ํ•ญ๋ชฉ์€ ํŒŒ๋“œ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ 2/2๊ฐ€ ๋  ์ˆ˜๋„, 3/3์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์œ„ Nginx ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜ํ•œ YAML ํŒŒ์ผ์„ ์ข€ ๋” ํ™•์žฅํ•ด๋ณด๋ ค ํ•œ๋‹ค. ์‚ฌ์šฉํ•  YAML ํŒŒ์ผ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
 

apiVersion: v1
kind: Pod
metadata:
  name: zedd-nginx-pod-v2
spec:
  containers:
  - name: zedd-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

  - name: zedd-ubuntu-container
    image: alicek106/rr-test:curl
    command: ["tail"]
    args: ["-f", "/dev/null"]

 
ํŒŒ์ผ์„ ๋ณด๋ฉด ์ €์ž๋ถ„์ด ์ง์ ‘ ๋งŒ๋“  ์‹ค์Šต์šฉ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์šฐ๋ถ„ํˆฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ YAML ํŒŒ์ผ์— ์ •์˜๋œ command๋Š” ๋„์ปค์—์„œ Dockerfile ๋ช…๋ น์–ด์˜ ENTERYPOINT์™€ ๋™์ผํ•˜๊ณ , args๋Š” CMD์™€ ๋™์ผํ•˜๋‹ค. ํ˜น์‹œ ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋ˆ…์Šค์˜ tail ๋ช…๋ น์–ด๋Š” ์ผ์ข…์˜ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, YAML ํŒŒ์ผ์— ์ •์˜๋œ ๊ฒƒ์ด ๊ทธ๊ฒƒ์ด๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋„ ์ด์ „ ๋ฆฌ๋ˆ…์Šค ํฌ์ŠคํŒ…์—์„œ ๋ฐฐ์šด์ ์ด ์žˆ์œผ๋‹ˆ ๊ทธ๊ณณ์„ ์ฐธ๊ณ ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ํŒŸ์„ ์ƒ์„ฑํ•ด๋ณด์ž.
 

 
์œ„๋ฅผ ๋ณด๋ฉด zedd-nginx-pod-v2 ๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŸ์ด ์ƒ๊ฒผ๊ณ  READY ํ•ญ๋ชฉ์— 2/2๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ปจํ…Œ์ด๋„ˆ ์ค‘ ์šฐ๋ถ„ํˆฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋“ค์–ด๊ฐ€๋ณด์ž. ์ฐธ๊ณ ๋กœ -c ์˜ต์…˜์„ ์ฃผ๋ฉด ํ•ด๋‹น ํŒŸ ๋‚ด์˜ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
 

$ kubectl exec -it zedd-nginx-pod-v2 -c zedd-ubuntu-container bash

 
๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์šฐ๋ถ„ํˆฌ ๋‚ด๋ถ€๋กœ ๋“ค์–ด์˜จ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ curl localhost ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ์‹ ๊ธฐํ•œ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค.
 

 
์šฐ๋ถ„ํˆฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ๋กœ curl ๋ช…๋ น์–ด๋ฅผ ๋‚ ๋ ธ๋Š”๋ฐ, Nginx ์„œ๋ฒ„์˜ HTML Response๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์•„๋‹ˆ ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฑธ๊นŒ? ๋ถ„๋ช… ์œ„ YAML์—์„œ ์ •์˜ํ•œ ์šฐ๋ถ„ํˆฌ ์ปจํ…Œ์ด๋„ˆ๋Š” Nginx ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ์—ˆ๋Š”๋ฐ ๋ง์ด๋‹ค. ์‚ฌ์‹ค ์ด HTML Response๋ฅผ ๋ณด๋‚ด์ค€ ์„œ๋ฒ„๋Š” ์ด๋ฐ”๋กœ ์šฐ๋ถ„ํˆฌ์™€ ๊ฐ™์€ ํŒŸ์— ๋„์›Œ์ ธ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ํŒŒ๋“œ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฆฌ๋ˆ…์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฐธ๊ณ ๋กœ ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ, ๋„์ปค์—์„œ๋„ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ --net ๊ณผ --net-alias ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์ค€ ๊ฒฝ์šฐ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž๋ฃŒ๋Š” ์ด์ „ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์ž.
 
์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์˜๋ฏธ์—†๋Š” ์šฐ๋ถ„ํˆฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ํŒŒ๋“œ ๋‚ด์— 2๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„๊นŒ? ๋ฐ”๋กœ ํ•˜๋‚˜์˜ ์™„์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ์ด๋‹ค. ์ฒ˜์Œ ์‹ค์Šต ๋•Œ ์šฐ๋ฆฌ๋Š” Nginx ์ปจํ…Œ์ด๋„ˆ 1๊ฐœ๋งŒ์„ ํ•˜๋‚˜์˜ ํŒŒ๋“œ๋กœ ์ •์˜ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ๋•Œ๋Š” ํ•˜๋‚˜์˜ ํŒŒ๋“œ ๋‚ด์— 2๊ฐœ ์ด์ƒ์˜ Nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๋ฉด ์•ˆ๋˜๋Š”๊ฐ€? ๋ฌผ๋ก  ๋˜๊ธฐ๋Š” ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค. ์™œ๋ƒํ•˜๋ฉด Nginx ์„œ๋ฒ„๋Š” ๋‹จ์ง€ Nginx ์ปจํ…Œ์ด๋„ˆ 1๊ฐœ๋งŒ์œผ๋กœ ์™„์ „ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 
 
๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋งŒ์•ฝ Nginx ์„œ๋ฒ„์— ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜ ๋ถ™์˜€๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ์ด ๋•Œ๋Š” Nginx ์ปจํ…Œ์ด๋„ˆ์™€ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ 2๊ฐœ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด์•ผ ์™„์ „ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ๋•Œ์•ผ๋ง๋กœ ํ•˜๋‚˜์˜ ํŒŒ๋“œ ๋‚ด์— 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•˜๋Š” ์ ์ ˆํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋˜๊ฒ ๋‹ค. ์ฐธ๊ณ ๋กœ ์ด๋Ÿฐ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถ€๊ฐ€์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ์˜๋ฏธ๋กœ, sidecar ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ํŒŒ๋“œ ๋‚ด์— ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๋ฐ˜๋“œ์‹œ ๊ฐ™์€ ์›Œ์ปค ๋…ธ๋“œ์—์„œ ํ•จ๊ป˜ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ์•„๋‘์ž.

2. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋“œ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹(ReplicaSet)

๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด๋ž€, ๋™์ผํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋“œ ๋ฌถ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ž ์‹œ ์—ฌ๊ธฐ์„œ ์ปจํ…Œ์ด๋„ˆ, ํŒŒ๋“œ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์ด 3๊ฐ€์ง€ ๊ฐœ๋…์— ๋Œ€ํ•œ ๊ด€๊ณ„๋ฅผ ์ž ๊น ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ž. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์ž.
 

์ปจํ…Œ์ด๋„ˆ, ํŒŸ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๊ฐ„์˜ ๊ด€๊ณ„

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

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: zedd-nginx-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: zedd-nginx-pods-label
  template:
    metadata:
      name: zedd-nginx-pod
      labels:
        app: zedd-nginx-pods-label
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

 
YAML ํŒŒ์ผ์˜ ํ•ญ๋ชฉ ์ˆœ์„œ๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๊ฐ€์žฅ ๋จผ์ € ์ƒ์„ฑ๋  ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ๋Œ€ํ•ด 1~5๋ฒˆ์งธ ์ค„๊นŒ์ง€ ํ•ด์„œ ์ •์˜๋ฅผ ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋‚ด์—์„œ ์ƒ์„ฑ๋  ํŒŒ๋“œ์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ, template ํ‚ค์›Œ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ์œ„๋Š” ํŒŒ๋“œ๋ฅผ ๋ช‡ ๊ฐœ ์ƒ์„ฑํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋ช…์‹œํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  template ํ‚ค์›Œ๋“œ ์•„๋ž˜์˜ ๋‚ด์šฉ์€ ์–ด๋– ํ•œ ํŒŒ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ๋ช…์‹œํ•œ๋‹ค. ์ด๋ฅผ ํŒŒ๋“œ ์ŠคํŽ™ ๋˜๋Š” ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ์ด์ œ ๊ทธ๋Ÿผ ์œ„ YAML ํŒŒ์ผ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•ด๋ณด์ž.
 

$ kubectl apply -f nginx-replicaset.yaml

 
๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์˜ ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑ๋œ ํŒŸ๋“ค์„ ์‚ดํŽด๋ณด๊ณ , ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑํ•œ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ด๋ณด์ž.

(์ฐธ๊ณ ๋กœ po๋Š” ํŒŸ์„ rs๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ์ค„์ž„ ๋‹จ์–ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฐ ์˜ค๋ธŒ์ ํŠธ์˜ ์ค„์ž„๋ง์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด kubectl api-resources์˜ SHORTNAMES ํ•ญ๋ชฉ์„ ๋ณด๋ฉด ๋œ๋‹ค)
 

$ kubectl get po
$ kubectl get rs

 
์ด๋ฒˆ์—๋Š” ๋ฐฉ๊ธˆ ์ƒ์„ฑํ•œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์—์„œ ์ •์˜ํ•œ ํŒŸ ๊ฐœ์ˆ˜๋ฅผ 4๊ฐœ๋กœ ๋Š˜๋ ค๋ณด์ž. ํŒŸ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋ ˆํ”Œ๋ฆฌ์นด์…‹(์˜ค๋ธŒ์ ํŠธ)์˜ ๋ฆฌ์†Œ์Šค ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์— ์ƒ์„ฑํ•œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๊ตณ์ด ์‚ญ์ œํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. kubectl edit ๋˜๋Š” kubectl patch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์œ„์—์„œ ์ •์˜ํ•œ YAML ํŒŒ์ผ์—์„œ ํ…์ŠคํŠธ ์—๋””ํ„ฐ๋กœ ์ง์ ‘ replicas ํ•ญ๋ชฉ์„ 3์—์„œ 4๋กœ ์ˆ˜์ • ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰์‹œ์ผœ์ฃผ์ž.
 

$ kubectl apply -f nginx-replicaset.yaml

 

 
์œ„ ํ™”๋ฉด์ด ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ kubectl delete ๋ช…๋ น์–ด๋กœ ๊ธฐ์กด์— ์กด์žฌํ•œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์‚ญ์ œํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ ํ›„ ์žฌ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ, ๊ทธ๋Ÿด ๊ฒฝ์šฐ ์œ„ ํ™”๋ฉด์—์„œ ์ฒ˜๋Ÿผ ํ•ด๋‹น ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” 'configured' ํ‚ค์›Œ๋“œ๊ฐ€ ๋“ฑ์žฅํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ํŒŸ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ kubectl delete ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์‚ญ์ œํ•˜๋ฉด ๊ทธ ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋‚ด์— ์žˆ๋Š” ํŒŒ๋“œ๋„ ๊ฐ™์ด ์‚ญ์ œ๋œ๋‹ค.
 

$ kubectl delete -f nginx-replicaset.yaml
$ kubectl delete rs zedd-nginx-replicaset

 
๋‹ค์Œ์€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž. ์›๋ฆฌ๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „์— ์šฐ๋ฆฌ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์กด์žฌ ์ด์œ ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ์ข‹๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์กด์žฌ ์ด์œ ๋Š” ๋ญ˜๊นŒ? ๋ฌผ๋ก  ๋™์ผํ•œ ํŒŸ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ผ์ • ๊ฐœ์ˆ˜์˜ ํŒŸ๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
 
์œ„์—์„œ ์šฐ๋ฆฌ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๋ฉด์„œ ๊ทธ ์•ˆ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ํŒŸ๋„ ๊ฐ™์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ณด๊ณ  ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ํŒŒ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋Š์Šจํ•œ ์—ฐ๊ฒฐ(Loosely coupled)์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์ด๋Š” YAML ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ(Label Selector)๋กœ ์ธํ•ด ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŸ ๊ฐ„์˜ ์—ฐ๊ฒฐ์€ YAML ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ ์‚ฌ๋žŒ์ด ๋งŒ๋“ค์–ด์ค€ ๊ฒƒ! ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜ํ•œ YAML ํŒŒ์ผ ์ค‘ ์•„๋ž˜ ๋…ธ๋ž€์ƒ‰ ํ‘œ์‹œ์˜ ํ…์ŠคํŠธ๋ฅผ ์œ ์‹ฌํžˆ ์‚ดํŽด๋ณด์ž.
 

๋…ธ๋ž€์ƒ‰ ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด์ž

 
๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ๋Š” ๋ฐ”๋กœ ์œ„ ๋‚ด์šฉ ์ค‘ matchLabels ๋ผ๋Š” ํ•ญ๋ชฉ์„ ์˜๋ฏธํ•œ๋‹ค. ํ•ด๋‹น ํ•ญ๋ชฉ์—๋Š” key : value ์Œ์˜ ํ˜•ํƒœ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ด ๋ผ๋ฒจ์€ ์ฃผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„๋ฅ˜ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฆฌ์†Œ์Šค์˜ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ ๋ง๊ณ ๋„ ๋˜ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š”๋ฐ ๋ฐ”๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ(ํŒŸ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋“ฑ..)๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐพ์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 
 
๋”ฐ๋ผ์„œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์œ„ YAML ํŒŒ์ผ์˜ matchLabels ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•ด์„œ ํ•ด๋‹น ๋ผ๋ฒจ์„ ๊ฐ€์ง€๋Š” ํŒŸ์˜ ๊ฐœ์ˆ˜์™€ replicas ํ•ญ๋ชฉ์— ์ ํ˜€์žˆ๋Š” ์ˆซ์ž์™€ ์ผ์น˜ํ•˜๋„๋ก ๋งž์ถฐ์ฃผ๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค. ์ฆ‰, ๋งŒ์•ฝ ํ•ด๋‹น ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ํŒŸ์˜ ๊ฐœ์ˆ˜๊ฐ€ replicas ํ•ญ๋ชฉ์˜ ์ˆซ์ž๋ณด๋‹ค ์ ๋‹ค๋ฉด ๋™์ผํ•œ ํŒŸ์„ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ ์ƒ์„ฑํ•˜๋Š” ํŒŸ์˜ ์ŠคํŽ™์€ teamplate ํ•ญ๋ชฉ์— ์ ํ˜€์žˆ๋Š” ๋Œ€๋กœ ์ƒ์„ฑํ•œ๋‹ค. ๋ฌผ๋ก  ๋ฐ˜๋Œ€๋กœ ํ•ด๋‹น ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ํŒŸ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ํŒŸ์„ ์‚ญ์ œ์‹œ์ผœ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค. 
 
๊ทธ๋ž˜์„œ ์œ„ YAML ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ๋Š” app: zedd-nginx-pods-label ์ด๋ผ๋Š” ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ํŒŸ์ด ์ƒ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ replicas ํ•ญ๋ชฉ์— ์žˆ๋Š” 4๊ฐœ๋ฅผ ๋งž์ถฐ์ฃผ๊ธฐ ์œ„ํ•ด์„œ template ํ•ญ๋ชฉ์— ์žˆ๋Š” ์ŠคํŽ™๋Œ€๋กœ ํŒŸ์„ 4๊ฐœ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ด๋‹น ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ํŒŸ์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•ด๋„ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ๋”์ด์ƒ ํ•ด๋‹น ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ํŒŸ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ฏธ ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ๋กœ ์ฑ„์›Œ์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ์‹ค์ œ๋กœ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ์‹ค์Šต์„ ํ•ด๋ณด๋„๋ก ํ•˜์ž.
 
์ด๋ฏธ ์œ„ YAML ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ํ•˜๋‚˜ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ผํ•œ ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ํŒŸ์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€๋กœ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด๋ณด์ž.
 

apiVersion: v1
kind: Pod
metadata:
  name: zed-nginx-pod
  labels:
    app: zedd-nginx-pods-label
spec:
  containers:
  - name: zedd-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80

 
๊ทธ๋Ÿฐ ๋‹ค์Œ kubectl get pods ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์–ด๋–ค์ผ์ด ๋ฐœ์ƒํ• ๊นŒ? ์•„๋ž˜ ํ™”๋ฉด์„ ๋ณด์ž.
 

 
๋…ธ๋ž€์ƒ‰ ๋„ค๋ชจ์นธ์„ ๋ณด๋ฉด ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•œ ํŒŸ์ด ์ƒ์„ฑ๋˜์ž๋งˆ์ž ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๊ณ  ๋‚œ ๋’ค ํŒŸ ๋ชฉ๋ก์—์„œ ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ ๋ฐ˜๋Œ€๋กœ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์„ ์ƒ์„ฑํ•˜๊ธฐ ์ด์ „์— ์ˆ˜๋™์œผ๋กœ ๋™์ผํ•œ ํŒŸ์„ ์ƒ์„ฑํ•ด๋†“๊ณ , ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์•„๋ž˜ ํ™”๋ฉด์„ ๋ณด์ž.
 

 
๋ณด๋ฉด ๋ฏธ๋ฆฌ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•ด๋†“์€ zed-nginx-pod์ด ๋‚จ์•„ ์žˆ๊ณ  ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์ƒ์„ฑ์œผ๋กœ ์ธํ•ด ์ƒ์„ฑ๋œ ํŒŸ๋“ค(zedd-nginx-replicaset๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŸ๋“ค)์ด 4๊ฐœ๊ฐ€ ์•„๋‹Œ 3๊ฐœ๋งŒ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ, ์—ฌ๊ธฐ ์˜ˆ์‹œ์—์„œ๋Š” 'app: zedd-nginx-pods-label' ๋ผ๋Š” ๋ผ๋ฒจ์„ ํ†ตํ•ด์„œ ํŒŸ๊ณผ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
 
๊ทธ๋Ÿฌ๋ฉด ๋งŒ์•ฝ ํŠน์ • ํŒŸ์—์„œ ํ•ด๋‹น ๋ผ๋ฒจ์„ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋ฆฌ์†Œ์Šค ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” kubectl edit ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ„ ํŒŸ ์ค‘ zedd-nginx-replicaset-xj94j ๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŸ์˜ ๋ ˆ์ด๋ธ”์„ ์ˆ˜์ •ํ•ด๋ณด์ž.
 

$ kubectl edit pods zedd-nginx-replicaset-xj94j

 
์œ„ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด Vim ์—๋””ํ„ฐ ํŽธ์ง‘๊ธฐ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ผ๋ฒจ์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•œ ๋’ค ํŽธ์ง‘๊ธฐ๋ฅผ ์ €์žฅ ํ›„ ์ข…๋ฃŒํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ํŒŸ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ด๋ณด์ž.
 

 
์ถœ๋ ฅ์„ ๋ณด๋ฉด ๋์— b7rlg ๋ผ๋Š” ํ…์ŠคํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ํŒŸ์ด ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๊ธˆ ๋ผ๋ฒจ์„ ์‚ญ์ œํ•œ xj94j ๋ผ๋Š” ํ…์ŠคํŠธ๊ฐ€ ์ด๋ฆ„์— ์žˆ๋Š” ํŒŸ์€ ์—ฌ์ „ํžˆ ์‹คํ–‰์ค‘์ด๋‹ค. ์ฆ‰, ๋ผ๋ฒจ์ด ์‚ญ์ œ๋จ์œผ๋กœ์จ ๋”์ด์ƒ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ํ•ด๋‹น ํŒŸ์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์•˜๋‹ค. ์ฐธ๊ณ ๋กœ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ํŒŸ์—์„œ ์–ด๋–ค ๋ ˆํ”Œ๋ฆฌ์นด๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํŒŸ์˜ ownerReferences ํ•ญ๋ชฉ์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ด ownerReferences๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ์†Œ์œ -์ข…์† ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŸ์€ ownerReference์— ์˜ํ•ด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์— ์ข…์†๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ํŒŸ์˜ owner๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ„์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์ฟ ๋„ค๋ฒ„ํ‹ฐ์Šค 1.23.6 ์ด์ „ ๋ฒ„์ „์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์•˜๊ณ  ๊ทธ์˜ ์—ญํ• ์„ ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋Œ€์‹  ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒ„์ „์ด ์—…๊ทธ๋ ˆ์ด๋“œ๋จ์— ๋”ฐ๋ผ ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” deprecated ๋˜์—ˆ๊ณ , ๊ทธ ๋Œ€์‹  ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿผ ์ด 2๊ฐœ ๊ฐ„์˜ ์ฐจ์ด์ ์€ ๋ญ˜๊นŒ? ์ฐจ์ด์ ์€ ๋ฐ”๋กœ ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ๋ฅผ ํ‘œํ˜„์‹ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ด๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ๊ฐ€๋Šฅํ•˜๊ณ , ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ‘œํ˜„์‹ ๊ธฐ๋ฐ˜์˜ ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ๋Š” ์–ด๋–ค ๊ฒƒ์ผ๊นŒ? ์˜ˆ์‹œ YAML ํŒŒ์ผ๋กœ ํ•œ ๋ฒˆ ์•Œ์•„๋ณด์ž.

 

ํ‘œํ˜„์‹ ๊ธฐ๋ฐ˜์˜ ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ ์˜ˆ์‹œ

 

๋…ธ๋ž€์ƒ‰์œผ๋กœ ์น ํ•œ ๋ถ€๋ถ„์„ ๋ณด๋ฉด ํ‚ค์›Œ๋“œ๊ฐ€ matchExpressions๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  key, values ํ•ญ๋ชฉ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, key์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ์—์„œ ์ •์˜ํ–ˆ์„ ๋•Œ์˜ ํ‚ค๊ฐ’์ด์—ˆ๋˜ app์„ ๋ช…์‹œํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  values ํ•ญ๋ชฉ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๊ณ , ์—ฐ์‚ฐ(operator)์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” In ์—ฐ์‚ฐ์„ ์ •์˜ํ–ˆ๋‹ค. ์ด๋ฅผ ํ•ด์„ํ•ด๋ณด๋ฉด, app์ด๋ผ๋Š” key ๊ฐ’์— ํ• ๋‹น๋œ values๊ฐ€ zedd-nginx-pods-label ๋˜๋Š” test-nginx-pods-label ์ค‘์— ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ํŒŸ์œผ๋กœ ์ธ์ง€ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” operator์˜ ์ข…๋ฅ˜๋กœ๋Š” In, NotIn, Exists, DoesNotExist, Gt, Lt ๋“ฑ์ด ์žˆ๋‹ค. 

3. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๊ด€๋ฆฌํ•˜์ž, ๋””ํ”Œ๋กœ์ด๋จผํŠธ(Deployment)

์ด๋ฒˆ ๋ชฉ์ฐจ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๊ด€๋ฆฌํ•˜๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋ณด๋‹ค ์ƒ์œ„ ๊ฐœ๋…์˜ ์˜ค๋ธŒ์ ํŠธ์ด๋ฉฐ, ํ•˜๋Š” ์—ญํ• ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€์ด๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ๋ฆฌ๋น„์ „ ๊ด€๋ฆฌ ๋ฐ ๋กค๋ฐฑ ๊ธฐ๋Šฅ๊ณผ ๋กค๋ง ์—…๋ฐ์ดํŠธ ๊ด€๋ จ ๊ธฐ๋Šฅ์ด๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ์ „์ž์ธ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ๋ฆฌ๋น„์ „ ๊ด€๋ฆฌ ๋ฐ ๋กค๋ฐฑ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

์‹ค์ œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” YAML ํŒŒ์ผ์— ํŒŸ ๋˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹๋งŒ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŸ์˜ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ •์˜ํ•˜๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ YAML ํŒŒ์ผ์— ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹น์—ฐํ•˜๊ฒŒ๋„, ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ทธ์™€ ๊ด€๋ จ๋œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ํŒŸ๋„ ํ•จ๊ป˜ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ •์˜ํ•œ YAML ํŒŒ์ผ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž. 

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zedd-nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: zedd-nginx
  template:
    metadata:
      name: zedd-nginx-pod
      labels:
        app: zedd-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80

 

์œ„ YAML ํŒŒ์ผ์„ ๋ฐฐํฌํ•ด๋ณด๊ณ , ์ƒ์„ฑํ•œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

 

$ kubectl apply -f nginx-deployment.yaml
$ kubectl get deploy

 

 

์œ„์™€ ๊ฐ™์ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค. READY ํ•ญ๋ชฉ์€ ์ƒ์„ฑ๋œ ํŒŸ์˜ ๊ฐœ์ˆ˜์ด๊ณ , ํ˜„์žฌ 3๊ฐœ ๋ชจ๋‘ ์ด์šฉ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(AVAILABLE)์ด๋‹ค. ํ•จ๊ป˜ ์ƒ์„ฑ๋œ ํŒŸ๊ณผ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๋„ ๊ฐ™์ด ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.

 

 

YAML์—์„œ ์ •์˜ํ•œ ๋Œ€๋กœ 1๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ 3๊ฐœ์˜ ํŒŸ์ด ์ž˜ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์œ„ ํ™”๋ฉด์—์„œ ์ž ๊น ์ฃผ๋ชฉํ•  ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋‹ค ๋ฐ”๋กœ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŸ์˜ ์ด๋ฆ„ ํ•ญ๋ชฉ์— ์žˆ๋Š” "9d878d95c" ๋ผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ์ด๋Š” ํŒŸ์„ ์ƒ์„ฑํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์ฆ‰, YAML ํŒŒ์ผ ๋‚ด์˜ template ํ‚ค์›Œ๋“œ ๋ถ€๋ถ„์œผ๋กœ ์ธํ•ด ์ƒ๊ธด ๊ฐ’์ด๋‹ค. ์ฃผ๋ชฉํ•˜๋Š” ์ด์œ ๋Š” ์ž ์‹œ ํ›„ ๋“ฑ์žฅํ•˜๋ฏ€๋กœ ๋จธ๋ฆฟ์†์— ๊ธฐ์–ตํ•ด๋‘์ž.

 

์ง€๊ธˆ๊นŒ์ง€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณด๋ฉด์„œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•  ๋•Œ์™€๋Š” ๋‹ค๋ฅธ ์ฐจ๋ณ„์ ์ด๋‚˜ ํŽธํ•œ ์ ์ด ๋Š๊ปด์กŒ๋Š”๊ฐ€? ์†”์งํžˆ ์•„๋‹ˆ๋‹ค. ๋‹จ์ง€ ๊ทธ๋ƒฅ YAML ํŒŒ์ผ์— ์ž‘์„ฑ๋œ ๋‚ด์šฉ๋งŒ ๋‹ฌ๋ž์„ ๋ฟ, ์•„์ง๊นŒ์ง€๋Š” ๊ตณ์ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด์ œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋งŒ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

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

 

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‹ค์Šต์„ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž. ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ž ์‹œ ์œ„์—์„œ ์ƒ์„ฑํ•œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์‚ญ์ œํ•˜๋˜ ๋™์ผํ•œ YAML ํŒŒ์ผ์„ ๋‚ด์šฉ์œผ๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ด๋ณด์ž. ๋‹จ, ์ƒ์„ฑ ์‹œ --record ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ๋งŒ ๋‹ค๋ฅด๋‹ค.

 

$ kubectl delete -f nginx-deployment.yaml
$ kubectl apply -f nginx-deployment.yaml --record

 

๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด ์ƒ์„ฑ ์‹œ ์„ค์ •ํ•œ ํŒŸ์˜ ์ด๋ฏธ์ง€ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ด๋ณด์ž. ์œ„์—์„œ ๋ช‡ ๋ฒˆ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. kubectl set image ๋ช…๋ น์–ด๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ง์ ‘ YAML ํŒŒ์ผ์„ ๋ณ€๊ฒฝ ํ›„, kubect apply -f ๋ช…๋ น์–ด๋ฅผ ์“ฐ๋Š” ๋ฒ•, ์•„๋‹ˆ๋ฉด kubectl edit ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋Š” kubectl set image ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.

 

$ kubectl set image deployment zedd-nginx-deployment nginx=nginx:1.11 --record

 

์œ„ ๋ช…๋ น์–ด์—์„œ nginx=nginx:1.11 ์—์„œ ์•ž ๋ถ€๋ถ„์˜ 'nginx' ๋ผ๋Š” ๋‹จ์–ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ์ •์˜ํ•œ YAML ํŒŒ์ผ์—์„œ spec.template.spec.containers.name์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ด๋ฏธ์ง€๊ฐ€ ๋ณ€๊ฒฝ(updated)๋˜์—ˆ๋‹ค๋Š” ์ถœ๋ ฅ์ด ๋œฐ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŸ์˜ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ด๋ณด์ž.

 

 

์œ„ ํ™”๋ฉด์˜ ์•„๋žซ๋ถ€๋ถ„์ธ ํŒŸ์˜ ๋ชฉ๋ก๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ์•„๊นŒ ์ฃผ๋ชฉํ•˜๋ผ๊ณ  ํ–ˆ๋˜ ํ•ด์‰ฌ๊ฐ’ ํ‚ค์›Œ๋“œ์˜€๋˜ "9d878d95c" ์—์„œ "5fdb947f4b"๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋ชฉ๋ก์„ ์‚ดํŽด๋ณด๋ฉด "5fdb947f4b" ํ‚ค์›Œ๋“œ๊ฐ€ ์ด๋ฆ„์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ๊ฒจ๋‚ฌ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ๋ถ€๋ถ„์€ ๊ทธ ์ด์ „์˜ ๋ฒ„์ „์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” "9d878d95c" ํ‚ค์›Œ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ์กด์žฌํ•˜๊ธด ํ•˜์ง€๋งŒ ๊ทธ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์—์„œ ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์‹œ ๋งํ•ด, ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ํŒŸ์˜ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•จ์œผ๋กœ์จ ์‹ ๊ทœ ๋ฒ„์ „์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๋˜ ์ด์ „ ๋ฒ„์ „์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋‚จ๊ฒจ๋‘๊ณ  ์žˆ๋‹ค. ์ฆ‰, ์ด์ „ ์ •๋ณด๋ฅผ ๋ฆฌ๋น„์ „์œผ๋กœ์„œ ๋ณด์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฆฌ๋น„์ „ ์ •๋ณด ์„ธ๋ถ€์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

$ kubectl rollout hisotry deployment zedd-nginx-deployment

 

 

๊ทธ๋Ÿฌ๋ฉด ์œ„ ํ™”๋ฉด์ฒ˜๋Ÿผ REVISION ๋ฒˆํ˜ธ์™€ ํ•ด๋‹น ๋ฆฌ๋น„์ „์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ kubectl ๋ช…๋ น์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” CHANGE-CAUSE ํ•ญ๋ชฉ๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, CHANGE-CAUSE ํ•ญ๋ชฉ์€ ์œ„์—์„œ ์ตœ์ดˆ ๋ฒ„์ „์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์™€ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ --record ์˜ต์…˜์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด <NONE> ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ์ ๋„ ์žŠ์ง€๋ง์ž.

 

ํ˜„์žฌ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋ฒ„์ „์€ REVISION ๊ฐ’์ด 2์ธ ์ƒํƒœ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฒ„์ „ 1๋กœ ๋Œ์•„๊ฐ€๋Š” ๋กค๋ฐฑ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด๋ณด์ž. kubectl rollout undo ๋ช…๋ น์–ด์™€ --to-revision ์˜ต์…˜์— ๋Œ์•„๊ฐˆ ๋ฆฌ๋น„์ „ ๋ฒ„์ „์„ ๋ช…์‹œํ•ด์ค€๋‹ค. ๋‹น์—ฐํžˆ ์—ฌ๊ธฐ์„œ ๋ฆฌ๋น„์ „ ๋ฒ„์ „์€ ์œ„ ํ™”๋ฉด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” REVISION์— ๋Œ€์‘๋˜๋Š” ์ˆซ์ž์ด๋‹ค.

 

$ kubectl rollout undo deployment zedd-nginx-deployment --to-revision=1
$ kubectl get rs,pod

 

๋ฒ„์ „ 1๋กœ ๋กค๋ฐฑ ํ›„, ํ˜„์žฌ ์ƒํƒœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŸ์˜ ๋ชฉ๋ก์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ถœ๋ ฅํ•ด๋ณด์•˜๋‹ค.

 

 

ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ํŒŸ ์ด๋ฆ„์— ์ตœ์ดˆ ๋ฒ„์ „์ด์—ˆ๋˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์ด๋ฆ„์— ๋ถ™์–ด์žˆ๋˜ ํ‚ค์›Œ๋“œ์ธ "9d878d95c"๊ฐ€ ๋‹ค์‹œ ๋ถ™์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ํ˜„์žฌ ์„ค์ •๋œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ํŒŸ์˜ ๋ฒ„์ „์˜ ์ •๋ณด๊ฐ€ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด, ๊ทธ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋‹น์—ฐํžˆ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋„ kubectl describe ๋ช…๋ น์–ด๊ฐ€ ์ ์šฉ์ด ๋œ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ •๋ณด ์ค‘์— Annotations ํ•ญ๋ชฉ๊ณผ NewreplicaSet ํ•ญ๋ชฉ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

$ kubect describe deployment zedd-nginx-deployment

 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์‹ค์Šต๊ณผ ํ•จ๊ป˜ ์•Œ์•„๋ณด์•˜๋‹ค. ์ด์ œ์•ผ ์ข€ ์‹ค๋ฌด์—์„œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์™œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 


์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ์žˆ์–ด์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์ตํ˜€์•ผ ํ•  ๊ฐœ๋…๋“ค์ธ ํŒŸ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ๊ทธ๋ฆฌ๊ณ  ๋””ํ”Œ๋กœ์ด๋จผํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐฐํฌํ•œ ํŒŸ์— ์™ธ๋ถ€์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ์•„๋ž˜๋Š” ๋ณธ ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ kubectl ๋ช…๋ น์–ด ํ‘œ์ด๋‹ค. ์•ž์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ•™์Šตํ•˜๊ฑฐ๋‚˜ ์ด์šฉํ•˜๋ฉด์„œ cheat sheet ์ฒ˜๋Ÿผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค.


๋ช…๋ น์–ด ์˜๋ฏธ ํŠน์ง•
kubectl get [OBJECT] ํŠน์ • ์˜ค๋ธŒ์ ํŠธ์˜ ๋ชฉ๋ก์„ ์ถœ๋ ฅ  
kubectl describe [OBJECT] [OBJECT NAME] ํŠน์ • ์˜ค๋ธŒ์ ํŠธ์˜ ํŠน์ • ์ด๋ฆ„์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์˜ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ  
kubectl exec -it [POD NAME] -c [CONTAINER NAME] [COMMAND] ํŠน์ • ํŒŒ๋“œ์˜ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ docker exec ๊ณผ ์œ ์‚ฌ
kubectl logs [POD NAME] ํŠน์ • ํŒŒ๋“œ์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธ  
kubectl delete -f [YAML FILENAME] ํŠน์ • ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ญ์ œ YAML ํŒŒ์ผ์„ ์ง€์ •ํ•ด์„œ ๊ทธ YAML ํŒŒ์ผ์ด ์ƒ์„ฑํ•œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ญ์ œ
kubectl delete pod [POD NAME] ํŠน์ • ํŒŸ์„ ์‚ญ์ œ  

 

๋ฐ˜์‘ํ˜•