๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์˜จํ”„๋ ˆ๋ฏธ์Šค ์šฐ๋ถ„ํˆฌ๋ฅผ ํ™œ์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์„ฑ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2025. 12. 18.

์˜จํ”„๋ ˆ๋ฏธ์Šค ์šฐ๋ถ„ํˆฌ๋ฅผ ํ™œ์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์„ฑ

1. VM ์ƒ์„ฑ

๋งํฌ : console.cloud.google.com

 

  • ์Šคํƒ ๋‹ค๋“œ ๋ชจ๋“œ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑ
  • master ํ•˜๋‚˜ worker ๋‘๊ฐœ

์‹œ์Šคํ…œ ๊ตฌ์„ฑ์€ ๋ชจ๋“  VM ์•„๋ž˜์™€ ๊ฐ™์Œ (*์ด๋ฆ„๋งŒ ๋‹ค๋ฆ„)

 

 


2. ๋…ธ๋“œ ์ค€๋น„

์‹œ์ž‘ ์ „ ์กฐ๊ฑด

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

How do I disable swap?

I have some sensitive data in RAM that I prefer not to be on disk. How do I disable swap? I have more than enough RAM. If RAM consumption gets too high I have no problems with processes being term...

askubuntu.com

sudo swapoff -a # ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์ ์šฉ(๋ฆฌ๋ถ€ํŒ…ํ•˜๋ฉด ์žฌ์„ค์ • ํ•„์š”)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # ๋ฆฌ๋ถ€ํŒ… ํ•„์ˆ˜

 

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

๋ชจ๋“  ๋…ธ๋“œ์— ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-containerd-on-ubuntu-22-04.html

 

How to Install Containerd on Ubuntu 22.04 / Ubuntu 20.04 | ITzGeek

containerd is an industry-standard container runtime that manages the complete container lifecycle of its host system. It handles image

www.itzgeek.com

# Using Docker Repository
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) 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

# containerd ์„ค์น˜
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd # Ctrl + C๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๋‚˜๊ฐ„๋‹ค.

# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF

sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd

# ์†Œ์ผ“์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
ls /var/run/containerd/containerd.sock

 

kubeadm, kubelet ๋ฐ kubectl ์„ค์น˜

๋ชจ๋“  ๋จธ์‹ ์— ๋‹ค์Œ ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  • kubeadm : ํด๋Ÿฌ์ŠคํŠธ๋ฅผ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•˜๋Š” ๋ช…๋ น์ด๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š”๋‹ค.
  • kubelet : ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” ํŒŒ๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ๋ฐ๋ชฌ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • kubectl : ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์ปค๋งจ๋“œ ๋ผ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ „์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

cat <<EOF > kube_install.sh
# 1. apt ํŒจํ‚ค์ง€ ์ƒ‰์ธ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค apt ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 2. ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ์˜ ๊ณต๊ฐœ ์‚ฌ์ด๋‹ ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•œ๋‹ค.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

# 3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค apt ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 4. apt ํŒจํ‚ค์ง€ ์ƒ‰์ธ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , kubelet, kubeadm, kubectl์„ ์„ค์น˜ํ•˜๊ณ  ํ•ด๋‹น ๋ฒ„์ „์„ ๊ณ ์ •ํ•œ๋‹ค.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
EOF

sudo bash kube_install.sh

 

kubeadm ๋ฒ„์ „์„ ํ™•์ธ

kubeadm version

 

๋„ทํ•„ํ„ฐ ๋ธŒ๋ฆฟ์ง€ ์„ค์ •

๋ชจ๋“  ๋…ธ๋“œ์— ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ๋„ทํ•„ํ„ฐ ๋ธŒ๋ฆฟ์ง€ ์„ค์ •

sudo -i
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
exit
  • sudo -i  ๋”ฐ๋กœ ๋‚ด์šฉ ๋”ฐ๋กœ exit ๋”ฐ๋กœ ์‹คํ–‰ํ•  ๊ฒƒ

3. ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๋Š” ๊ฐ ๋…ธ๋“œ์—์„œ ์ž‘์—…ํ•˜๋Š” ๋‚ด์šฉ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜๊ฐ€ ํ•„์š”

 

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์ดˆ๊ธฐํ™”

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ init ์ž‘์—…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sudo kubeadm init

 

์ดํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด init์— ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ด๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Your Kubernetes control-plane has initialized successfully!

# 1) ์œ ์ € ์„ค์ •
To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

# 2) ํŒŒ๋“œ ๋„คํŠธ์›Œํฌ ์„ค์ •
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

# 3) ์›Œ์ปค ๋…ธ๋“œ ์กฐ์ธ ๋ฐฉ๋ฒ•
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.142.0.3:6443 --token xcs79e.vnernooln6yyimtv \
        --discovery-token-ca-cert-hash sha256:c9f8642746515eadc28e72c~

 

์œ ์ € ์„ค์ •

๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด .kube/config ํŒŒ์ผ์ด ์„ค์ •๋˜๋ฉด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. "๋งˆ์Šคํ„ฐ ๋…ธ๋“œ"์—์„œ๋งŒ ์ง„ํ–‰

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

 

์ธ์ฆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด ๋…ธ๋“œ ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

$ kubectl get nodes
NAME       STATUS     ROLES           AGE   VERSION
master-1   NotReady   control-plane   5m    v1.26.0

 

 

์›Œ์ปค ๋…ธ๋“œ ์กฐ์ธ

๋ณธ์ธ์˜ ์ฝ˜์†”์— ์ถœ๋ ฅ๋œ ํ† ํฐ๊ณผ hash ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์€ "์›Œ์ปค ๋…ธ๋“œ"์—์„œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sudo kubeadm join 10.142.0.3:6443 --token xcs79e.vnernooln6yyimtv \
        --discovery-token-ca-cert-hash sha256:c9f8642746515eadc28e72c687eface2~

 

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ๋…ธ๋“œ ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

$ kubectl get nodes
NAME       STATUS     ROLES           AGE     VERSION
master-1   NotReady   control-plane   7m55s   v1.26.0
worker-1   NotReady   <none>          14s     v1.26.0
worker-2   NotReady   <none>          23s     v1.26.0

 

*init์ด๋‚˜ join์„ ์ž˜๋ชป ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ

sudo kubeadm reset

 

*token ์žฌ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๋ฐฉ๋ฒ• (๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ)

ํ† ํฐ ๋ฆฌ์ŠคํŠธ ํ™•์ธํ•˜๊ธฐ : sudo kubeadm token list
ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ํ•˜๊ธฐ : sudo kubeadm token create --print-join-command

 

ํŒŒ๋“œ ๋„คํŠธ์›Œํฌ ๋ฐฐํฌ

"๋งˆ์Šคํ„ฐ ๋…ธ๋“œ"์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์•ž์„œ ๊ตฌ์„ฑํ•œ ์œ ์ € ์„ค์ •์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— cilium์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

cilium ์„ค์น˜

curl -L --fail -o cilium-linux-amd64.tar.gz \
  https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz

sudo tar -xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin
rm -f cilium-linux-amd64.tar.gz

cilium version

 

cilium ์„ค์น˜ ์ „ "ํด๋Ÿฌ์Šคํ„ฐ ์ค€๋น„ ์ƒํƒœ" ํ™•์ธ

kubectl get nodes
kubectl get pods -A

 

์„ค์น˜

cilium install
cilium status --wait

 

 

kubectl get nodes -> ready ๋กœ ํ™•์ธ

 

 

 

๋Œ“๊ธ€