[Kubernetes] 2. Kubernetes ๊ธฐ๋ณธ ๊ตฌ์„ฑ๊ณผ ๊ฐ์ฒด(object)

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Kubernetes์™€ Container Deployment์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋กœ ์„œ๋น„์Šค ๋ฐฐํฌํ•˜๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •๊ณผ Docker Swarm ๋“ฑ์˜ ๋‹ค๋ฅธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํˆด๊ณผ ์–ด๋–ค ์ ์ด ๋‹ค๋ฅธ์ง€ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค.

 

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

 

 

 

 

Kubernetes์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ Kubernetes๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ์กด์˜ Docker์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์ค‘์•™์˜ Docker Engine์ด ์ž๋ฆฌ์žก๊ณ  ์žˆ์–ด, ์ด ์—”์ง„์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ํ˜•ํƒœ๋Š” ๋‹จ์ผ ๋จธ์‹  ํ˜น์€ ๋…ธ๋“œ์—์„œ Docker๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜€๊ณ , ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์šด์˜๊ณผ ๋ฐฐํฌ๋ฅผ ํ•œ ๋จธ์‹ ์—์„œ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์˜€์Šต๋‹ˆ๋‹ค.

 

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

 

 

Kubernetes๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์œ„์™€ ๊ฐ™์€ ๋ฟŒ๋ฆฌ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ž€, ๋…๋ฆฝ๋œ Kubernetes 1๊ฐœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋Ÿฌ์Šคํ„ฐ๋ถ€ํ„ฐ ํ•˜์—ฌ๊ธˆ ์—ฌ๋Ÿฌ ๋จธ์‹ ๊ณผ ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ๋Š” ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ Master์™€ Node๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. Master๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋ฅผ ์ œ์–ดํ•˜๋ฉฐ ์ด๋Š” ๋ฌผ๋ฆฌ์ ์ธ ๊ธฐ๊ณ„ ๋˜๋Š” ๊ฐ€์ƒ์ ์ธ ๊ธฐ๊ณ„(๊ฐ€์ƒ ๋จธ์‹ )๋กœ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์œ„ ๋…ธ๋“œ๋“ค์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐฐํฌ๋˜๋Š” ๋จธ์‹ ์œผ๋กœ ์ด ์—ญ์‹œ, ๋ฌผ๋ฆฌ์ ์ธ ๊ธฐ๊ณ„ ํ˜น์€ ๊ฐ€์ƒ์ ์ธ ๊ธฐ๊ณ„(๊ฐ€์ƒ ๋จธ์‹ )๋กœ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ํฐ ๊ตฌ์กฐ๋ฅผ ๋ดค์„ ๋•Œ๋Š” ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ œ์–ดํ•˜๋Š” ๋งˆ์Šคํ„ฐ์™€ ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ณ„๋„์˜ ๋จธ์‹ ์œผ๋กœ์จ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋“ค์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„๊นŒ์š”? 

 

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

 

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

 

 

 

 

Kubernetes ๊ฐ์ฒด

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

 

๊ทธ๋Ÿฐ Kubernetes์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ ์šฉ๋„๊ฐ€ ์žฌ๊ฐ ๋‹ค๋ฅด๋ฉฐ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Object (๊ฐ์ฒด)

Kubernetes์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„์ธ object๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ฆฌ์†Œ์Šค์—๋Š” ์ปจํ…Œ์ด๋„ˆ, ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ์ด ์žˆ๊ณ , Controller๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์–ด ์ง‘๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด object๋ฅผ CLI์˜ ์ปค๋งจ๋“œ๋‚˜ json, yaml ๋“ฑ์˜ ํŒŒ์ผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • Pod
  • Service
  • Volume
  • Namespace

Kubernetes๋ฅผ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์œ„ 4๊ฐ€์ง€ ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋ณธ ๊ฐ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปจํ…Œ์ด๋„ˆํ™” ๋˜์–ด ๋ฐฐํฌ๋˜๋Š” ์›Œํฌ๋กœ๋“œ(Workload)๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๊ฐ์ฒด์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ Object์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

 

  • metadata: Object์˜ Meta ์ •๋ณด
  • spec: Object๊ฐ€ ์›ํ•˜๋Š” ์ƒํƒœ (Desired State)
  • status: Object์˜ ํ˜„์žฌ ์ƒํƒœ (Current State)

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ object๋Š” CRD(Custom Resource Definition)์„ ์ด์šฉํ•˜์—ฌ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” object๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ๊ธ€์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

