์ƒˆ์†Œ์‹

Containers/Kubernetes

๐Ÿ“š[Sprint1] ์ปจํ…Œ์ด๋„ˆ ํ•œ๋ฐฉ ์ •๋ฆฌ

  • -

*ํ•ด๋‹น ๊ธ€์€ ์ธํ”„๋Ÿฐ ใ€Ž์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ) - Sprint1ใ€ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณต์Šต&์ •๋ฆฌ ์ฐจ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ๊ธฐ์ˆ ์˜ ํ๋ฆ„์œผ๋กœ ์ดํ•ดํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ

Kubernetes๋Š” DevOps์™€ Container Infra ํ™˜๊ฒฝ์—์„œ ๋นผ๋†“์„ ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” OS์˜ ๊ธฐ์ˆ ๋ฐœ์ „๊ณผ ๋”๋ถˆ์–ด ๊ฐ€์ƒํ™” ๋ฐ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ฐฐ๊ฒฝ ํ๋ฆ„์„ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Linux OS ํ๋ฆ„

Linux OS๋Š” UNIX๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋ฐ๋น„์•ˆ๊ณ„์—ด๊ณผ ๋ ˆ๋“œํ–‡๊ณ„์—ด๋กœ ๋ฐฐํฌํŒ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ณ  RedHat์—์„œ๋Š” ๊ธฐ์—…์šฉ ๋ฐฐํฌํŒ์ธ Red Hat Enterprise Linux(RHEL)์„ ์œ ๋ฃŒ์ œ๊ณตํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…์—์„œ๋Š” ํ•ด๋‹น ๋ฐฐํฌํŒ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ CentOS, Ubuntu ๋„ ๋ณ‘ํ–‰ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ RedHat ๋ฐฐํฌํŒ ๊ฐœ๋ฐœ ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด์„œ CentOS๋Š” RHEL์˜ ๋ฌด๋ฃŒ ๋ฐฐํฌํŒ ํ˜•์‹์ด ์•„๋‹ˆ๋ผ RHEL ์ •์‹๋ฐฐํฌํŒ ์ถœ์‹œ ์ด์ „์˜ ๊ฐœ๋ฐœ ๋ฐ ์•ˆ์ •ํ™”๋ฅผ ์œ„ํ•œ ์—ญํ• ์„ ํ•˜๊ฒŒ๋˜๋ฉด์„œ CentOS๋ฅผ ์šด์˜ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ์ด์ œ ์–ด๋ ค์›Œ์ง„ ์‹ค์ •์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋”ฐ๋ฅธ ๋Œ€์•ˆ์œผ๋กœ RHEL์˜ ๋ฌด๋ฃŒ ๋ฐฐํฌํŒํ˜•์‹์œผ๋กœ Rocky Linux ์™€ Almo Linux ๊ฐ€ ๋‚˜์˜ด์— ๋”ฐ๋ผ ์•ž์œผ๋กœ๋Š” ํ•ด๋‹น ๋ฐฐํฌํŒ๋“ค์˜ ์‚ฌ์šฉ์ด ๋‘๋“œ๋Ÿฌ์งˆ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜:https://kubernetes.io

Linux OS๋Š” ์—ฌ๋Ÿฌ ๋ฐฐํฌํŒ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ณ , ํฌ๊ฒŒ ๋ฐ๋น„์•ˆ๊ณ„์—ด๊ณผ ๋ ˆ๋“œํ–‡๊ณ„์—ด๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ ๊ฐ€์ด๋“œ์—์„œ๋„ 2๊ฐ€์ง€ ๊ณ„์—ด์— ๋”ฐ๋ฅธ ์„ค์น˜๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (์‹ค์Šต์—์„œ๋Š” ๋ ˆ๋“œํ–‡๊ณ„์—ด์˜ Rocky Linux๋ฅผ ์‚ฌ์šฉ ์˜ˆ์ •)

๐Ÿ”Container ํ๋ฆ„

๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•˜๋ฉด์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŽ์€ ์ฝ”์–ด ๊ธฐ์ˆ ๋“ค์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋Š”๋ฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

chroot(์‚ฌ์šฉ์ž ๊ฒฉ๋ฆฌ)๋ฅผ ์‹œ์ž‘์œผ๋กœ ํŒŒ์ผ์ด๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ , cgroup๋ฅผ ํ†ตํ•ด App์ด๋‚˜ CPU, Memory๋ฅผ ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. namespace๋กœ 1๊ฐœ์˜ App์ด 1๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐจ์ง€ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌ ์‹œ์ผœ์ฃผ๋Š” ๊ธฐ์ˆ ์ด ๊ฐœ๋ฐœ๋˜๋ฉด์„œ , ์ด์ œ ๊ฐ๊ฐ์˜ Application์„ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ธฐ์ˆ ๋“ค์„ ์ง‘์•ฝํ•ด์„œ ์ •๋ฆฌ ํ•œ๊ฒƒ์ด LXC (Linux Container) ์ฆ‰, ์ตœ์ดˆ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ดํ›„ Docker๊ฐ€ ํƒ„์ƒํ•˜๋ฉด์„œ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ๋„์šธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ Docker๋Š” root ๊ถŒํ•œ์œผ๋กœ ์„ค์น˜&์‹คํ–‰์„ ํ–ˆ์–ด์•ผ ํ–ˆ๊ธฐ์— ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ ๋ฉด์ด ์žˆ์—ˆ๊ณ , ๋ณด์•ˆ๊ณผ ์„ฑ๋Šฅ์„ ๊ฐ•์กฐํ•œ rkt(rocket) ์ด๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” rootless ์„ค์น˜๋ชจ๋“œ๊ฐ€ ์ƒ๊ฒจ์„œ Docker์— ๋Œ€ํ•œ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ดํ›„ Docker์—์„œ ๊ธฐ๋Šฅ์ด ๋ถ„๋ฆฌ๋œ containerd ์™€ RedHat็คพ์˜ cri-o ๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ๋„ ๋‚˜์˜ค๊ฒŒ๋˜๋ฉด์„œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์žฅ์—์„œ๋„ ๊ฒฝ์Ÿ๋ ฅ์ด ์ค‘์š”ํ•ด์ง„ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

