kubernetes ๊ฐœ๋… ๋ฐ cluster ์„ค์น˜ ๋ฐฉ๋ฒ• (1)

kubernetes ๊ฐœ๋… ๋ฐ cluster ์„ค์น˜ ๋ฐฉ๋ฒ• (1) - kubernetes ๊ฐœ๋… ์ •๋ฆฌ

1. kubernetes ๊ฐœ๋… ๋ฐ cluster ์„ค์น˜ ๋ฐฉ๋ฒ• (1) - kubernetes ๊ฐœ๋… ์ •๋ฆฌ

๋ชฉ์ฐจ

1. ๋ชฉ์ฐจ

2. ๊ฐœ์š”

3. ์ปจํ…Œ์ด๋„ˆ๋ž€?

4. kubernetes๋ž€?

5. ๋„์ปค์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ฐจ์ด?

6. cgroup์ด๋ž€?

7. ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด๋ž€?

8. CRI๋ž€?

9. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋„์ปค ๋Ÿฐํƒ€์ž„ ์ง€์›์„ ์ค‘๋‹จ ํ•œ ์ด์œ ?

10. ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

11. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์šฉ์–ด

12. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜

13. ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ

14. Application ๋ฐฐํฌ ๋ฐฉ๋ฒ•

15. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ์ข…๋ฅ˜

16. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์Šคํ† ๋ฆฌ์ง€

17. ๋งˆ์น˜๋ฉฐ

๊ฐœ์š”

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

์ปจํ…Œ์ด๋„ˆ๋ž€?

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ์†Œํ”„ํŠธ์›จ์–ด ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŠน์ • ๋ฒ„์ „์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋Ÿฐํƒ€์ž„ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ์ข…์† ํ•ญ๋ชฉ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ํฌํ•จํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ํŒจํ‚ค์ง€.

์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๊ด€๋ จ ํŒจํ‚ค์ง€, ๋ฐ๋ชฌ์„ ํ•œ๋ฐ ๋ฌถ์–ด์„œ ์ž‘์€ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ• ํ›„ ๋ฐฐํฌํ•˜๋Š” ๊ฐœ๋….

ํ˜ธ์ŠคํŠธ OS์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. VM๊ณผ ๋‹ฌ๋ฆฌ ์šด์˜์ฒด์ œ ์ปค๋„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋„ ์ ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.

kubernetes๋ž€?

kubernetes.png

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

๋„์ปค์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ฐจ์ด?

  • ๋„์ปค : ๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ. ์ฆ‰ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์„ค์ •๊ฐ’์ธ ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋„์šฐ๊ณ  ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ . ํ•œ๊ฐœ์˜ ์„œ๋ฒ„์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด Docker๊ฐ€ ์ ํ•ฉ.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ/ํ™•์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ. ์ปจํ…Œ์ด๋„ˆ ์‹œ์žฅ์ด ์ปค์ง€๊ณ  ์ ์  ๋” ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌ, ๋ฐฐํฌํ•ด์•ผ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์Œ.

cgroup์ด๋ž€?1

cgroup_process.png

๋‹จ์ผ, ๋˜๋Š” ํƒœ์Šคํฌ ๋‹จ์œ„์˜ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ž์› ํ• ๋‹น์„ ์ œ์–ดํ•˜๋Š” ์ปค๋„ ๋ชจ๋“ˆ. ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋‹ด๋‹นํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ cgroup์ด ์ƒ์„ฑ๋œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ fork system call์„ ํ†ตํ•ด์„œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ƒ์„ฑํ•ด๋„ ์ƒ์„ฑ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์—ญ์‹œ ์ปจํ…Œ์ด๋„ˆ cgroup์— ์†Œ์†๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ cgroup์„ ์ œ์–ดํ•˜๋ฉด ๋œ๋‹ค.

cgroup์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” cgroupfs์™€ systemd์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

cgroup.png

  • cgroupfs : cgroup ์ œ์–ด๋ฅผ ์œ„ํ•ด ํƒ„์ƒํ•œ ํŠน์ˆ˜ file system. cgroup ์ •๋ณด๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์€ cgroup ์ œ์–ด๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ system call์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  cgroupfs๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. cgroupfs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ cgroup์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ cgroupfs์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค. ๊ฒฝ๋กœ๋Š” /sys/fs/cgroup/memory.
  • systemd : ๋ฆฌ๋ˆ…์Šค์˜ init process์ด๋ฉฐ ๊ธฐ์กด ๊ธฐ๋Šฅ์€ ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค ์ œ์–ด์ด์ง€๋งŒ cgroup์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•œ๋‹ค. systemd์˜ cgroup ์ œ์–ด ๊ธฐ๋Šฅ์€ ์ž์‹ ์ด ์ œ์–ดํ•˜๋Š” ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. systemd-run ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด unit์„ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด cgroup์ด ์ƒ์„ฑ๋œ๋‹ค.

