์•ˆ๋…•ํ•˜์„ธ์š”? ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ฐœ๋…์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ง€๋‚œ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. ์˜ค๋Š˜์€, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์žฅ์ ์„ ์œ„์ฃผ๋กœ ์„ค๋ช…์„ ๋“œ๋ฆฐ ๋’ค ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ž€?

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

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์žฅ์ 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์žฅ์ ์„ ์‚ดํŽด๋ณด๊ธฐ ์ด์ „์—, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ตœ์†Œ ๋ฐฐํฌ ๋‹จ์œ„์ธ ‘ํŒŒ๋“œ’์— ๋Œ€ํ•ด ์„ค๋ช… ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒŒ๋“œ(Pod)๋ž€, ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ณต์œ ๋œ ์Šคํ† ๋ฆฌ์ง€, ๋„คํŠธ์›Œํฌ ๋“ฑ์„ ํฌํ•จํ•œ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฌด ์ค‘๋‹จ ์„œ๋น„์Šค ์ œ๊ณต.
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์„œ๋น„์Šค๊ฐ€ ๊ณ ์žฅ ์—†์ด ์˜ค๋žซ๋™์•ˆ ์ง€์†๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŒŒ๋“œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋ณต์ œํ•ด ๋†“์œผ๋ฉด, ํ•˜๋‚˜์˜ ํŒŒ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋‹ค๋ฅธ ํŒŒ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์ง€์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ž๊ฐ€ํšŒ๋ณต ๊ธฐ๋Šฅ(auto-placement, auto-restart, auto-replication, auto-scaling)์œผ๋กœ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ํŒŒ๋“œ๋ฅผ ํšŒ๋ณต์‹œํ‚ต๋‹ˆ๋‹ค.

2. ๋›ฐ์–ด๋‚œ ์ด์‹์„ฑ.
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์šด์˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๋…๋ฆฝ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ •ํ•œ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ํ•˜๋‚˜์˜ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(Public, Private, Hybrid)์—์„œ ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ด์ „ํ•  ๋•Œ, ์‚ฌ์šฉ์ž๋Š” ๋ณ„๋„์˜ ๋ณต์žกํ•œ ์ด์ „ ๊ณผ์ •์„ ๊ฑฐ์น  ํ•„์š” ์—†์ด ์ปจํ…Œ์ด๋„ˆ๋“ค๋งŒ ์ด์ „์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ธ Helm์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์œผ๋กœ ์ด์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

4. ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ.
์ž์› ์‚ฌ์šฉ๋ฅ ์— ๋”ฐ๋ผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ž๋™์œผ๋กœ ํŒŒ๋“œ์˜ ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, CPU ์‚ฌ์šฉ๋ฅ ์ด 300%๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ Horizontal Pod Autoscaler๊ฐ€ ํŒŒ๋“œ๋ฅผ 1๊ฐœ์—์„œ 7๊ฐœ๊นŒ์ง€ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. CPU ์‚ฌ์šฉ๋ฅ ์ด ๋‹ค์‹œ ๊ฐ์†Œํ•˜๊ฒŒ ๋˜๋ฉด ํŒŒ๋“œ์˜ ๊ฐœ์ˆ˜๋„ ์ ์ฐจ ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


Flow

1. ๊ณต๊ฐœ ์ €์žฅ์†Œ์ธ ๋„์ปค ํ—ˆ๋ธŒ์—์„œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
2. ์ด๋ฏธ์ง€๋กœ ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
3. ์™ธ๋ถ€์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์›น์„œ๋น„์Šค์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต โ€“ ์›น์„œ๋น„์Šค๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์˜ฌ๋ฆฌ๊ธฐ

0. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
๋งํฌ์ฐธ์กฐ

1. ์‹ค์Šต์— ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.(์ž‘์„ฑ์ž์˜ ๊ณ„์ •์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค)

docker search dodghek

  1-1. ์ด์ „ ์‹ค์Šต์—์„œ ์ œ์ž‘ํ•œ myimage๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  

docker pull dodghek/myimage -a

  1-2. ๋ถˆ๋Ÿฌ์˜จ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  

docker images

  

2. ์ด๋ฏธ์ง€๋กœ deployment๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

kubectl run myapp --image=dodghek/myimage:0.1 --port=80

* deployment๋ž€, ์ƒ์„ฑํ•  ํŒŒ๋“œ๋ฅผ ์ •์˜ํ•ด๋†“์€ ๋ช…์„ธ์„œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
* Deployment์˜ ์ด๋ฆ„์„ myapp์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ 80๋ฒˆ ํฌํŠธ๋ฅผ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  2-1. Pod์˜ ๋…ผ๋ฆฌ์  ์ง‘ํ•ฉ์ธ Service๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  

kubectl expose deployment myapp

  2-2. ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  
  * ์„œ๋น„์Šค๋Š” ์™ธ๋ถ€ ์ ‘๊ทผ๊ณผ ๊ด€๋ จ ์žˆ๋Š” ์ •์ฑ…๋“ค์„ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  * ํ˜„์žฌ myapp ์„œ๋น„์Šค๋Š” ClusterIP์˜ ํ˜•ํƒœ๋กœ ๋‚ด๋ถ€ ํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

  2-3. myapp ์„œ๋น„์Šค๋ฅผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  

kubectl edit service myapp

  

  type์˜ ClusterIP๋ฅผ NodePort๋กœ ๋ณ€๊ฒฝ ํ›„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  2-4. ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
  

kubectl get service

  
* ์„œ๋น„์Šค์˜ ํ˜•ํƒœ๊ฐ€ NodePort๋กœ ๋ณ€๊ฒฝ ๋˜๋ฉด์„œ, 30970๋ฒˆ ์™ธ๋ถ€ํฌํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. ์™ธ๋ถ€์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์›น์„œ๋น„์Šค์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
IP:30970์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.


์ฐธ๊ณ ๋ฌธํ—Œ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ํŽ˜์ด์ง€ : http://kubernetes.io/

ํ† ๋ก  ์ฐธ๊ฐ€

์ด๋ฉ”์ผ์€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์ž…๋ ฅ์ฐฝ์€ * ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.