๐Ÿ”์šฉ์–ด ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ

Container: App์ด ๊ตฌ๋™๋˜๋Š” ํ™˜๊ฒฝ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ 

Container Runtime: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃจ๋Š” tool (ex. Docker)

Kubernetes: ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ Orchestaration ํ•˜๋Š” tool

Orchestaration: ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ–‰์œ„(์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐํฌ, ๊ด€๋ฆฌ, ํ™•์žฅ, ๋„คํŠธ์›Œํ‚น ๋“ฑ)

๐Ÿ”Application ๋ฐฐํฌ ํ™˜๊ฒฝ์˜ ํ๋ฆ„

์ถœ์ฒ˜:https://kubernetes.io

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์˜ ๋Œ€๋ช…์‚ฌ๊ฐ€ ๋œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์–ด๋–ป๊ฒŒ ์œ ์šฉํ•œ tool์ด ๋˜์—ˆ์„๊นŒ. ์ด์ „์˜ ๋ฐฐํฌํ™˜๊ฒฝ๋ถ€ํ„ฐ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉด,,

Application ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ํ๋ฆ„์„ ๋ณด๋ฉด, ์ดˆ๊ธฐ ์ „ํ†ต์ ์ธ ๋ฐฐํฌ ํ™˜๊ฒฝ์€ ๋ฌผ๋ฆฌ์„œ๋ฒ„์— OS๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๊ทธ ์œ„์— App์ด ๊ตฌ๋™๋˜๋Š” ๋ฐฉ์‹์ด์—ˆ๊ณ , ํ•œ ๋ฌผ๋ฆฌ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ App๋“ค์˜ ๋ฆฌ์†Œ์Šค ํ•œ๊ณ„๋ฅผ ์ •์˜ํ•  ๋ฐฉ๋ฒ•์ด ์—†์–ด ๋ฆฌ์†Œ์Šค ํ• ๋‹น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค.

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

 

์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์„ ํ†ตํ•œ ๋ฐฐํฌํ™˜๊ฒฝ์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์— Hypervisor๋ฅผ ์˜ฌ๋ฆฌ๊ณ , ๊ทธ ์œ„์— ์—ฌ๋Ÿฌ Virtual Machine์„ ์‹คํ–‰ํ•˜์—ฌ App์„ ๊ฐ๊ฐ์˜ VM์„ ํ†ตํ•ด ๊ฒฉ๋ฆฌ์‹œ์ผœ ๊ธฐ์กด ์ „ํ†ต์ ์ธ ๋ฐฐํฌํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ๊ฐ์˜ VM๋งˆ๋‹ค OS๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ™˜๊ฒฝ์„ธํŒ…์„ ์ผ์ผํžˆ ํ•ด์ฃผ์–ด์•ผํ•จ์— ๋”ฐ๋ผ ์—ฌ์ „ํžˆ ๋ฆฌ์†Œ์Šค์ƒ์˜ ๋ฌด๊ฑฐ์›€์€ ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

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

๐Ÿ”Container Orchestration & Container ํ๋ฆ„

Application๋“ค์€ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์— ๊ฑธ์ณ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ฐฐํฌ๋˜์–ด์•ผ ํ•  ๋•Œ, Kubernetes๋ผ๋Š” Container Orchestration tool์„ ํ™œ์šฉํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•& ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์œ ์šฉํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

Container Runtime Interface(CRI)๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์•„๋„ kubelet์ด ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ kubelet ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ์ฃผ์š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

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

CRI์™€ ๋”๋ถˆ์–ด ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ์ˆ ๋ฐœ์ „๊ณผ ์ข…๋ฅ˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ํ‘œ์ค€ํ™”๋ฅผ ์œ„ํ•ด Open Container Initiative(OCI)๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๊ณ , OCI์ŠคํŽ™์— ๋งž์ถฐ์„œ ๊ตฌํ˜„๋œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ๋ณ„๋„์˜ CRI ๊ตฌํ˜„ ์—†์ด OCI๋ฅผ ์ง€์›ํ•˜๋Š” CRI๊ตฌํ˜„์ฒด์— ์˜ํ•ด ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.