kubernetes ์„ค์น˜..

์ž„์žฌ์„ฑยท2025๋…„ 11์›” 2์ผ

๐Ÿš€ Kubernetes 3๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ• (๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ Master + Worker)

์ด ๊ธ€์€ JB Ground ๋ธ”๋กœ๊ทธ์˜ ๊ฐ€์ด๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ,
VirtualBox + Ubuntu 22.04 ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
๋ณธ ๊ตฌ์„ฑ์€ 3๋Œ€์˜ ์„œ๋ฒ„ ๋ชจ๋‘๊ฐ€ Control Plane(๋งˆ์Šคํ„ฐ) ๊ณผ Worker ๋…ธ๋“œ ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ–ฅ๏ธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

๋…ธ๋“œ์—ญํ• IP ์ฃผ์†ŒOS
node1Master + Worker10.0.2.4Ubuntu 22.04
node2Master + Worker10.0.2.5Ubuntu 22.04
node3Master + Worker10.0.2.6Ubuntu 22.04

๐Ÿ’ก ๋ชจ๋“  ๋…ธ๋“œ๋Š” VirtualBox์—์„œ NAT Network ๋ชจ๋“œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


โ€ป ๋ชจ๋“  ์„ค์น˜ ๊ณผ์ •์€ root ๊ณ„์ •์œผ๋กœ ์ง„ํ–‰ํ•  ๊ฒƒ์„ ๊ถŒ์žฅ

#root ๊ณ„์ • ์ ‘์† ๋ฐฉ๋ฒ•
sudo su

1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ ์ค€๋น„

ํด๋ผ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‚ฌ์ „ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

swap ๋ฉ”๋ชจ๋ฆฌ ๋น„ํ™œ์„ฑํ™”
ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ
์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์„ค์น˜

1.1. OS ์ •๋ณด ํ™•์ธ

Master Node ์ตœ์†Œ ์‚ฌ์–‘	Worker Node ์ตœ์†Œ ์‚ฌ์–‘
CPU: 2 Core, RAM: 2GB	CPU: 1 Core, RAM: 1GB
#์ฝ”์–ด ํ™•์ธ
nproc

#๋ฉ”๋ชจ๋ฆฌ ํ™•์ธ
free -h

#MAC ํ™•์ธ
ifconfig -a

#product uuid ํ™•์ธ
sudo cat /sys/class/dmi/product_uuid
#๋˜๋Š” 
sudo cat /sys/class/dmi/id/product_uuid

1.2. ๋ฉ”๋ชจ๋ฆฌ swap ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™”

#swap ์ž„์‹œ ๋น„ํ™œ์„ฑํ™”
sudo swapoff -a 

#swap ์˜๊ตฌ ๋น„ํ™œ์„ฑํ™”
sudo sed -i '/swap/s/^/#/' /etc/fstab

#๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ํ™•์ธ
sudo free -m

#swap ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ํ™•์ธ, ์ถœ๋ ฅ๊ฐ’์ด ์—†์œผ๋ฉด swap ๋ฉ”๋ชจ๋ฆฌ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ
sudo swapon -s

swap ๋น„ํ™œ์„ฑํ™” ๊ฒฐ๊ณผ

โ€ป์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ ๋น„ํ™œ์„ฑํ™” ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

#swap unit ์กฐํšŒ
systemctl list-unit-files --type swap

#swap unit(dev-ํŒŒํ‹ฐ์…˜์ด๋ฆ„.swap)์„ maskํ•ด์„œ ๋น„ํ™œ์„ฑํ™”
systemctl mask [swap unit๋ช…]
ex) systemctl mask dev-sda3.swap

#๋น„ํ™œ์„ฑํ™” ์ ์šฉ ํ™•์ธ
sudo systemctl list-unit-files --type swap

1.3. ๋ฐฉํ™”๋ฒฝ ์„ค์ •

๋ฐฉ๋ฒ•1: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํฌํŠธ๋งŒ ๋ฐฉํ™”๋ฒฝ ํฌํŠธ ๊ฐœ๋ฐฉ

#๋ฐฉํ™”๋ฒฝ ์˜ˆ์™ธ ์„ค์ •(๋งˆ์Šคํ„ฐ, ์›Œ์ปค)

sudo apt-get install -y firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

#๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์ผ ๊ฒฝ์šฐ
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250-10252/tcp
sudo firewall-cmd --permanent --add-port=8285/udp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload

#์›Œ์ปค ๋…ธ๋“œ์ผ ๊ฒฝ์šฐ
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --permanent --add-port=8285/udp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --add-port=26443/tcp
sudo firewall-cmd --reload

๋ฐฉ๋ฒ•2: ๋ฐฉํ™”๋ฒฝ ๋น„ํ™œ์„ฑํ™”

#๋ฐฉํ™”๋ฒฝ ๋น„ํ™œ์„ฑํ™”(๋งˆ์Šคํ„ฐ, ์›Œ์ปค)
sudo apt-get install -y firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld

๋ฐฉํ™”๋ฒฝ ์˜คํ”ˆ ์ƒํƒœ ํ™•์ธ

#์—ด๋ฆฐ ํฌํŠธ ํ™•์ธ
sudo firewall-cmd --list-all

#์—ด๋ฆฐ ํฌํŠธ ํ™•์ธ
sudo netstat -tlnp

#๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ํฌํŠธ ์ ๊ฒ€
telnet [ip] [port]
ex) telnet 192.168.100.128 6443

Trying 192.168.111.128...
telnet: Unable to connect to remote host: Connection refused
#Trying 192.168.111.128... ๋งŒ ๊ณ„์† ๋‚˜์˜ค๋ฉด ๋ฐฉํ™”๋ฒฝ ์˜คํ”ˆ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
#Connection refuesed๊ฐ€ ๋‚˜์˜ค๋ฉด ๋ฐฉํ™”๋ฒฝ ์˜คํ”ˆ์€ ๋˜์–ด ์žˆ์œผ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ์žˆ์ง€ ์•Š์€ ์ƒํƒœ

#๋ฐฉ๋ฒ•2
curl -v telnet://[ip]:[port]

1.4. ๋„คํŠธ์›Œํฌ ์˜ต์…˜ ์„ค์ •

#/etc/modules-load.d/k8s.conf ํŒŒ์ผ ์ƒ์„ฑ
sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
 
#/etc/sysctl.d/k8s.conf ํŒŒ์ผ ์ƒ์„ฑ
sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#์‹œ์Šคํ…œ ์žฌ์‹œ์ž‘ ์—†์ด stysctl ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ˜์˜
sudo sysctl --system

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

๊ธ€์“ด์ด๋Š” ๋„์ปค๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜ํ•œํ›„ ๋ธ”๋กœ๊ทธ์— ์žˆ๋Š” ๋„์ปค์ชฝ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์˜€์Œ.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ์˜ ์‹คํ–‰, ๊ด€๋ฆฌ ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ๋ณ„๋„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜์— ์•ž์„œ ๋„์ปค๋ฅผ ์„ ํ–‰ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋Š” Docker์˜ ํ•ต์‹ฌ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๊ตฌ์„ฑ ์š”์†Œ๋กœ ํ™•์žฅํ•œ ๊ฒƒ์ด Containerd์ด๊ธฐ ๋•Œ๋ฌธ์— Docker์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ธ Containerd๋ฅผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋„์ปค๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ด์œ 

๋„์ปค ๋ฟ๋งŒ์ด ์•„๋‹Œ CRI ํ‘œ์ค€์„ ๋งŒ์กฑํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์€ ๋ชจ๋‘ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Containerd์™€ CRI-O๊ฐ€ ์žˆ๋‹ค.

CRI(Container Runtime Interface)
Containerd: ๋„์ปค์˜ ํ•ต์‹ฌ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๊ตฌ์„ฑ ์š”์†Œ๋กœ ํ™•์žฅํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋„์ปค ์—”์ง„์— ๊ธฐ๋ณธ์œผ๋กœ ํƒ‘์žฌ๋˜์–ด ์žˆ์–ด ์ง€๊ธˆ๋„ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„
CRI-O: ๋ ˆ๋“œํ–‡์ด ๊ฐœ๋ฐœํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์šฉ OCI(Open Container initiative) ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋„์ปค๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ CRI ๊ตฌํ˜„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ „์šฉ ๋Ÿฐํƒ€์ž„

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ช‡ ๊ฐ€์ง€ ์†Œ๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

  • docker ์„ค์น˜ ์‹œ Depends๋กœ ํ•จ๊ป˜ ์„ค์น˜๋˜๋Š” containerd ํŒจํ‚ค์ง€ ์‚ฌ์šฉ
  • containerd๋งŒ ์„ค์น˜ ์‚ฌ์šฉ
  • docker engine + cri-dockerd
    โ€ป ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•œ๊ฐ€์ง€๋งŒ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.