Pod

Pod์€ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ Docker์ฒ˜๋Ÿผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐฐํฌํ•˜์ง€ ์•Š๊ณ , Pod์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ฐฐํฌํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ Pod์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ YAML๋กœ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: nk-app
spec: 
  containers: 
    - name: nk-app
      image: neonkid/nk-app:latest
      ports:
      - containerPort: 4001

yaml์„ ์ž‘์„ฑ์‹œ ์ฃผ์˜ํ•  ์ ์€ ๊ฐ„๊ฒฉ ๋‹จ์œ„๊ฐ€ tab์ด ์•„๋‹Œ space (๊ณต๋ฐฑ)์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…๋“œ๋ ค๋ณด์ž๋ฉด..

 

  • apiVersion: ์œ„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Kubernetes์˜ API ๋ฒ„์ „
  • kind: ๋ฆฌ์†Œ์Šค์˜ ์ข…๋ฅ˜ (LoadBalancer, Service, Deployment ๋“ฑ)
  • metadata: ๋ฆฌ์†Œ์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ (๋ฆฌ์†Œ์Šค ์ด๋ฆ„, label ๋“ฑ)
  • spec: ๋ฆฌ์†Œ์Šค์˜ ์ŠคํŽ™ (์‚ฌ์šฉํ•  ํฌํŠธ ์ฃผ์†Œ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ฃผ์†Œ ๋“ฑ)

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

 

 

Pod์€ ์œ„์˜ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐํฌํ•˜๋Š” ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์™€ Pod์ด๋ผ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‹œ์Šคํ…œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ณ„๋„๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 

 

์‹œ์Šคํ…œ ์ปจํ…Œ์ด๋„ˆ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋กœ๊ฐ€ ๊ฐ™์€ ๋””์Šคํฌ ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜๋ฉฐ, Pod์ด ์†Œ๋ฉธ๋˜๋ฉด ๋ณผ๋ฅจ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค ๋˜ํ•œ ๊ฐ™์ด ์†Œ๋ฉธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

 

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

 

์ „ํ†ต์ ์ธ ๋ฐฐํฌ ๋ฐฉ์‹์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ฉด ์ด๋ฅผ ์„œ๋น„์Šค ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด HAProxy๋‚˜ nginx ๋“ฑ์„ ๋ณ„๋„๋กœ ๊ตฌ์ถ•ํ•˜์—ฌ ์šด์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kubernetes์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์™€ ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐ™์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ์ด๋Š” Docker๋กœ ๋ฐฐํฌํ•  ๋–„๋„ ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ ์„ ํƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kubernetes์—์„œ๋Š” ์ด๊ฒƒ์ด ํ•„์ˆ˜์ ์œผ๋กœ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

 

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

 

 

Volume

์œ„ ์ด๋ฏธ์ง€์—์„œ๋„ ์ž ๊น ์–ธ๊ธ‰๋˜์—ˆ์ง€๋งŒ Volume์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ๋ณผ๋ฅจ๊ณผ ์—ฌ๊ธฐ์„œ์˜ ๋ณผ๋ฅจ์€ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

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

 

Traditional Intfrastructure๋กœ ๋ดค์„ ๋•Œ, ์ด ๋ชจ์Šต์€ ์Šคํ† ๋ฆฌ์ง€์™€ ์„œ๋ฒ„์˜ ๋ชจ์Šต์œผ๋กœ ์—ฐ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Pod์— ๋‚ด์žฅ๋œ ์Šคํ† ๋ฆฌ์ง€๋Š” Pod์ด ์†Œ๋ฉธ๋˜๋ฉด ๊ทธ ์ฆ‰์‹œ ๊ฐ™์ด ์†Œ๋ฉธ๋˜๋Š”๋ฐ, ์œ„์™€ ๊ฐ™์ด Storage Volume ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Pod๊ณผ ๋…๋ฆฝ๋œ ๋˜ ๋‹ค๋ฅธ Storage๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋“ค์€ ๊ฐ๊ฐ์˜ Pod ํ˜น์€ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ณต์œ ๋˜๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ DB Pod ์•ˆ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 3๊ฐœ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด๋“ค 3๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค๋ฅธ์ชฝ์˜ Storage Volume์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. 

 

