๐Ÿš€ ์š”์•ฝ

SUMMARY

ํด๋Ÿฌ์Šคํ„ฐ์˜ CRI๋ฅผ Docker์—์„œ containerd๋กœ ๋ฐ”๊ฟจ๋‹ค. Docker๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ์ง์ ‘ ๋ง์„ ๋ชป ํ•ด cri-dockerd๋ผ๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ•œ ๊ฒน ๊ฑฐ์ณ์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ๋ ˆ์ด์–ด๋ฅผ ๊ฑท์–ด๋‚ด๋‹ˆ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๊ณ  ๋ผ์ด์„ ์Šค ๊ฑฑ์ •๋„ ์‚ฌ๋ผ์กŒ๋‹ค.

๐Ÿ’ก ๊ฐœ์š”

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ธ์šฐ๋ฉด์„œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์ธํ„ฐํŽ˜์ด์Šค(Container Runtime Interface, CRI)๋ฅผ ์ •ํ•ด์•ผ ํ–ˆ๋‹ค. ์ฒ˜์Œ์—” ๊ฐœ๋ฐœํŒ€์ด Docker์— ์ต์ˆ™ํ•˜๋‹ค๋Š” ์ด์œ ๋กœ Docker๋ฅผ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์šด์˜ ๊ฒฝํ—˜์ด ์Œ“์ด๋ฉด์„œ containerd๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒŒ ๋งž๋‹ค๋Š” ๊ฒฐ๋ก ์— ์ด๋ฅด๋ €๋‹ค.

INFO

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

๐Ÿ“‹ ์„ ์ • ๋ฐฐ๊ฒฝ

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

๋ฌธ์ œ๋Š” CLI์˜€๋‹ค. containerd๋กœ ๊ฐ€๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์ด ์ต์ˆ™ํ•œ docker ๋ช…๋ น์–ด ๋Œ€์‹  nerdctl์„ ์จ์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ํ˜ผ๋ž€์ด ๊ฑฑ์ •๋ผ CRI๋กœ Docker๋ฅผ ์šธ๋ฉฐ ๊ฒจ์ž ๋จน๊ธฐ๋กœ ๋ถ™๋“ค๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์šด์˜์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ๋ถ™๋“ค๊ณ  ์žˆ์„ ์ด์œ ๋ณด๋‹ค ๋†“์•„์•ผ ํ•  ์ด์œ ๊ฐ€ ๋” ์Œ“์˜€๋‹ค.

  • Docker๋Š” CRI๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š์•„, cri-dockerd๋ผ๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋ณ„๋„๋กœ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.
  • ๊ทธ ์ค‘๊ฐ„ ๋‹จ๊ณ„ ๋•Œ๋ฌธ์— containerd ๋Œ€๋น„ ๋ถˆํ•„์š”ํ•œ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ(Overhead)๊ฐ€ ์ƒ๊ธด๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋„, Kubespray๋„ containerd๋ฅผ ํ‘œ์ค€์œผ๋กœ ๋ฏธ๋Š” ์ถ”์„ธ๋‹ค.
  • Docker Desktop ๋ผ์ด์„ ์Šค ์ด์Šˆ๋„ ๋งˆ์Œ ํ•œ์ผ ์— ๊ฑธ๋ ธ๋‹ค.

๐Ÿ“Š ๋น„๊ต

๊ตฌ๋ถ„Docker + cri-dockerdcontainerd
์•„ํ‚คํ…์ฒ˜kubelet โ†’ cri-dockerd โ†’ dockerd โ†’ containerd โ†’ runckubelet โ†’ containerd โ†’ runc
์„ฑ๋Šฅ์ถ”๊ฐ€ ๋ ˆ์ด์–ด๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ์ง์ ‘ ํ†ต์‹ ์œผ๋กœ ์ตœ์ ํ™”
ํ‘œ์ค€ ์ง€์›๋น„ํ‘œ์ค€, ๋ณ„๋„ ์–ด๋Œ‘ํ„ฐ ํ•„์š”์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ‘œ์ค€ CRI ์ง€์›
์œ ์ง€๋ณด์ˆ˜cri-dockerd ์ถ”๊ฐ€ ๊ด€๋ฆฌ ํ•„์š”๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด ๊ด€๋ฆฌ ์šฉ์ด
CLIdocker ๋ช…๋ น์–ดnerdctl (docker ํ˜ธํ™˜)
๋ผ์ด์„ ์ŠคDocker Desktop ๋ผ์ด์„ ์Šค ๊ณ ๋ ค ํ•„์š”Apache 2.0
์ปค๋ฎค๋‹ˆํ‹ฐ๋ ˆ๊ฑฐ์‹œ ์ง€์›ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ๊ณผ ์ง€์›