2.1. ๋ฐฉ๋ฒ•1) Docker ์„ค์น˜ ํ›„ Containerd ํŒจํ‚ค์ง€ ์‚ฌ์šฉ

2.1.1. apt ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜

#apt ์—…๋ฐ์ดํŠธ
sudo apt-get update

#ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
 

2.1.2. ๊ณต๊ฐœํ‚ค ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ €์žฅ์†Œ ๋“ฑ๋ก
#๊ณต๊ฐœํ‚ค ๋‹ค์šด๋กœ๋“œ
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# ์ €์žฅ์†Œ ๋“ฑ๋ก
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2.1.3. ๋„์ปค ์„ค์น˜

#์ €์žฅ์†Œ ์ถ”๊ฐ€๋กœ apt ์—…๋ฐ์ดํŠธ
sudo apt update

#๋„์ปค ์„ค์น˜
sudo apt install -y docker.io ๋˜๋Š” sudo apt install -y docker-ce

#๋„์ปค ๋ฒ„์ „ ์กฐํšŒ
docker --version
โ€ป docker.io ๋ฐ๋น„์•ˆ(์šฐ๋ถ„ํˆฌ)์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„์ปค ํŒจํ‚ค์ง€๋กœ ๋ฐ๋น„์•ˆ ์ €์žฅ์†Œ์—์„œ ๋„์ปค ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

docker.io ๋Š” docker์˜ ์™ธ๋ถ€ ์ข…์†์„ฑ ํŒจํ‚ค์ง€๋Š” ๋งˆ์ดํฌ๋กœ ํŒจํ‚ค์ง•์œผ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ํŒจํ‚ค์ง•๋˜์–ด ์žˆ๋‹ค.

docker-ce ์„ค์น˜ ์‹œ โ†’ ์™ธ๋ถ€ ์ข…์†์„ฑ ํŒจํ‚ค์ง€๋กœ containerd.io ์„ค์น˜๋จ.

docker.io ์„ค์น˜ ์‹œ โ†’ ์™ธ๋ถ€ ์ข…์†์„ฑ ํŒจํ‚ค์ง€๋กœ containerd ์„ค์น˜๋จ.

2.1.4 ๋„์ปค ๋ฐ๋ชฌ ์„ค์ •

#/etc/docker ๋””๋ ‰ํ† ๋ฆฌ ์—†์„ ๊ฒฝ์šฐ ์ƒ์„ฑ
sudo mkdir /etc/docker

#daemon.json ํŒŒ์ผ ์ถ”๊ฐ€
sudo cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

2.1.5. ํ•„์š”์‹œ cgroup(runc) ์˜ต์…˜ ์„ค์ •

Kubernetes 1.22๋ฒ„์ „๋ถ€ํ„ฐ๋Š” systemd์™€ cgroup ๋งž์ถฐ์•ผํ•จ.

#containerd ๊ตฌ์„ฑ ํŒŒ์ผ ์ƒ์„ฑ
sudo mkdir -p /etc/containerd

#containerd ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์œผ๋กœ config.toml ์ƒ์„ฑ
sudo containerd config default | sudo tee /etc/containerd/config.toml

#config.toml ํŒŒ์ผ ์ˆ˜์ •
vi /etc/containerd/config.toml

# cgroup driver(runc) ์‚ฌ์šฉํ•˜๊ธฐ ์„ค์ •
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

#์ˆ˜์ •์‚ฌํ•ญ ์ ์šฉ ๋ฐ ์žฌ์‹คํ–‰
sudo systemctl restart containerd

2.1.6. ๋„์ปค ์žฌ์‹œ์ž‘

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

#๋„์ปค ์ƒํƒœ ์กฐํšŒ
sudo service docker status

docker.io ์„ค์น˜ ๊ฒฐ๊ณผ

2.2. ๋ฐฉ๋ฒ•2) Containerd ์„ค์น˜ ํ›„ ์‚ฌ์šฉ

2.2.1. apt ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜

#apt ์—…๋ฐ์ดํŠธ
sudo apt-get update

#ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

2.2.2. ๊ณต๊ฐœํ‚ค ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ €์žฅ์†Œ ๋“ฑ๋ก