๊ฐ™์€ ๋งฅ๋ฝ์œผ๋กœ ์œ„ ์ด๋ฏธ์ง€์—์„œ ์šด์˜ํ•˜๋Š” ์›น์˜ ๋กœ๊ทธ๋‚˜, DB ์ธ์Šคํ„ด์Šค์˜ ๋กœ๊ทธ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ด ์—ญ์‹œ ๋ณ„๋„์˜ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Kubernetes์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์™ธ์žฅ ๋””์Šคํฌ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ง€์›ํ•˜๋Š” ํ”„๋กœ๋น„์ €๋‹์€ ์•„๋ž˜์˜ Kubernetes ๊ณต์‹ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

 

https://kubernetes.io/ko/docs/concepts/storage/storage-classes/

 

์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค

์ด ๋ฌธ์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์Šคํ† ๋ฆฌ์ง€ํด๋ž˜์Šค์˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•œ๋‹ค. ๋ณผ๋ฅจ๊ณผ ํผ์‹œ์Šคํ„ดํŠธ ๋ณผ๋ฅจ์— ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ์†Œ๊ฐœ ์Šคํ† ๋ฆฌ์ง€ํด๋ž˜์Šค๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€์˜ "classes"๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜

kubernetes.io

 

Service

Pod์€ Kubernetes Cluster์—์„œ ์ œ๊ณตํ•˜๋Š” IP๋ฅผ ๋ถ€์—ฌ ๋ฐ›์•„ ๊ฐ Pod๋“ค๊ณผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋“ค IP๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ IP์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์™ธ๋ถ€์—์„œ ๋‚ด๊ฐ€ ๋ฐฐํฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด Service ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ฒ˜๋Ÿผ Service๋Š” Pod์„ ์ƒ์„ฑํ•œ ํ›„, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋“ฑ์„ ์ด์šฉํ•ด ํ•˜๋‚˜์˜ IP์™€ ํฌํŠธ ์ฃผ์†Œ๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Pod์˜ ์žฅ์ ์€ ๋™์  ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. Docker Swarm์ฒ˜๋Ÿผ ์ •์ ์œผ๋กœ Replica์˜ ์ˆ˜๋ฅผ ์ฃผ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋“ฑ์˜ ์žฅ์• ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ž๋™์œผ๋กœ Restart ๋˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด Pod์˜ IP๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋“ฑ์˜ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

๋˜, Auto scaling ๋“ฑ์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด Pod์ด ๋™์ ์œผ๋กœ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด ์—ญ์‹œ Pod์˜ IP๊ฐ€ ๊ณ ์ •์ ์œผ๋กœ ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์ด๋Ÿฌํ•œ ์ ๊นŒ์ง€ Watchingํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ฐพ์•„๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ label๊ณผ label selector๋ฅผ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค Pod ์ด์—ˆ๋Š”์ง€ ์ด๋ฆ„์„ ๋ช…์‹œํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

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

kind: Service
apiVersion: v1
metadata:
  name: nk-service
spec:
  selector:
    app: nk-app
  ports:
    protocol: TCP
    port: 80
    targetPort: 4001

YAML ํŒŒ์ผ๋กœ ์ •์˜ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์€๋ฐ, ์œ„์—์„œ Pod์„ ์ž‘์„ฑํ•  ๋•Œ๋ž‘ ๋น„๊ตํ•ด๋ณด๋ฉด ์ข€ ๊ฐ์ด ์˜ค์‹ค ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ kind๋Š” ๊ฐ์ฒด์˜ ์ข…๋ฅ˜๋ฅผ ์ •ํ•˜๊ณ , ๋ฐ‘์— ๋ถ€๋ถ„์˜ ๋‚ด์šฉ์€ ๋Œ€๋ถ€๋ถ„ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋ฉฐ spec์˜ ๊ฒฝ์šฐ๋งŒ ๊ฐ์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Service ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ spec์— label selector๋ฅผ ์ด์šฉํ•ด label์ด app:nk-app์ธ Pod๋งŒ์„ ์„ ํƒํ•ด์„œ ์„œ๋น„์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ํ•˜๋‹จ์— ์ ์€ ports์˜ ๊ฒฝ์šฐ protocol๊ณผ port์— ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•  ํฌํŠธ ์ฃผ์†Œ์™€ ๊ทธ ์š”์ฒญ์„ ๋ฐ›์„ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

Namespace

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

 

์ด๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Namespace์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ƒ์„ฑํ•œ Pod์ด๋‚˜ Volume ๋“ฑ์ด ์–ด๋–ค ์šฉ๋„์ธ์ง€ ๊ทธ๋ฃนํ™” ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ Service, Pod, Volume์€ ๋ฐ”๋กœ ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„๋กœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ์‚ฌ์šฉ์ž ๋˜ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ํฐ ์žฅ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ์ž, ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋“ฑ์„ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ฃ .

 

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

 