๊ฒฐ๊ตญ cgroup์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ์š”์ฒญํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์ผ ๋ฟ ๋™์ผํ•œ ๋™์ž‘์„ ํ•œ๋‹ค. cgroupfs ๋“œ๋ผ์ด๋ฒ„ ๋ฐฉ์‹์„ ์‚ฌ์šฉ ์‹œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ง์ ‘ cgroup ๋””๋ ‰ํ† ๋ฆฌ์— ๊ด€์—ฌ๋ฅผ ํ•˜๊ณ , systemd ๋“œ๋ผ์ด๋ฒ„ ๋ฐฉ์‹์„ ์‚ฌ์šฉ ์‹œ systemd API๋ฅผ ํ†ตํ•ด cgroup ๋””๋ ‰ํ† ๋ฆฌ์— ๊ด€์—ฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฐฉ์‹์˜ cgroup ์ƒ์„ฑ ๊ฒฝ๋กœ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

systemd๋Š” ์‚ฌ์šฉ์ž ๋ ˆ๋ฒจ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๊ณ  cgroupfs๋Š” ์ง์ ‘ cgroup์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ •์„ฑ ์ฐจ์ด๋Š” ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‚˜ ์„ฑ๋Šฅ์ƒ์˜ ์ฐจ์ด์ ์€ ์—†๋‹ค. ๋‹ค๋งŒ kubernetes ๊ณต์‹ ๋ฌธ์„œ์—๋Š” kubelet ๋ฐ ๋„์ปค์™€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ cgroup ์ œ์–ด ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ๋ถˆ์•ˆ์ •ํ•ด์ง€๋Š” ์‚ฌ๋ก€๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ๋ณด๊ณ ๋˜์—ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด๋ž€?

: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด. ๋Œ€ํ‘œ์ ์œผ๋กœ dockershim, containerd, CRI-O ๋“ฑ์ด ์žˆ๋‹ค.

  • docker-shim : ๋„์ปค ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ž์ฒด์ ์œผ๋กœ ๊ฐœ๋ฐœ ํ•œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ํˆด ๊ฒฝ๋กœ : /var/run/dockershim.sock
  • containerd : ๋„์ปค ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ํ”„๋กœ์ ํŠธ. ๊ฒฝ๋กœ : /run/containerd/containerd.sock
  • CRI-O : ๋ ˆ๋“œํ–‡์ด ๊ฐœ๋ฐœํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„. ๊ธฐ๋ณธ์ ์ธ cgroup ๊ด€๋ฆฌ ๋ชจ๋“ˆ๋กœ systemd๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฒฝ๋กœ : /var/run/crio/crio.sock

CRI๋ž€?

: CRI๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ „์—๋Š” ๋Œ€ํ‘œ์ ์ธ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ํˆด์ธ ๋„์ปค์™€ rkt๊ฐ€ kubelet์— ์ง์ ‘ ํ†ตํ•ฉ๋˜์–ด์žˆ์—ˆ์œผ๋‚˜, ์ด ์™ธ์—๋„ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ํˆด์ด ์ƒ๊ฒจ๋‚˜๋ฉด์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋‹ค์–‘ํ•œ ๋Ÿฐํƒ€์ž„ ํˆด์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ต์ผํ™” ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” CRI๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋‹ค.

๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ํˆด์€ CRI ์ŠคํŽ™์— ๋งž์ถฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด kubelet๊ณผ ํ˜ธํ™˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋„์ปค ๋Ÿฐํƒ€์ž„ ์ง€์›์„ ์ค‘๋‹จ ํ•œ ์ด์œ ?2

: ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„๊ณผ ํ˜ธํ™˜์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—. Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ํ†ตํ•ฉ๋˜๋„๋ก ์„ค๊ณ„๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธํ™˜์„ฑ์— ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋„์ปค๊ฐ€ ๋จผ์ € ๊ฐœ๋ฐœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์ปค๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ CRI๊ธฐ์ค€์— ๋งž์ง€ ์•Š์•„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋„์ปค๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋„์ปค ๋Ÿฐํƒ€์ž„์ธ docker-shim์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋จ.

๊ทธ๋Ÿฌ๋‚˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ docker-shim ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€์„ ๋А๊ผˆ๊ณ , docker์—์„œ๋Š” CRI ๊ธฐ์ค€์— ๋งž์ถ˜ ๋Ÿฐํƒ€์ž„ ํˆด์„ ๋”ฐ๋กœ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์•„ ์ง€์›์„ ์ค‘๋‹จํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

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

์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?3

๊ด€๋ จ ๋…ผ๋ฌธ ๊ฐ์ฃผ ์ฐธ์กฐ

๋‹ค๋งŒ CRI-O๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ๋Œ€ํ•œ ๋ถ€๋ถ„๋งŒ ๊ด€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์ปดํฌ๋„ŒํŠธ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • crictl : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒ€์‚ฌ, ๋””๋ฒ„๊น…
  • runc : ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์‹คํ–‰
  • podman : ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์˜ ์™ธ๋ถ€์—์„œ Pod์™€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ ( run, stop, start, ps, attach, exec ) ๋“ฑ
  • buildah : ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ํ‘ธ์‹œ
  • skopeo : ์ด๋ฏธ์ง€ ๋ณต์‚ฌ, ๊ฒ€์‚ฌ, ์ œ๊ฑฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์šฉ์–ด

  • kubeadm : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋„๊ตฌ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์ŠคํŠธ ๊ตฌ์ถ• ๊ด€๋ จ ๋ช…๋ น์–ด.
  • kubelet : ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์—์ด์ „ํŠธ. pod ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ฆฌ ๋ฐ ์ƒํƒœ ์ฒดํฌ. ๋˜ํ•œ master node์™€ worker node ๊ฐ„ ํ†ต์‹ ์„ ์ฑ…์ž„์ง„๋‹ค.
  • kubectl : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์ปค๋งจ๋“œ ๋ผ์ธ ๋„๊ตฌ.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ์•„ํ‚คํ…์ฒ˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ์•„ํ‚คํ…์ฒ˜

  • ETCD : ๋…ธ๋“œ ์ •๋ณด ๋“ฑ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ, etcd ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๊ณ„ํš์€ ํ•„์ˆ˜์ด๋‹ค.
  • kube-apiserver : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API, ์™ธ/๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ์ž์˜ ์›๊ฒฉ ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ frontend. ์ž‘์—… ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ  ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ๋Š” RESTful ์›น ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” API ์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ์„œ ์„œ๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • kube-controller-manager : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํ˜„์žฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์ƒํƒœ๋กœ ๋งž์ถฐ์ค€๋‹ค. ์˜ค๋ธŒ์ ํŠธ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ์ฒดํฌํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ œ์–ดํ•œ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‹ค์ œ ์ƒํƒœ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ์–‘์œผ๋กœ ์กฐ์ •ํ•œ๋‹ค.

    1
    2
    3
    4
    5
    6
    7
     - Node Controller : ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ ์•Œ๋ฆผ๊ณผ ๋Œ€์‘์— ๊ด€ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
    
     - Replication Controller : ์ง€์ • ๋œ ์ˆ˜์˜ pod๋“ค์„ ์œ ์ง€์‹œ์ผœ ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    
     - Endpoints Controller : ์„œ๋น„์Šค์™€ pod๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ endpoint ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.
    
     - Service Account & Token Controllers : ์ƒˆ๋กœ์šด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ณ„์ •๊ณผ API ์ ‘๊ทผ ํ† ํฐ์„ ์ƒ์„ฑํ•œ๋‹ค.
    
  • kube-scheduler : ์ƒ์„ฑ ๋œ pod๋ฅผ ๋…ธ๋“œ์— ํ• ๋‹น ํ•ด ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ. ๋ฆฌ์†Œ์Šค, ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด, ์ •์ฑ…, ์›Œํฌ๋กœ๋“œ ๋“ฑ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ์ ํ™” ๋œ ๋…ธ๋“œ์— pod๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค.
  • kube-proxy : ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋…ธ๋“œ๊ฐ„์— ๋„คํŠธ์›Œํฌ ๊ทœ์น™์„ ์œ ์ง€ํ•œ๋‹ค.

๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ

singenode-network.png