#๊ณต๊ฐœํ‚ค ๋‹ค์šด๋กœ๋“œ
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# ์ €์žฅ์†Œ ๋“ฑ๋ก
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2.2.3. containerd ํŒจํ‚ค์ง€ ์„ค์น˜

#์ €์žฅ์†Œ ์ ์šฉ์„ ์œ„ํ•œ apt ์—…๋ฐ์ดํŠธ
sudo apt-get update

#containerd ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install containerd

#์„ค์น˜ ํ™•์ธ
sudo systemctl status containerd

2.2.4. containerd config ์˜ต์…˜ ์„ค์ •

#containerd ๊ตฌ์„ฑ ํŒŒ์ผ ์ƒ์„ฑ
sudo mkdir -p /etc/containerd

#containerd ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์œผ๋กœ config.toml ์ƒ์„ฑ
sudo containerd config default | sudo tee /etc/containerd/config.toml

#config.toml ํŒŒ์ผ ์ˆ˜์ •
vi /etc/containerd/config.toml

# cgroup driver(runc) ์‚ฌ์šฉํ•˜๊ธฐ ์„ค์ •
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

#์ˆ˜์ •์‚ฌํ•ญ ์ ์šฉ ๋ฐ ์žฌ์‹คํ–‰
sudo systemctl restart containerd

2.3. ๋ฐฉ๋ฒ•3) Docker Engine + cri-dockerd ์ ์šฉ

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

๋˜๋Š” dockershim์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ํฌ๋ฆฌ๋„์ปค๋“œ(cri-dockerd)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

2.3.1. apt ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜

#apt ์—…๋ฐ์ดํŠธ
sudo apt update

#ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt install -y apt-transport-https ca-certificates curl gnupg

#์„ค์น˜ ํŒจํ‚ค์ง€ ์กฐํšŒ
dpkg -l | grep [ํŒจํ‚ค์ง€๋ช…]

2.3.2. docker gpg ํ‚ค ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ €์žฅ์†Œ ์ถ”๊ฐ€

#๊ณต๊ฐœํ‚ค ๋‹ค์šด๋กœ๋“œ
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# ์ €์žฅ์†Œ ๋“ฑ๋ก
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2.3.3. docker ํŒจํ‚ค์ง€ ์„ค์น˜

#๋“ฑ๋กํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด apt update
sudo apt update

#docker ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt install -y docker-ce

2.3.4. ์„ค์น˜ ํ™•์ธ

#๋ฒ„์ „ ํ™•์ธ
docker --version

#hello-world container ์ƒ์„ฑ
docker run -it --name [์ปจํ…Œ์ด๋„ˆ๋ช…] hello-world

#๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์กฐํšŒ
docker ps -a

#๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rm [์ปจํ…Œ์ด๋„ˆID ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ช…]

#๋„์ปค ์ด๋ฏธ์ง€ ์กฐํšŒ
docker images

#๋„์ปค ์ด๋ฏธ์ง€ ์‚ญ์ œ
docker rmi [์ด๋ฏธ์ง€๋ช…]

2.3.5. cri-dockerd๋ฅผ ์ด์šฉํ•˜์—ฌ ๋„์ปค ์—”์ง„๊ณผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์—ฐ๊ฒฐ

#cri-dockerd ์†Œ์Šค์ฝ”๋“œ ๋ณต์‚ฌ
git clone https://github.com/Mirantis/cri-dockerd.git

#Go์–ธ์–ด ์„ค์น˜
wget https://storage.googleapis.com/golang/getgo/installer_linux
chmod +x ./installer_linux
./installer_linux
source ~/.bash_profile

#cri-dockerd ๋นŒ๋“œ
cd cri-dockerd
mkdir bin
go build -o bin/cri-dockerd

#/usr/local/bin ์œผ๋กœ ๋นŒ๋“œํŒŒ์ผ ๋ณต์‚ฌ
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd

#systemd์— ์„œ๋น„์Šค ๋“ฑ๋ก
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service

#์žฌ๊ธฐ๋™
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
sudo systemctl restart docker && sudo systemctl restart cri-docker

#์ƒํƒœ ํ™•์ธ
sudo systemctl status cri-docker.socket --no-pager

# Docker daemon Cgroup ๋ณ€๊ฒฝ
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
 

3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ(Kubernetes Cluster) ์„ค์น˜

3.1. apt ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜

ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ๋ชฉ๋ก

apt-transport-https
ca-certificates
curl
gnupg
#apt ์—…๋ฐ์ดํŠธ
sudo apt-get update