์ด ์™ธ์—๋„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  • ์‚ฌ์šฉ์ž๋ณ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„ ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ • ๊ธฐ๋Šฅ
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„ ๋ฆฌ์†Œ์Šค ํ• ๋‹น๋Ÿ‰ ์ง€์ • ๊ธฐ๋Šฅ
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„ ๊ฐ์ฒด(object: Service, Pod) ์ง€์ • ๊ฐ€๋Šฅ

 

ํ•œ ๊ฐ€์ง€ ํ™•์ธํ•ด์•ผํ•  ์ ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋“ค ์˜์—ญ์ด ๋ถ„๋ฆฌ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์€ ๋งž์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜์—ญ์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ๊ฐ™์€ ๋จธ์‹ ์— ์žˆ๊ณ , ๊ทธ๋“ค๋ผ๋ฆฌ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ๋„ ๋ฌผ๋ฆฌ์ ์ธ ์„ค์ • ์—†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

(๋งŒ์•ฝ, ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ ๋งˆ์ € ์›ํ•œ๋‹ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.)

 

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์„œ๋น„์Šค ์šด์˜์— ๋Œ€ํ•ด์„œ๋Š” ํฌ๊ฒŒ ๊ด€์—ฌ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋Š” ๋ฐ ์žˆ์–ด์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ฉฐ ๋งŒ์•ฝ ํŒ€์„ ๋‚˜๋ˆ„์ง€ ์•Š๋”๋ผ๋„ ๋ฆฌ์†Œ์Šค๋ณ„, API๋ณ„, Web๋ณ„ ์ด๋Ÿฐ์‹์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค์‹์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ๊ธฐ์ˆ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ž์œ ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์€ Google, Kubernetes๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ œ์‹œํ•œ Best Practice์ž…๋‹ˆ๋‹ค.

 

 

Label

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

 

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

...
metadata:
  labels:
    app: nk-app
...

Label์€ ์œ„์™€ ๊ฐ™์ด Key์™€ valueํ˜•ํƒœ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋ฆฌ์†Œ์Šค์—๋Š” n๊ฐœ์˜ ๋ผ๋ฒจ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋ผ๋ฒจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋Š” label selector๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • Equality based selector
  • Set based selector

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” Label selector๋Š” ์œ„์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Equality based selector๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ฐ’์˜ ๋ฌธ์ž์—ด์„ equals(๋น„๊ต)ํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , Set based selector๋Š” Set(์ง‘ํ•ฉ)์„ ์‚ฌ์šฉํ•˜์—ฌ app์ด๋ผ๋Š” key ์•ˆ์— nk-app์ด๋ผ๋Š” ๊ฐ’์ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

kind: Service
apiVersion: v1
metadata:
  name: nk-service
spec:
  selector:
    app: nk-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 4001

์„œ๋น„์Šค ๊ฐ์ฒด๋ฅผ ์ด์•ผ๊ธฐํ•  ๋•Œ ์ž ๊น ๋‹ค๋ฃฌ ๊ฒƒ์ด์ง€๋งŒ ์œ„์—์„œ ์ •์˜ํ•œ ๋ผ๋ฒจ์„ label selector๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๊ฐ์ฒด์—์„œ spec: selector: ๋ฅผ ์ด์šฉํ•ด key-value ํ˜•ํƒœ๋กœ ๋ผ๋ฒจ์„ ์ •์˜ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

๋งˆ์น˜๋ฉฐ...

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์ด๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. Docker๋ฅผ ๋‹ค๋ฃจ์‹œ๋‹ค๊ฐ€ ์˜ค์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์•„๋งˆ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์›Œ์•ผํ•œ๋‹ค๋Š” ๊นŠ์€ ๋Ÿฌ๋‹ ์ปค๋ธŒ์— ๋ถ€๋‹ด์„ ๋Š๋ผ์‹ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

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

 

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

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Deployment, DaemonSet ๋“ฑ์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์ด์–ด์„œ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

์ฐธ๊ณ :

(์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ๋ฌธ์„œ) https://kubernetes.io/ko/docs/concepts/

(์กฐ๋Œ€ํ˜‘์˜ ๋ธ”๋กœ๊ทธ) https://bcho.tistory.com/1256

(ํ•˜๋‚˜์”ฉ ์ ์„ ์ง์–ด๊ฐ€๋ฉฐ) https://dailyheumsi.tistory.com/208

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments