Kubernetes์˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ Docker๋ฅผ ๋Œ€์ฒดํ•˜๋Š” CRI-O: CentOS 8์—์„œ ์„ค์ •

์•ˆ๋…•ํ•˜์„ธ์š”! ์ œ ์ด๋ฆ„์€ Sergey์ด๊ณ  Surf์˜ DevOps์ž…๋‹ˆ๋‹ค. Surf์˜ DevOps ๋ถ€์„œ๋Š” ์ „๋ฌธ๊ฐ€ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์ž‘์—… ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž์ฒด ์ธํ”„๋ผ์™€ ๊ณ ๊ฐ ์ธํ”„๋ผ ๋ชจ๋‘์—์„œ ํ˜„์žฌ ๊ธฐ์ˆ ์„ ์ ๊ทน์ ์œผ๋กœ ์—ฐ๊ตฌํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์œ ํ†ต์„ ์—ฐ๊ตฌํ•˜๋ฉด์„œ ์ ‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋ณ€ํ™”์— โ€‹โ€‹๋Œ€ํ•ด ์กฐ๊ธˆ ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 8 CentOS์— ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡์ž…๋‹ˆ๊นŒ ํฌ๋ฆฌ์˜ค ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์„ ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• Kubernetes.

Kubernetes์˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ Docker๋ฅผ ๋Œ€์ฒดํ•˜๋Š” CRI-O: CentOS 8์—์„œ ์„ค์ •

Docker๊ฐ€ CentOS 8์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ตœ์‹  ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋ฅผ ์„ค์น˜ํ•œ ํ›„ RHEL 8 ๋˜๋Š” 8 CentOS์— ์ฃผ๋ชฉํ•  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฐํฌํŒ๊ณผ ๊ณต์‹ ์ €์žฅ์†Œ์—๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„์ปค, ์ด๋…์ ์œผ๋กœ๋‚˜ ๊ธฐ๋Šฅ์ ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ ๋งจ, ๋นŒ๋‹ค (๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐํฌํŒ์— ์กด์žฌ) ํฌ๋ฆฌ์˜ค. ์ด๋Š” ํŠนํžˆ OCI(Open Container Initiative) ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์œผ๋กœ Red Hat์ด ๊ฐœ๋ฐœํ•œ ํ‘œ์ค€์˜ ์‹ค์ œ ๊ตฌํ˜„ ๋•๋ถ„์ž…๋‹ˆ๋‹ค.

Linux Foundation์˜ ์ผ๋ถ€์ธ OCI์˜ ๋ชฉํ‘œ๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ํ˜•์‹ ๋ฐ ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ๊ฐœ๋ฐฉํ˜• ์‚ฐ์—… ํ‘œ์ค€์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ์งธ, ๊ทธ๋“ค์€ Linux์˜ ์ฒ ํ•™๊ณผ ๋ชจ์ˆœ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋ถ„์—์„œ, ๋„์ปค ์ผ์ข…์˜ ์˜ฌ์ธ์› ๊ฒฐํ•ฉ์ž…๋‹ˆ๋‹ค). ๋‘˜์งธ, ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ธฐ์กด ๊ฒฐํ•จ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค. ์…‹์งธ, ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ, ๊ด€๋ฆฌ ๋ฐ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ์ƒ์šฉ ํ”Œ๋žซํผ(์˜ˆ: Red Hat OpenShift)์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

์ œํ•œ ๋„์ปค ์ƒˆ๋กœ์šด ์†Œํ”„ํŠธ์›จ์–ด์˜ ์žฅ์ ์€ ์ด๋ฏธ ์ด ๊ธฐ์‚ฌ, OCI ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์ œ๊ณต๋˜๋Š” ์ „์ฒด ์†Œํ”„ํŠธ์›จ์–ด ์Šคํƒ๊ณผ ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ Red Hat ์ž์ฒด์˜ ๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ์‚ฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ Red Hat ๋ธ”๋กœ๊ทธ) ๋ฐ ํƒ€์‚ฌ ๋ฆฌ๋ทฐ.

์ œ์•ˆ๋œ ์Šคํƒ์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ํฌ๋“œ ๋งจ โ€” runC ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋‹ค โ€” ์ด๋ฏธ์ง€๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ํฌ๋ฆฌ์˜ค โ€” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ(์˜ˆ: Kubernetes)์„ ์œ„ํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

์Šคํƒ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์ผ๋ฐ˜์ ์ธ ์ƒํ˜ธ ์ž‘์šฉ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Kubernetes c ์‹คํ–‰C ๊ทธ๋ฆฌ๊ณ  ์ €์ˆ˜์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋ฆฌ์˜ค:

Kubernetes์˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ Docker๋ฅผ ๋Œ€์ฒดํ•˜๋Š” CRI-O: CentOS 8์—์„œ ์„ค์ •

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

์„ค์น˜์‹œ Kubernetes "์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•" ๋ฐฉ๋ฒ•(๋ฌผ๋ก  OCI์— ๋”ฐ๋ฅด๋ฉด)์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋ฆฌ์˜ค ์— 8 CentOS์— ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ์–ด๋ ค์›€์— ์ง๋ฉดํ–ˆ์ง€๋งŒ ์„ฑ๊ณต์ ์œผ๋กœ ๊ทน๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด 10๋ถ„ ์ •๋„ ์†Œ์š”๋˜๋Š” ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ ์ง€์นจ์„ ๊ธฐ๊บผ์ด ๊ณต์œ ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

CRI-O ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CentOS 8์— Kubernetes๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ „์ œ ์กฐ๊ฑด: ์„ค์น˜๋œ ํ˜ธ์ŠคํŠธ(์ฝ”์–ด 2๊ฐœ, 4GB RAM, ์ตœ์†Œ 15GB ์Šคํ† ๋ฆฌ์ง€)๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 8 CentOS์— (โ€œ์„œ๋ฒ„โ€ ์„ค์น˜ ํ”„๋กœํ•„ ๊ถŒ์žฅ) ๋กœ์ปฌ DNS์˜ ํ•ญ๋ชฉ(์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ /etc/hosts์˜ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ์Œ). ๊ทธ๋ฆฌ๊ณ  ์žŠ์ง€ ๋งˆ์„ธ์š” ์Šค์™‘ ๋น„ํ™œ์„ฑํ™”.

ํ˜ธ์ŠคํŠธ์—์„œ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ฃผ์˜ํ•˜์„ธ์š”.

  1. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ๋Š” OS๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  CRI-O์— ๋Œ€ํ•œ ์˜ˆ๋น„ ์ข…์†์„ฑ์„ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • OS๋ฅผ ์—…๋ฐ์ดํŠธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
      dnf -y update
      

    • ๋‹ค์Œ์œผ๋กœ ๋ฐฉํ™”๋ฒฝ๊ณผ SELinux๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ชจ๋“  ๊ฒƒ์€ ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž‘๋™ํ•  ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ๊ถŒ์žฅ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฐฉํ™”๋ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜๋˜๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ์— ์žˆ๊ฑฐ๋‚˜ ํƒ€์‚ฌ ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์˜์—ญ์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ฐฉํ™”๋ฒฝ์„ ๋„์‹ญ์‹œ์˜ค.
      firewall-cmd --set-default-zone trusted
      
      firewall-cmd --reload

      ๋ฐฉํ™”๋ฒฝ์„ ๋„๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      systemctl disable --now firewalld
      

      SELinux๋ฅผ ๋„๊ฑฐ๋‚˜ "ํ—ˆ์šฉ" ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      setenforce 0
      
      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

    • ํ•„์š”ํ•œ ์ปค๋„ ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , ์‹œ์Šคํ…œ ์‹œ์ž‘ ์‹œ "br_netfilter" ๋ชจ๋“ˆ์˜ ์ž๋™ ๋กœ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค:
      modprobe overlay
      
      modprobe br_netfilter
      
      echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf
      
      dnf -y install iproute-tc
      

    • ํŒจํ‚ท ์ „๋‹ฌ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ์„ค์ •์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
      cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
      net.bridge.bridge-nf-call-iptables = 1
      net.ipv4.ip_forward = 1
      net.bridge.bridge-nf-call-ip6tables = 1
      EOF
      

      ์„ค์ •์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค:

      sysctl --system

    • ํ•„์š”ํ•œ ๋ฒ„์ „์„ ์„ค์ •ํ•˜์„ธ์š” ํฌ๋ฆฌ์˜ค (์ฃผ์š” ๋ฒ„์ „ ํฌ๋ฆฌ์˜ค, ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ํ•„์ˆ˜ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. Kubernetes), ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „ ์ดํ›„ Kubernetes ํ˜„์žฌ 1.18:
      export REQUIRED_VERSION=1.18
      

      ํ•„์š”ํ•œ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค:

      dnf -y install 'dnf-command(copr)'
      
      dnf -y copr enable rhcontainerbot/container-selinux
      
      curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo
      
      curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo

    • ์ด์ œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด์š” ํฌ๋ฆฌ์˜ค:
      dnf -y install cri-o
      

      ์„ค์น˜ ๊ณผ์ •์—์„œ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด์— ์ฃผ์˜ํ•˜์„ธ์š”. ๊ตฌ์„ฑ์„ ํŽธ์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋ฆฌ์˜ค ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ conmon ๊ตฌ์„ฑ ์š”์†Œ์˜ ์œ„์น˜๊ฐ€ ์ง€์ •๋œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—:

      sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.conf

      ์ด์ œ ๋ฐ๋ชฌ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํฌ๋ฆฌ์˜ค:

      systemctl enable --now crio
      

      ๋ฐ๋ชฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      systemctl status crio
      

  2. ์„ค์น˜ ๋ฐ ํ™œ์„ฑํ™” Kubernetes.
    • ํ•„์š”ํ•œ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      exclude=kubelet kubeadm kubectl
      EOF
      

      ์ด์ œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Kubernetes (์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฒ„์ „ 1.18):

      dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes

    • ๋‘ ๋ฒˆ์งธ ์ค‘์š”ํ•œ ๋‰˜์•™์Šค: ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋„์ปค, ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ํฌ๋ฆฌ์˜ค, ์‹คํ–‰ ๋ฐ ์ดˆ๊ธฐํ™” ์ „ Kubernetes ๋จผ์ € ์›ํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ /var/lib/kubelet/config.yaml ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์ ์ ˆํ•œ ์„ค์ •์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      mkdir /var/lib/kubelet
      
      cat <<EOF > /var/lib/kubelet/config.yaml
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      EOF

    • ์„ค์น˜ ์ค‘์— ์ง๋ฉดํ•˜๊ฒŒ ๋˜๋Š” ์„ธ ๋ฒˆ์งธ ์ค‘์š”ํ•œ ์ : ์‚ฌ์šฉ๋œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ‘œ์‹œํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์”จ๊ทธ๋ฃน, ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋ฅผ ํ†ตํ•œ ๊ตฌ์„ฑ Kubelet (๋ฌธ์„œ์— ๋ช…์‹œ์ ์œผ๋กœ ๋ช…์‹œ๋œ ๋Œ€๋กœ) ์˜ค๋ž˜๋œ ๊ฒฝ์šฐ ํŒŒ์ผ์— ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      cat /dev/null > /etc/sysconfig/kubelet
      
      cat <<EOF > /etc/sysconfig/kubelet
      KUBELET_EXTRA_ARGS=--container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock'
      EOF

    • ์ด์ œ ๋ฐ๋ชฌ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Kubelet:
      sudo systemctl enable --now kubelet
      

      ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋ ค๋ฉด ์ œ์–ด ํ‰๋ฉด ๋˜๋Š” ๋…ธ๋™์ž ๋ช‡ ๋ถ„ ์•ˆ์— ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋กœ.

  3. ์ด์ œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
    • ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
      kubeadm init --pod-network-cidr=10.244.0.0/16
      

      ์ถœ๋ ฅ ๋์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์š”์ฒญ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ "kubeadm Join โ€ฆ"์— ๊ฐ€์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์„ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ์ง€์ •๋œ ํ† ํฐ์„ ๊ธฐ๋กํ•˜์‹ญ์‹œ์˜ค.

    • Pod ๋„คํŠธ์›Œํฌ์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ(CNI)์„ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค ์˜ฅ์–‘๋ชฉ. ์•„๋งˆ๋„ ๋” ์ธ๊ธฐ๊ฐ€ ๋งŽ์„ ๊ฒƒ ๊ฐ™์•„์š” ํ”Œ๋ž€๋„ฌ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ์ง€์ฃผ, ์˜ˆ ๋ฐ ์˜ˆ ์˜ฅ์–‘๋ชฉ - ํ”„๋กœ์ ํŠธ์—์„œ ๊ถŒ์žฅํ•˜๊ณ  ์™„์ „ํžˆ ํ…Œ์ŠคํŠธํ•œ ์œ ์ผํ•œ CNI ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. Kubernetes:
      kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml 

    • ์ž‘์—…์ž ๋…ธ๋“œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์ง€์นจ 1๊ณผ 2์— ๋”ฐ๋ผ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ, ์ด์ „ ๋‹จ๊ณ„์—์„œ ๊ธฐ๋กํ•œ "kubeadm init..." ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN 
          --discovery-token-ca-cert-hash $TOKEN_HASH

    • ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ณ  ์ž‘๋™์ด ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
      kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
      

    ์ค€๋น„๊ฐ€ ๋œ! ์ด๋ฏธ K8s ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ์šฐ๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ

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

๊ณ„์† ์ง€์ผœ๋ด!

์ด ๊ธฐ์‚ฌ๋Š” ๋‹ค์Œ ์ถœ์ฒ˜ ๋•๋ถ„์— ๊ฒŒ์žฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.



์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€