#ํ•„์ˆ˜ ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

3.2. ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ์˜ ๊ณต์บ ํ‚ค ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ถ”๊ฐ€

#๊ณต๊ฐœ ํ‚ค ๋‹ค์šด๋กœ๋“œ
curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg

#apt ์ €์žฅ์†Œ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ €์žฅ์†Œ ์ถ”๊ฐ€
sudo echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

#โ€ป 23.01์ฏค ๋ถ€ํ„ฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ €์žฅ์†Œ url์ด ๋ณ€๊ฒฝ๋จ.
#https://packages.cloud.google.com/apt/doc/apt-key.gpg -> https://dl.k8s.io/apt/doc/apt-key.gpg
 

โ€ปUbuntu 20.04์—๋Š” /etc/apt/keyrings ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ํ•„์š”. 22.04 ์ดํ›„์—๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์กด์žฌํ•จ

#keyrings ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
sudo mkdir -p /etc/apt/keyrings

#๊ฐœ์ธํ‚ค ๋‹ค์šด๋กœ๋“œ
curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg

#์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ถ”๊ฐ€
sudo apt-add-repository "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] http://apt.kubernetes.io/ kubernetes-xenial main"
 

โ€ป๊ทธ๋ž˜๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ vi ํŽธ์ง‘๊ธฐ๋กœ kubenetes.list ํŒŒ์ผ์— ํ•ด๋‹น ๋ฌธ์ž์—ด ์ถ”๊ฐ€

sudo vi /etc/apt/sources.list.d/kubernetes.list 

#๋‹ค์Œ ๋ฌธ์ž์—ด ์ถ”๊ฐ€
deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] http://apt.kubernetes.io/ kubernetes-xenial main

3.3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒจํ‚ค์ง€ ์„ค์น˜

#์ €์žฅ์†Œ ์ถ”๊ฐ€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— apt ์—…๋ฐ์ดํŠธ
sudo apt-get update

#์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install -y kubelet kubeadm kubectl

#์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๊ณ ์ •
sudo apt-mark hold kubelet kubeadm kubectl

#์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ ๋ฒ„์ „ ์กฐํšŒ
kubelet --version
kubeadm version
kubectl version

#kubelet service ํ™•์ธ
sudo systemctl status kubelet.service

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ ๊ฒฐ๊ณผ

4. Master Node ๊ตฌ์„ฑ

4.1. Control-Plane ๊ตฌ์„ฑ

๋งŒ์•ฝ haproxy๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  VIP๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค๋ฉด VIP๊ฐ€ ํ• ๋‹น์ค‘์ธ

kubeadm์„ ํ†ตํ•ด Control-Plane ์„ค์ •์„ ์™„๋ฃŒํ•˜๋ฉด Worker Node์˜ joinํ‚ค๊ฐ€ ๋ฐœ๊ธ‰๋˜๊ณ  ํ•ด๋‹น ํ‚ค๋กœ Worker Node๋ฅผ ๋“ฑ๋ก ์‹œ ์‚ฌ์šฉํ•˜๋‹ˆ ๊ผญ ๊ธฐ์–ตํ•ด๋†“์ž

#์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด
#๋ณ„๋„์˜ ์˜ต์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ๋””ํดํŠธ ๊ฐ’์œผ๋กœ ์ ์šฉ
kubeadm init [์˜ต์…˜]

ํ•˜๋‹จ์˜ ์ดˆ๊ธฐํ™” ์„ค์ • ๋ช…๋ น์€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋„ ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.(๋งŒ์•ฝ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋งˆ์ง€๋ง‰ ํ™•์ธ ์ž‘์—… ''kubectl get nodes -o wide'' ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์˜ STATUS๊ฐ€ NotReady๋กœ ํ‘œ์‹œ๋ ๊บผ๋‹ค.)

#Flannel(๋””ํดํŠธ ์„ค์ • ๊ฐ’)
sudo kubeadm init
#๋˜๋Š”
sudo kubeadm init \
  --control-plane-endpoint "10.0.2.10:6443" \ # vip์‚ฌ์šฉ ๋˜๋Š” ๋‚˜์ค‘ ํ™•์žฅ์‹œ.
  --upload-certs \
  --pod-network-cidr=192.168.0.0/16

#Calico
sudo kubeadm init \
  --control-plane-endpoint "10.0.2.10:6443" \ # vip์‚ฌ์šฉ ๋˜๋Š” ๋‚˜์ค‘ ํ™•์žฅ์‹œ.
  --upload-certs \
  --pod-network-cidr=192.168.0.0/16

๋งŒ์•ฝ VIP(๊ฐ€์ƒ IP)๋ฅผ ์“ฐ๊ณ  ์‹ถ๋‹ค.

  • ์—ฌ๋Ÿฌ ๋งˆ์Šคํ„ฐ๋ฅผ HA๋กœ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋ณดํ†ต Keepalived๋‚˜ HAProxy๋กœ control-plane-endpoint ๋ฅผ ๊ณ ์ •.
    ์˜ˆ๋ฅผ ๋“ค์–ด,
    --control-plane-endpoint "k8s-cluster.example.local:6443"
    ์œผ๋กœ ์„ค์ •ํ•˜๊ณ 
    ์ด ์ด๋ฆ„์„ /etc/hosts์— VIP๋กœ ๋งคํ•‘ํ•ด๋‘๋ฉด
    ์–ด๋А ๋งˆ์Šคํ„ฐ๊ฐ€ active๋“ ์ง€ ์ ‘์†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ ๋ชฉ๋ก
--config : ์ดˆ๊ธฐํ™”์— ์‚ฌ์šฉํ•  ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ง€์ •
--token : ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ํ† ํฐ์„ ์ดˆ๊ธฐํ™”
--pod-network-cidr : ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ Pod ๋„คํŠธ์›Œํฌ CIDR ๋ฒ”์œ„๋ฅผ ์ง€์ •
--apiserver-advertise-address : API ์„œ๋ฒ„๊ฐ€ ํผ๋ธ”๋ฆญ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•ด ์•Œ๋ฆด IP ์ฃผ์†Œ๋ฅผ ์ง€์ •
--apiserver-cert-extra-sans : ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์ธ์ •์Šค์— ์ถ”๊ฐ€ํ•  DNS ์ด๋ฆ„์„ ์ง€์ •
--control-plane-endpoint : ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง€์ •
--cri-socket : ์‚ฌ์šฉํ•  CRI์˜ ์†Œ์ผ“์„ ์ง€์ •

4.2. kubectl ์„ค์ •

๊ธ€์“ด์ด๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์ด๋ฏ€๋กœ ๋ชจ๋‘ ๋‹ค ์ ์šฉ ํ•ด์คฌ๋‹ค.

root ๊ณ„์ •์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณ„์ •์—์„œ๋„ kubectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด config ์„ค์ •

โ€ปconfig ์„ค์ •์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ kubectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ ์‹œ

The connection to the server localhost:8080 was refused - did you specify the right host or port?

๋ฌธ๊ตฌ๋ฅผ ๋„์šฐ๋ฉด์„œ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ๊ฑฐ์ ˆ๋  ์ˆ˜ ์žˆ๋‹ค.

sudo mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.3. CNI(Container Network Interface) ์„ค์ • (๋งˆ์Šคํ„ฐ๋…ธ๋“œ ์ดˆ๊ธฐํ™”ํ›„ ์ง„ํ–‰)

์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” Pod๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ ๋ฐฉ์‹์„ ์ ์šฉํ•˜์—ฌ ์—”๋“œํฌ์ธํŠธ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๊ฒฝ๋กœ๋ฅผ ๋‹จ์ˆœํ™”ํ•œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งˆ๋‹ค ์„ค์ • ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค.

Flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Calico

curl https://docs.projectcalico.org/manifests/calico.yaml -O --insecure 
kubectl apply -f calico.yaml

cni ์„ค์น˜ ๊ฒฐ๊ณผ

#CNI ์ ์šฉ ํ™•์ธ
kubectl get pods -A -o wide

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-g8j8h 1/1 Running 0 87s

5. Worker Node ๊ตฌ์„ฑ

5.1. Worker Node ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ€์ž…

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ kubeadm init ์„ ํ†ตํ•ด ์ƒ์„ฑํ•œ join ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์›Œ์ปค ๋…ธ๋“œ ๋“ฑ๋ก

sudo kubeadm join [ip]:6443 --token [ํ† ํฐ๋ช…] --discovery-token-ca-cert-hash [hashkey]

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ์›Œ์ปค๋…ธ๋“œ์˜ ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ๋„๋ก...
kubectl taint nodes <๋งˆ์Šคํ„ฐ๋…ธ๋“œ์ด๋ฆ„> node-role.kubernetes.io/control-plane-

6. ์ตœ์ข… ํ™•์ธ

6.1. Master Node์—์„œ node ์ƒํƒœ ํ™•์ธ

sudo kubectl get node
๋˜๋Š”
sudo kubectl get nodes -o wide

๋งŒ์•ฝ 8080 connect:connection refused ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด
๋‹จ์ˆœํžˆ sudo๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹คํ–‰.. kubectl์ž์ฒด๋Š” root๊ถŒํ•œ์ด ํ•„์š”์—†๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๊ถŒํ•œ์€ kubeconfig๊ฐ€ ์ฒ˜๋ฆฌ.

7. ๋งˆ์Šคํ„ฐ๋…ธ๋“œ์˜ ์žฌ์ƒ์„ฑ

7.1 ๊ธฐ์กด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ๋ฆฌ์…‹

  • ๊ธฐ์กด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ๋ฆฌ์…‹ํ›„ ๋‹ค์‹œ joinํ•˜๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ...
    sudo kubeadm join 10.0.2.9:6443 \ --token [ํ† ํฐ๊ฐ’] \ --discovery-token-ca-cert-hash sha256:[ํ•ด์‹œ๊ฐ’] \ --control-plane \ ๋ฅผ ํ†ตํ•ด ์‹œ๋„ํ–ˆ์ง€๋งŒ

8. ๋ฆฌ์…‹

8.1 ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์…‹

#!/bin/bash
# Kubernetes Complete Reset Script for Masters & Workers

echo "------------------------------------------------"
echo "Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์™„์ „ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค..."
echo "------------------------------------------------"

# 1. ๊ธฐ๋ณธ ๋ฆฌ์…‹ ๋ฐ ์„œ๋น„์Šค ์ค‘๋‹จ
echo "[1/4] ์„œ๋น„์Šค ์ค‘๋‹จ ๋ฐ kubeadm reset ์‹คํ–‰ ์ค‘..."
sudo kubeadm reset -f
sudo systemctl stop kubelet
sudo systemctl stop haproxy || true
sudo systemctl stop keepalived || true

# 2. ์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์˜๊ตฌ ์‚ญ์ œ
echo "[2/4] ์„ค์ • ํŒŒ์ผ ๋ฐ etcd ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ค‘..."
sudo rm -rf /etc/kubernetes/
sudo rm -rf ~/.kube/
sudo rm -rf /var/lib/etcd
sudo rm -rf /etc/cni/net.d
sudo rm -rf /var/lib/kubelet/*
sudo rm -rf /var/log/pods/*
sudo rm -rf /var/log/containers/*

# 3. ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ iptables ์ดˆ๊ธฐํ™”
echo "[3/4] ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ iptables ๊ทœ์น™ ์ดˆ๊ธฐํ™” ์ค‘..."
sudo ip link delete cni0 2>/dev/null || true
sudo ip link delete flannel.1 2>/dev/null || true
sudo ip link delete calico-vpp-0 2>/dev/null || true
sudo ip link set tunl0 down 2>/dev/null || true
sudo ip link delete tunl0 2>/dev/null || true

sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
sudo ipvsadm --clear 2>/dev/null || true

# 4. ์ž”๋ฅ˜ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์†Œ์ผ“ ์ •๋ฆฌ
echo "[4/4] ์ฐŒ๊บผ๊ธฐ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ ์œ  ํฌํŠธ ๊ฐ•์ œ ์ •๋ฆฌ ์ค‘..."
if command -v crictl &> /dev/null; then
    sudo crictl ps -aq | xargs -r sudo crictl stop
    sudo crictl ps -aq | xargs -r sudo crictl rm
fi

# ํฌํŠธ ์ ์œ  ํ”„๋กœ์„ธ์Šค ๊ฐ•์ œ ์ข…๋ฃŒ (6443, 2379, 2380 ๋“ฑ)
sudo fuser -k 6443/tcp 2379/tcp 2380/tcp 10250/tcp 2>/dev/null || true

# ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์žฌ์‹œ์ž‘
sudo systemctl restart containerd

echo "------------------------------------------------"
echo "์ดˆ๊ธฐํ™” ์™„๋ฃŒ! ์ด์ œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."
echo "------------------------------------------------"
profile
์กฐ๊ธˆ์”ฉ ์•ž์œผ๋กœ

0๊ฐœ์˜ ๋Œ“๊ธ€