๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[DevOps]/Kubernetes

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ ๋ฐ ๋…ธ๋“œ ์—ฐ๊ฒฐ ์™„๋ฒฝ ์ •๋ฆฌ (Oracle Linux or Ubuntu, containerd, flannel)

by ํŒกํŽ‘ํ 2024. 12. 19.
728x90
๐Ÿค“ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
Kubernetes : 1.32v
Master Node : Oracle linux 8.8
Worker Node : Ubuntu 20.04.6 LTS

 

๐Ÿฅธ ๊ตฌ์„ฑ

  • ์ž‘์—… ์ˆœ์„œ๋Œ€๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ์ž‘์—…์—์„œ ์ƒ์„ธ ์„ค๋ช… ๋ฐ ์ฃผ์˜ ์‚ฌํ•ญ์„ ํ•จ๊ป˜ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ ํ•˜์‹œ๋ฉด ํฐ ์–ด๋ ค์›€ ์—†์ด ์„ค์น˜ ๋ฐ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿซก ์‹ค์Šต ์ „ ์ดํ•ดํ•˜๊ธฐ

0. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ ๋‘ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

1. ์‹ค์Šต ์ „ ๊ฐ ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ์ ์ธ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•œ ์ •๋ณด ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

3. kubeadm, kubelet, kubectl๊ณผ ๊ฐ™์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • kubeadm์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • kubelet์€ ๊ฐ ๋…ธ๋“œ์˜ ์—์ด์ „ํŠธ์ด๋ฉฐ ๋…ธ๋“œ ๋‚ด Pod์™€ Container ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • kubectl์€ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค(CLI) ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ์„ค์น˜์— ๋”ฐ๋ฅธ ์šด์˜์ฒด์ œ ๋ณ„ ์„ค์น˜ ๋ฐ ์„ค์ • ๋ฐฉ๋ฒ•์ด ์ƒ์ดํ•ฉ๋‹ˆ๋‹ค.

4. CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

5. Master Node์™€ Worker Node๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

6. Test Pod๋ฅผ ๋„์›Œ๋ด…๋‹ˆ๋‹ค.

 

[1] ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ ์ž‘์—…

๐Ÿซฅ  ๊ฐ ์„œ๋ฒ„์˜ ์šด์˜ ์ฒด์ œ ํ™•์ธํ•˜๊ธฐ

$ cat /etc/os-release

# Master Node ์šฉ ์„œ๋ฒ„ ์ถœ๋ ฅ ๋‚ด์šฉ
NAME="Oracle Linux Server"
VERSION="8.8"
...

# Worker Node ์šฉ ์„œ๋ฒ„ ์ถœ๋ ฅ ๋‚ด์šฉ
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
...
  • Master Node๋กœ ์„ค์ •ํ•  ์„œ๋ฒ„ ์šด์˜์ฒด์ œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ˆ…์Šค ์šด์˜์ฒด์ œ๋Š” ์‹คํ–‰ ๋ฐ ์—ฐ๊ฒฐ๊ณผ๋Š” ๋ฌด๊ด€ํ•˜์ง€๋งŒ ์šด์˜์ฒด์ œ์˜ ์ข…๋ฅ˜๋งˆ๋‹ค ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ์ƒ์ดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งจ ์ฒ˜์Œ์— ํ™•์ธํ•˜์—ฌ ์ˆ™์ง€ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ค๋ผํด ๋ฆฌ๋ˆ…์Šค(Oracle Linux)

  • Red Hat Enterprise Linux(RHEL)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐฐํฌํŒ์ž…๋‹ˆ๋‹ค.
  • RPM ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ yum/dnf ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ถ„ํˆฌ(Ubuntu)

  • ๋ฐ๋น„์•ˆ(Debian)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐฐํฌํŒ์ž…๋‹ˆ๋‹ค.
  • APT ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ DEB ํŒจํ‚ค์ง€ ํฌ๋งท์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿซฅ  ๊ฐ ์„œ๋ฒ„์˜ hostname ๋ณ€๊ฒฝํ•˜๊ธฐ

# hostname ๋ณ€๊ฒฝํ•˜๊ธฐ
$ sudo hostnamectl set-hostname <ํ˜ธ์ŠคํŠธ ๋„ค์ž„>

# hostname ์ถœ๋ ฅํ•˜๊ธฐ
$ hostname
  • hostname์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” kube-api๊ฐ€ hostname์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • node ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด hostname์„ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

๐Ÿซฅ  ๋ฐฉํ™”๋ฒฝ ์„ค์ •

< Chat-GPT >
< Chat-GPT >

## Oracle Linux
# ๊ธฐ์กด ๋ฐฉํ™”๋ฒฝ ๋ฆฌ์ŠคํŠธ ํ™•์ธ
sudo firewall-cmd --zone=public --list-all

# ์ ์šฉ
sudo firewall-cmd --reload

## masternode
# kubernetes api server
sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp

# etcd server
sudo firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp

# kubelet api
sudo firewall-cmd --permanent --zone=public --add-port=10250/tcp

# kube-scheduler
sudo firewall-cmd --permanent --zone=public --add-port=10259/tcp

# kube-controller-manager
sudo firewall-cmd --permanent --zone=public --add-port=10257/tcp

## worker node
# kubelet api
sudo firewall-cmd --permanent --zone=public --add-port=10250/tcp

# nodeport services
sudo firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp

## masternode & worker node ๋‘˜ ๋‹ค
# CNI Plugin flannel
sudo firewall-cmd --permanent --zone=public --add-port=8472/udp



## Ubuntu์˜ ๊ฒฝ์šฐ ์•„๋ž˜ ๋ช…๋ น์–ด ์ฐธ๊ณ 
# ๊ธฐ์กด ๋ฐฉํ™”๋ฒฝ ๋ฆฌ์ŠคํŠธ ํ™•์ธ
sudo ufw status

# ํฌํŠธ๋ฒˆํ˜ธ ์œ„ ์ฐธ๊ณ 
sudo ufw allow <port>/tcp
sudo ufw allow <port>:<port>/tcp

# ์ ์šฉ
sudo ufw reload
  • ๋ฐฉํ™”๋ฒฝ์ด ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ๋”ฐ๋กœ ํฌํŠธ๋ฅผ ๊ฐœ๋ฐฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ˆ…์Šค ์šด์˜์ฒด์ œ ๋ณ„ ๋ฐฉํ™”๋ฒฝ ์„ค์ •์ด ์ƒ์ดํ•˜๋ฏ€๋กœ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์„ค์ •์—์„œ ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ์„ ์—ด์–ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[2] ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์„ค์น˜

๐Ÿซฅ ๋„์ปค ์„ค์น˜

https://docs.docker.com/engine/install/

 

Install

Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.

docs.docker.com

  • ํŒŒ๋“œ๊ฐ€ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์— ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” Containerd, CRI-O ๋“ฑ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ €๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” Docker๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.(์‚ฌ์‹ค ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค)
  • ์„ค์น˜๋Š” ๋งํฌ๋ฅผ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€ ๊ฐ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ์„ค์น˜ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ฐธ๊ณ ๋กœ Oracle linux์˜ ๊ฒฝ์šฐ ์•„๋ž˜์˜ ์„ค์น˜ ๊ณผ์ •์„ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • Ubuntu์˜ ๊ฒฝ์šฐ ์•„๋ž˜์˜ ์„ค์น˜ ๊ณผ์ •์„ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿšจ ๊ทธ๋Ÿฐ๋ฐ, ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿซฅ CRI

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด CRI(Container Runtime Interface)๋ผ๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” 1.24 ๋ฒ„์ „ ์ดํ›„๋กœ Docker๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฆ‰, Docker ์ž์ฒด๋Š” Kubernetes์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค 1.24 ๋ฒ„์ „ ์ด์ƒ์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด cri-dockerd๋ผ๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ๋งŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋„์ปค๋ฅผ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜, ์„ฑ๋Šฅ๊ณผ ํ˜ธํ™˜์„ฑ์—์„œ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, contaierd๋‚˜ CRI-O๋ฅผ CRI๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

๐Ÿซฅ ๋„์ปค ์—”์ง„๊ณผ Containerd

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

 

๐Ÿ“š ๊ด€๋ จ ๊ณต์‹ ๋ฌธ์„œ

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-runtime

 

Installing kubeadm

This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. This installation guide is for Kubernetes v1.32. If

kubernetes.io

 

 

๐Ÿซฅ IPv4๋ฅผ ํฌ์›Œ๋”ฉํ•˜์—ฌ iptables๊ฐ€ ๋ธŒ๋ฆฌ์ง€ ๋œ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๊ฒŒ ํ•˜๊ธฐ

# overlay์™€ br_netfilter ๋ชจ๋“ˆ ๋กœ๋“œ, ์žฌ๋ถ€ํŒ… ์‹œ์—๋„ ์„ค์ • ์ ์šฉํ•˜๋ ค๋ฉด ์„ค์ •ํŒŒ์ผ ๋งŒ๋“ค์–ด์•ผํ•จ
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

# ์ ์šฉ
sudo modprobe overlay
sudo modprobe br_netfilter

# ์ ์šฉ ํ™•์ธ
sudo lsmod | grep br_netfilter

# ์ถœ๋ ฅ
br_netfilter           xxxxx  0

# sysctl ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •, ์žฌ๋ถ€ํŒ… ์‹œ์—๋„ ์„ค์ • ์ ์šฉํ•˜๋ ค๋ฉด ์„ค์ •ํŒŒ์ผ ๋งŒ๋“ค์–ด์•ผํ•จ
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# ์žฌ๋ถ€ํŒ…ํ•˜์ง€ ์•Š๊ณ  sysctl ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉํ•˜๊ธฐ
sudo sysctl --system
  • ์ด ์ž‘์—…์€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•„์š”ํ•œ ์ปค๋„ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜๊ณ , ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํ•„ํ„ฐ๋ง ๋ฐ IP ํฌ์›Œ๋”ฉ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

 

overlay์™€ br_netfilter ๋ชจ๋“ˆ ๋กœ๋“œ

  • overlay: Kubernetes์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น์„ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค.
  • br_netfilter: ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ์—์„œ iptables ํ•„ํ„ฐ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
  • ์ด ๋‘ ๋ชจ๋“ˆ์„ /etc/modules-load.d/k8s.conf ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๊ณ  modprobe ๋ช…๋ น์–ด๋กœ ๋กœ๋“œํ•˜์—ฌ Kubernetes์˜ ๋„คํŠธ์›Œํ‚น ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

sysctl ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •

  • net.bridge.bridge-nf-call-iptables: Kubernetes ๋„คํŠธ์›Œํ‚น์—์„œ iptables ๊ทœ์น™์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • net.bridge.bridge-nf-call-ip6tables: IPv6์˜ ๊ฒฝ์šฐ๋„ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ํ•„ํ„ฐ๋ง์„ ์ ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • net.ipv4.ip_forward: ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด IP ํฌ์›Œ๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

sysctl --system

  • ์œ„์—์„œ ์„ค์ •ํ•œ ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฆ‰์‹œ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด sysctl --system ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์žฌ๋ถ€ํŒ… ์—†์ด ์ฆ‰์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“š ๊ด€๋ จ ๊ณต์‹ ๋ฌธ์„œ

https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes//#ํ•„์ˆ˜-์š”์†Œ๋“ค-์„ค์น˜-๋ฐ-๊ตฌ์„ฑํ•˜๊ธฐ

 

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

์ฐธ๊ณ : Dockershim์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆด๋ฆฌ์Šค 1.24๋ถ€ํ„ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ Dockershim ์ œ๊ฑฐ FAQ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. ํŒŒ๋“œ๊ฐ€ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์— ์ปจ

kubernetes.io

 

๐Ÿซฅ docker daemon.json

$ sudo vi /etc/docker/daemon.json

# ์•„๋ž˜ ๋‚ด์šฉ ์ €์žฅ
{  
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

# ๋„์ปค ์žฌ์‹œ์ž‘
$ sudo systemctl restart docker

# ํ™•์ธ
$ sudo docker info
Storage Driver: overlay2
...
 Cgroup Driver: systemd
  • containerd๋Š” Docker์˜ ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Docker ์„ค์ •์„ ์ˆ˜์ •ํ•˜์—ฌ Cgroup Driver๋ฅผ systemd๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด Kubernetes ํ™˜๊ฒฝ์—์„œ์˜ ํ˜ธํ™˜์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • systemd๋Š” Kubernetes 1.20 ์ดํ›„ ๊ถŒ์žฅ๋˜๋Š” ๋ณด๋‹ค ์•ˆ์ •์ ์ด๊ณ  ์ผ๊ด€๋œ Cgroup Driver์ž…๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์„ค์ • ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด sudo docker info ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋ณ€๊ฒฝ ์ „์—๋Š” Cgroup Driver: cgroupfs๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ systemd๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด Docker์˜ ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ์ดˆ๊ธฐ์—๋Š” ํ•ด๋‹น ์„ค์ • ํŒŒ์ผ(`/etc/docker/daemon.json`)์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, ์ด ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿซฅ  containerd systemd cgroup ๋“œ๋ผ์ด๋ฒ„ ๊ตฌ์„ฑ

$ containerd config default | sudo tee /etc/containerd/config.toml

$ sudo vi /etc/containerd/config.toml

# ์ฐพ์•„์„œ flase -> true๋กœ ๋ณ€๊ฒฝ
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
    
# ์žฌ์‹œ์ž‘
$ sudo systemctl restart containerd
  • ์ด ์ž‘์—…์€ containerd๊ฐ€ systemd๋ฅผ cgroup driver๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์ตœ์ดˆ์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ์„ค์น˜ ํ›„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ์„ค์ •์„ ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

[3] ๋ฆฌ๋ˆ…์Šค ์ข…๋ฅ˜๋ณ„ ์„ค์ •

โ€ผ๏ธ ์‹œ๊ฐ„์ด ์ง€๋‚˜ ๊ณต์‹๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๋ฉด ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. 

 

๐Ÿงค Debian ๊ธฐ๋ฐ˜(Ubuntu ๋“ฑ)

$ sudo apt-get install -y apt-transport-https ca-certificates curl gpg
  • ์ด ๋ช…๋ น์–ด๋Š” apt๋ฅผ ํ†ตํ•ด HTTPS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ํ•„์š”ํ•œ ์ธ์ฆ์„œ์™€ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • apt-transport-https: HTTPS ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด APT ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.
  • ca-certificates: ์•ˆ์ „ํ•œ HTTPS ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ธ์ฆ์„œ๋“ค์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • curl: URL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • gpg: GPG ํ‚ค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๋กœ, ํŒจํ‚ค์ง€์˜ ์„œ๋ช…์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿซฅ Kubernetes ์ €์žฅ์†Œ์˜ GPG ํ‚ค ๋‹ค์šด๋กœ๋“œ

## Ubuntu 22.04 ์ด์ „ ๋ฒ„์ „์—๋Š” /etc/apt/keyrings๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.
# sudo mkdir -p -m 755 /etc/apt/keyrings
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • Kubernetes ์ €์žฅ์†Œ์˜ GPG ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹œ์Šคํ…œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿซฅ Kubernetes์˜ APT ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์ถ”๊ฐ€

$ echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  • Kubernetes์˜ APT ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ๋ฅผ ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์ €์žฅ์†Œ์—์„œ Kubernetes ๊ด€๋ จ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก /etc/apt/sources.list.d/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— kubernetes.list ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿซฅ kubeadm, kubelet, kubectl ์„ค์น˜

# ๋ฆฌ๋ˆ…์Šค ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.
$ sudo apt-get update

# Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ 3๊ฐ€์ง€ ์ฃผ์š” ํŒจํ‚ค์ง€์ธ kubelet, kubeadm, kubectl์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
$ sudo apt-get install -y kubelet kubeadm kubectl

# kubelet, kubeadm, kubectl ํŒจํ‚ค์ง€๋“ค์„ ์ž๋™ ์—…๋ฐ์ดํŠธ์—์„œ ์ œ์™ธ์‹œ์ผœ, ์—…๋ฐ์ดํŠธ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘์— ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
$ sudo apt-mark hold kubelet kubeadm kubectl
  • kubelet
    • ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” Kubernetes์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
    • Kubernetes์˜ Pod์„ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • kubeadm
    • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    • ํด๋Ÿฌ์Šคํ„ฐ์˜ Control Plane ๊ตฌ์„ฑ, ๋…ธ๋“œ ์ถ”๊ฐ€ ๋“ฑ์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • kubectl
    • Kubernetes๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ CLI ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ, ์ƒํƒœ ํ™•์ธ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿซฅ kubelet ํ™œ์„ฑํ™”์™€ ์„ค์น˜ ํ™•์ธ์œผ๋กœ ๋„˜์–ด๊ฐ€์„ธ์š”.


โ›‘๏ธ RedHat ๊ธฐ๋ฐ˜(Oracle Linux, CentOS ๋“ฑ)

๐Ÿซฅ SELinux ๋น„ํ™œ์„ฑํ™”

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

 

SELinux์™€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์˜ ์ถฉ๋Œ

  • SELinux(Security-Enhanced Linux)๋Š” ํŒŒ์ผ, ํ”„๋กœ์„ธ์Šค, ๋„คํŠธ์›Œํฌ ๋“ฑ์— ๋Œ€ํ•ด ๊ฐ•๋ ฅํ•œ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์™€ ์™ธ๋ถ€ ๊ฐ„์˜ ๋ฆฌ์†Œ์Šค(ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ๋“ฑ)๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
  • SELinux๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด, ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด ์ด๋Ÿฌํ•œ ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ ๊ถŒํ•œ ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Pod์—์„œ ๊ณต์œ  ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ SELinux์˜ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ถฉ๋Œํ•˜์—ฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ(CNI)์ด๋‚˜ kubelet์ด SELinux ์ •์ฑ…์— ์˜ํ•ด ์ฐจ๋‹จ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿซฅ ์Šค์™‘ ๋น„ํ™œ์„ฑํ™”

## ์ผ์‹œ์  ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ(์ด๊ฑด ์žฌ๋ถ€ํŒ… ์‹œ ์ดˆ๊ธฐํ™”๋˜๋ฏ€๋กœ ์•„๋ž˜ ์ž๋™ ๋น„ํ™œ์„ฑํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ž)
# ์Šค์™‘ ์ƒํƒœ ํ™•์ธ
$ free -h

# ์Šค์™‘ ์ผ์‹œ์  ๋น„ํ™œ์„ฑํ™”
$ sudo swapoff -a

# ์Šค์™‘ ์ƒํƒœ ์žฌํ™•์ธ
$ free -h

# ์ถœ๋ ฅ
Swap:            0B          0B          0B

######################################################################
## ์ž๋™ ๋น„ํ™œ์„ฑํ™”
# ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
$ sudo vi /etc/fstab

# ์ฃผ์„์ฒ˜๋ฆฌ ํ•˜๊ธฐ
# /.swapfile    none    swap    sw,comment=cloudconfig  0       0

# ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ…
$ sudo reboot

# ์Šค์™‘ ์ƒํƒœ ์žฌํ™•์ธ
$ free -h

# ์ถœ๋ ฅ
Swap:            0B          0B          0B
  • kubelet์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋…ธ๋“œ์—์„œ ์Šค์™‘ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹คํ–‰์„ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šค์™‘(Swap)์ด๋ž€?
    • ์Šค์™‘์€ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ(RAM)๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ๋””์Šคํฌ์˜ ํŠน์ • ๊ณต๊ฐ„์„ ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณด์กฐํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ Kubernetes๋Š” ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ ์ด์œ ๋กœ ์Šค์™‘ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šค์™‘์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ดˆ๊ธฐํ™” ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“š ๊ด€๋ จ ๊ณต์‹ ๋ฌธ์„œ 

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#swap-configuration

 

Installing kubeadm

This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. This installation guide is for Kubernetes v1.32. If

kubernetes.io

 

 

๐Ÿซฅ kubeadm, kubelet, kubectl ์„ค์น˜

Kubernetes Repository ์„ค์ •

$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
  • Kubernetes์˜ ๊ณต์‹ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Kubernetes ์„ค์น˜์™€ ๊ด€๋ จ๋œ ํŒจํ‚ค์ง€๋ฅผ ์‹œ์Šคํ…œ์—์„œ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ €์žฅ์†Œ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • exclude: ํŠน์ • ํŒจํ‚ค์ง€๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์ง€ ์•Š๋„๋ก ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.(์—ฌ๊ธฐ์„  kubelet, kubeadm, kubectl ๋“ฑ ์ œ์™ธ)
  • exclude๋ฅผ ์„ค์ •ํ•˜๋Š” ์ด์œ ๋Š”
    1. ์ €์žฅ์†Œ ์ถฉ๋Œ ๋ฐฉ์ง€: ์˜๋„ํ•˜์ง€ ์•Š์€ ์ €์žฅ์†Œ๋‚˜ ์˜ค๋ž˜๋œ ํŒจํ‚ค์ง€์—์„œ ์„ค์น˜๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    2. ์—…๋ฐ์ดํŠธ ํ†ต์ œ: ์ž๋™ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์˜ˆ๋ฐฉํ•ฉ๋‹ˆ๋‹ค.
    3. ์ˆ˜๋™ ๊ด€๋ฆฌ ๊ฐ•์ œ: ๋ช…์‹œ์ ์œผ๋กœ๋งŒ ์„ค์น˜/์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๊ด€๋ฆฌ์˜ ๋ช…ํ™•์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

Kubernetes ๊ตฌ์„ฑ ์š”์†Œ ์„ค์น˜

# ๋ฆฌ๋ˆ…์Šค ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
$ sudo dnf update

$ sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  • ์ด ๋‹จ๊ณ„์—์„œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • kubelet
    • ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” Kubernetes์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
    • Kubernetes์˜ Pod์„ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • kubeadm
    • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    • ํด๋Ÿฌ์Šคํ„ฐ์˜ Control Plane ๊ตฌ์„ฑ, ๋…ธ๋“œ ์ถ”๊ฐ€ ๋“ฑ์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • kubectl
    • Kubernetes๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ CLI ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ, ์ƒํƒœ ํ™•์ธ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • --disableexcludes=kubernetes
    • exclude ๋œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ•์ œ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ํŠน์ • ์ €์žฅ์†Œ(Kubernetes ๊ณต์‹ ์ €์žฅ์†Œ)์—์„œ๋งŒ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ฐ•์ œํ•˜๋ฉฐ, ๊ด€๋ฆฌ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Œ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

[4] kubelet ํ™œ์„ฑํ™”์™€ ์„ค์น˜ ํ™•์ธ

๐Ÿซฅ kubelet ํ™œ์„ฑํ™”

$ sudo systemctl enable --now kubelet
  • kubelet ์„œ๋น„์Šค๋ฅผ ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •ํ•˜๊ณ , ์ฆ‰์‹œ ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

 

kubelet ํ™•์ธ

$ sudo systemctl status kubelet
  • ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด kubelet์ด activiting ์ƒํƒœ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•„์ง kubeadm์„ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•„ ๊ณ„์† ์‹คํ–‰ ์‹œ๋„ ์ค‘์ธ ์ƒํƒœ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[5] master, worker node ์—ฐ๊ฒฐ

๐Ÿซฅ master node

kubeadm ์ดˆ๊ธฐํ™”(CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋”ฐ๋ฅธ ์˜ต์…˜)

# flannel
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# ์ถœ๋ ฅ
$ kubeadm join ***.***.***.***:6443 --token <ํ† ํฐ๊ฐ’>

# ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๋ฆฌ์…‹ํ•˜๊ณ  ๋‹ค์‹œํ•  ์ˆ˜๋„ ์žˆ์Œ
$ sudo kubeadm reset
  • 10.244.0.0/16์€ Flannel CNI(Container Network Interface) ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ๊ธฐ๋ณธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • Flannel์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ Pod ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ด CIDR ๋ฒ”์œ„๋Š” ๊ฐ Pod์— ํ• ๋‹น๋  IP ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งจ ๋งˆ์ง€๋ง‰์— worker node์— ์ž…๋ ฅํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” join ๋ช…๋ น๋ฌธ์ด ๋‚˜์˜ค๋ฏ€๋กœ ์ด๋ฅผ ๋ณต์‚ฌํ•ด ๋‘ก๋‹ˆ๋‹ค.

 

kubectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ

$ mkdir -p $HOME/.kube
# reset ํ›„ ์žฌ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” yes๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋จ
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

## k8s ์น˜ํŠธ์‹œํŠธ
# ํƒญ์œผ๋กœ ์ž๋™ ๊ฒ€์ƒ‰ ๋„์™€์คŒ ์˜ˆ๋ฅผ ๋“ค์–ด -n kube-system์„ k๋งŒ ์ž…๋ ฅํ•˜๊ณ  tabํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง
$ echo "source <(kubectl completion bash)" >> ~/.bashrc

# kubectl ๋Œ€์‹  k๋งŒ ์ž…๋ ฅํ•ด๋„ ๋จ
$ echo "alias k=kubectl" >> ~/.bashrc
$ echo "complete -o default -F __start_kubectl k" >> ~/.bashrc

# ์ ์šฉ
$ source ~/.bashrc

# ์œ„ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ํŒŒ๋“œ๋ฅผ ์กฐํšŒํ•ด๋ณด์ž.
$ kubectl get po -A or k get po -A
  • ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋‹ค๋ฉด ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ํŒŒ๋“œ๋ฅผ ์กฐํšŒ์‹œ ์ •์ƒ์ ์œผ๋กœ ์กฐํšŒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

$ k get po -A
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-xxxxxxxxx-xxxxxx             0/1     Pending   0          4m19s
kube-system   coredns-xxxxxxxxx-xxxxxx             0/1     Pending   0          4m19s
kube-system   etcd-host-name                       1/1     Running   0          4m26s
kube-system   kube-apiserver-host-name             1/1     Running   0          4m26s
kube-system   kube-controller-manager-host-name    1/1     Running   0          4m26s
kube-system   kube-proxy-xxxxx                     1/1     Running   0          4m19s
kube-system   kube-scheduler-host-name             1/1     Running   0          4m26s
  • coredns์˜ ๊ฒฝ์šฐ CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์•ผ Pending์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

CNI ํ”Œ๋Ÿฌ๊ทธ์ธ(flannel) ์„ค์น˜

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • flannel์€ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ์ถฉ์‹คํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

๐Ÿซฅ worker node

masternode์™€ ์—ฐ๊ฒฐ

# ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ kubeadm init์„ ํ†ตํ•ด ๋‚˜์˜จ join ๋ช…๋ น๋ฌธ์„ ๋ณต์‚ฌํ•ด์„œ ์‹คํ–‰
kubeadm join ***.***.***.***:6443 --token <ํ† ํฐ๊ฐ’>
  • ์ด๋•Œ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐฉํ™”๋ฒฝ์„, ํด๋ผ์šฐ๋“œ์˜ ๊ฒฝ์šฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์„ค์ •๊นŒ์ง€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ จ ํฌํŠธ๊ฐ€ ์—ด๋ ค์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ด…๋‹ˆ๋‹ค.

 

masternode์—์„œ ์—ฐ๊ฒฐ ํ™•์ธ

$ kubectl get nodes
NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   2m11s   v1.32.0
worker    Ready    <none>          20s     v1.32.0

 


[6] testPod ๋„์›Œ๋ณด๊ธฐ

$ kubectl run testpod --image=nginx
pod/testpod created

$ kubectl get po
NAME      READY   STATUS    RESTARTS   AGE
testpod   1/1     Running   0          8s

 

 

 

์ฐธ๊ณ 

https://github.com/kubernetes/website/commit/f73647531dcdade2327412253a5f839781d57897/

https://diamond-goose.tistory.com/65

https://nginxstore.com/blog/kubernetes/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค-์„ค์น˜-๋ฐฉ๋ฒ•-vm-ํ™˜๊ฒฝ-ํŠœํ† ๋ฆฌ์–ผ/#2-4

https://yes-admit.tistory.com/123

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

728x90