์ด์ „ ํฌ์ŠคํŒ…
์ปจํ…Œ์ด๋„ˆ์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ
์ปจํ…Œ์ด๋„ˆ ์‹ค์Šต(Tutorial)



์•ˆ๋…•ํ•˜์„ธ์š”? ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ฐ„๋‹จํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

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

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปจ์…‰



Pod
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ, ํŒŒ๋“œ๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ ์ž์›, ๋„คํŠธ์›Œํฌ ์ž์›(IP, port) ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ์˜ต์…˜ ๋“ฑ์ด ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ReplicaSet
๋ณต์ œ๋œ Pod๋“ค์ด ์œ ์ง€๋˜๋„๋ก ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
Namespace
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ง€์›ํ•˜๋Š” ๊ฐ€์ƒ ํด๋Ÿฌ์Šคํ„ฐ๋กœ, ํด๋Ÿฌ์Šคํ„ฐ๋“ค์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Volume
ํŒŒ๋“œ ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
Service
ํŒŒ๋“œ๋“ค์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

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


์‹ค์Šต FLOW

1. ๊ณต๊ฐœ ์ €์žฅ์†Œ์ธ Docker Hub์—์„œ Docker image๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
2. Image๋กœ Pod๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
3. ์™ธ๋ถ€์—์„œ Container์˜ ์›น ์„œ๋น„์Šค์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

Tutorial : ์›น์„œ๋น„์Šค๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์˜ฌ๋ฆฌ๊ธฐ

1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.
๋งํฌ์ฐธ์กฐ

2. ์„œ๋ฒ„์— ์ ‘์†ํ•œ ๋‹ค์Œ, ์‹ค์Šต์— ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

docker search dodghek


2-1. ์ด์ „ ์ปจํ…Œ์ด๋„ˆ ์‹ค์Šต์—์„œ ๋ฐฐํฌํ•œ ์ด๋ฏธ์ง€(myimage)๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

docker pull dodghek/myimage -a

2-2. ์ด๋ฏธ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋‹ค์šด๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker images

3. ์ด๋ฏธ์ง€๋กœ deployment๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. deployment๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด image๋กœ๋ถ€ํ„ฐ Pod๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

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


3-1. Pod์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” Service๋ฅผ deployment exposeํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

kubectl expose deployment myapp

3-2. ์ƒ์„ฑ๋œ Service์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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


3-3. ์™ธ๋ถ€(๋ธŒ๋ผ์šฐ์ €)์—์„œ Pod์˜ ์›น ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค๋ฅผ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

kubectl edit service myapp


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

* Service Types
– ClusterIP (default) : Cluster ๋‚ด์—์„œ๋งŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
– NodePort : Cluster ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
– LoadBalancer : ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3-4. ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

kubectl get service


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

4. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์™ธ๋ถ€(๋ธŒ๋ผ์šฐ์ €)์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์›น์„œ๋น„์Šค์— ์ ‘์†ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์—ด๊ณ  IP:30970์œผ๋กœ Pod์˜ ์›น ์„œ๋น„์Šค์— ์ ‘์†ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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


์ฐธ๊ณ ๋ฌธํ—Œ

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