์‹ฑ๊ธ€ ๋…ธ๋“œ์—์„œ Pod to Pod ํ†ต์‹  ์‹œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” kubenet์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํฌ๋กœ์Šค ๋…ธ๋“œ ๋„คํŠธ์›Œํ‚น์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์„ค์ •๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ CNI(Container Network Interface)์˜ ์ŠคํŽ™์„ ์ค€์ˆ˜ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋”ฐ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

multinode-network.png

๊ธฐ์กด ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋กœ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ ๋…ธ๋“œ์— ์ค‘๋ณต๋˜๋Š” ip๊ฐ€ ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์ด ์™”์„ ๋•Œ ์–ด๋А ๋…ธ๋“œ์˜ ํŒŒ๋“œ๋กœ ํŒจํ‚ท์ด ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„คํŠธ์›Œํฌ์— ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•ด์ฃผ๊ณ  ํŒŒ๋“œ์™€ ํ˜ธ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•œ CNI๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

CNI๋Š” ์ปค๋„ ๋ผ์šฐํŒ…, ๋™์  ๋ผ์šฐํŒ…, Pod ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ, IP / Subnet / Routing Table ์„ค์ •, Proxy ARP ๊ธฐ๋Šฅ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Application ๋ฐฐํฌ ๋ฐฉ๋ฒ•

  • Replicaset : pod์˜ ๋ณต์ œ๋ณธ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ.

deployment.png

  • Deployment : stateless ์•ฑ์„ ๋ฐฐํฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ. deployment๋Š” replicaset์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋กค๋ง์—…๋ฐ์ดํŠธ, ๋ฐฐํฌ ์ค‘๋‹จ, ๋กค๋ฐฑ ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. deployment controller๋Š” ์ง€์†์ ์œผ๋กœ ๋ฐฐํฌ ๋œ ์ธ์Šคํ„ด์Šค๋“ค์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ ์ธ์Šคํ„ด์Šค๋กœ ๊ต์ฒดํ•ด์ค€๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ์ข…๋ฅ˜

ClusterIP.png

  • ClusterIP : ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ํ•ด๋‹น ClusterIP๋ฅผ ํ†ตํ•ด Pod to Pod ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ClusterIP๋Š” ์„œ๋น„์Šค (Deployment / Replicaset ) ๋‹จ์œ„๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ClusterIP ์ฃผ์†Œ๋กœ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด backend ๋‹จ์˜ Pod ์ค‘ ํ•˜๋‚˜๋กœ ํ”„๋ก์‹œ๋œ๋‹ค.

NodePort.png

  • NodePort : ํด๋Ÿฌ์Šคํ„ฐ์— ์†ํ•œ Node์˜ IP:NodePort๋ฅผ Pod์˜ Service Port์™€ ๋งคํ•‘์‹œํ‚จ๋‹ค.

Load Balancer.png

  • LoadBalancer : ์™ธ๋ถ€์˜ LB๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์™ธ๋ถ€ LB์—์„œ NodePort๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํ”„๋ก์‹œํ•œ๋‹ค.

Ingress.png

  • ๋ฒˆ์™ธ) Ingress : ์„œ๋น„์Šค์˜ ์ข…๋ฅ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์™ธ๋ถ€์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€๋กœ ๋“ค์–ด์˜ค๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ•  ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์Šคํ† ๋ฆฌ์ง€

pv_pvc.png

  • pv : ์ธํ”„๋ผ ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์ „์— ์ •์˜ ํ•ด ๋†“์€ ๋ณผ๋ฅจ
  • pvc : ์‚ฌ์šฉ์ž ( ๊ฐœ๋ฐœ์ž ) ๊ฐ€ pod๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญํ•˜๋Š” ๋ณผ๋ฅจ
  • Storage Class : ๋งค๋ฒˆ pvc๋ฅผ ์š”์ฒญ ํ•  ๋•Œ ๋งˆ๋‹ค pv ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋งž๋Š” pv๊ฐ€ ์—†์„ ์‹œ ์ž๋™์œผ๋กœ pv๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋ฆฌ pv๋ฅผ ์ƒ์„ฑ ํ•  ๊ณต๊ฐ„์„ ์„ ์–ธ.

๋งˆ์น˜๋ฉฐ

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


  1. ์ฐธ๊ณ  : https://tech.kakao.com/2020/06/29/cgroup-driver/ย 

  2. ์ฐธ๊ณ  : https://ikcoo.tistory.com/189ย 

  3. ๊ด€๋ จ ๋…ผ๋ฌธ ์ฐธ์กฐ : https://www.scitepress.org/Papers/2020/93404/93404.pdfย