ํ‘œ์˜ ์•„ํ‚คํ…์ฒ˜ ํ•œ ์ค„์ด ์‚ฌ์‹ค์ƒ ๊ฒฐ๋ก ์ด๋‹ค. Docker๋ฅผ ์“ฐ๋ฉด kubelet๋ถ€ํ„ฐ ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ๋„ค ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š”๋ฐ, containerd๋Š” ๊ทธ๊ฑธ ๋‘ ๋‹จ๊ณ„๋กœ ์ค„์ธ๋‹ค. ๋ถ™์žก๊ณ  ์žˆ์„ ๋ช…๋ถ„์ด๋˜ CLI ๋ฌธ์ œ๋„, ์•Œ๊ณ  ๋ณด๋‹ˆ nerdctl์ด docker ๋ช…๋ น์–ด์™€ ๊ฑฐ์˜ ๊ทธ๋Œ€๋กœ ํ˜ธํ™˜๋ผ ์ƒ๊ฐ๋งŒํผ ํฐ ๋ฒฝ์ด ์•„๋‹ˆ์—ˆ๋‹ค.

โœ… ์„ ์ • ์‚ฌ์œ 

containerd๋กœ ์ •ํ–ˆ๋‹ค. ์ด์œ ๋ฅผ ์ถ”๋ฆฌ๋ฉด ์ด๋ ‡๋‹ค.

1. ์•„ํ‚คํ…์ฒ˜ ๋‹จ์ˆœํ™”

Docker ๊ธฐ๋ฐ˜์—์„œ kubelet์ด ์ปจํ…Œ์ด๋„ˆ์— ๋‹ฟ๊ธฐ๊นŒ์ง€๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ–ˆ๋‹ค.

kubelet โ†’ cri-dockerd โ†’ dockerd โ†’ containerd โ†’ runc

containerd๋ฅผ ์ง์ ‘ ์“ฐ๋ฉด ์ด ์ค‘๊ฐ„์ด ์‚ฌ๋ผ์ง„๋‹ค.

kubelet โ†’ containerd โ†’ runc

2. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ‘œ์ค€ ์ค€์ˆ˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค 1.24๋ถ€ํ„ฐ ๋‚ด์žฅ dockershim์ด ์ œ๊ฑฐ๋˜๋ฉด์„œ, Docker๋ฅผ CRI๋กœ ์“ฐ๋ ค๋ฉด cri-dockerd๋ฅผ ๋”ฐ๋กœ ์–น์–ด์•ผ ํ•˜๋Š” ์ฒ˜์ง€๊ฐ€ ๋๋‹ค. ๋ฐ˜๋Œ€๋กœ containerd๋Š” ๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ž๋ฆฌ ์žก์•˜๊ณ , Kubespray ๊ฐ™์€ ๋ฐฐํฌ ๋„๊ตฌ๋„ containerd๋ฅผ ํ‘œ์ค€์œผ๋กœ ์“ด๋‹ค. ํ๋ฆ„์„ ๊ฑฐ์Šค๋ฅผ ์ด์œ ๊ฐ€ ์—†์—ˆ๋‹ค.

3. ์„ฑ๋Šฅ

๋ถˆํ•„์š”ํ•œ ์ค‘๊ฐ„ ๋ ˆ์ด์–ด๋ฅผ ๊ฑท์–ด๋‚ด๋‹ˆ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๋‚˜์•„์กŒ๋‹ค. ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด ์ฐจ์ด๊ฐ€ ๋” ๋ˆˆ์— ๋„์—ˆ๋‹ค.

IMPORTANT

์ดˆ๋ฐ˜์— ์ œ์ผ ๊ฑฑ์ •ํ–ˆ๋˜ CLI ๋ณ€๊ฒฝ ํ˜ผ๋ž€์€ ๊ฑฐ์˜ ์—†์—ˆ๋‹ค. nerdctl์ด docker ๋ช…๋ น์–ด๋ฅผ ์›Œ๋‚™ ์ž˜ ํ‰๋‚ด ๋‚ด ์ค€ ๋•์ด๋‹ค. ๋ถ™์žก๊ณ  ์žˆ๋˜ ์ด์œ ๊ฐ€ ๋ง‰์ƒ ๋„˜์–ด์™€ ๋ณด๋‹ˆ ๋ณ„๊ฒƒ ์•„๋‹ˆ์—ˆ๋˜ ์…ˆ์ด๋‹ค.

๐Ÿ”— ์ฐธ๊ณ