Skip to content

Instantly share code, notes, and snippets.

@Andygol
Last active December 12, 2025 09:03
Show Gist options
  • Select an option

  • Save Andygol/2944d08862d58e3c5a12becacd55b620 to your computer and use it in GitHub Desktop.

Select an option

Save Andygol/2944d08862d58e3c5a12becacd55b620 to your computer and use it in GitHub Desktop.
Розгортання кластера K8s за допомогою kubeadm

Розгортання кластера K8s за допомогою kubeadm

  1. Скрипт nodes-bootstrap.sh допоможе вам створити три віртуальні машини multipass з іменами k8s-control, k8s-worker-1 та k8s-worker-2 для подальшого розгортання кластера.

  2. Ініціалізуйте панель управління на вузлі k8s-control

    multipass shell k8s-control
    
    CONTROL_IP=$(hostname -I | awk '{print $1}')
    
    sudo kubeadm init \
       --pod-network-cidr=10.244.0.0/16 \
       --apiserver-advertise-address=$CONTROL_IP
  3. Налаштуйте kubectl на вузлі панелі управління

    mkdir -p ~/.kube
    sudo cp /etc/kubernetes/admin.conf ~/.kube/config
    sudo chown $(id -u):$(id -g) ~/.kube/config
  4. Встановіть Flannel на панелі управління (для створення мережі Pod)

    kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
  5. Виконайте приєднання робочих вузлів.

    for NODE in k8s-worker-1 k8s-worker-2; do
       multipass exec $NODE -- sudo kubeadm join 192.168.2.26:6443 \
         --token bsw6fd.e7624wl2688fybjx \
         --discovery-token-ca-cert-hash sha256:7850aa1c6181277e284a08b81256979db25698a89982f0885540376a5376e0bd
     done

Warning

У вашому випадку IP, токен та хеш будуть іншими! Використовуйте команду, яку ви отримали від kubeadm init.

  1. Увійдть знов до вузла панелі управління та перевірте підʼєднання робочих вузлів до кластера

    multipass shell k8s-control
    kubectl get nodes

    Ви повинні побачити три вузли зі статусом Ready:

    NAME            STATUS   ROLES           AGE   VERSION
    k8s-control     Ready    control-plane   5m    v1.34.0
    k8s-worker-1    Ready    <none>          2m    v1.34.0
    k8s-worker-2    Ready    <none>          2m    v1.34.0
    

    Якщо статус NotReady, почекайте хвилину — Flannel ще налаштовується ⏳

#!/usr/bin/env bash
# Список вузлів
NODES=(k8s-control k8s-worker-1 k8s-worker-2)
echo "=== Починаємо підготовку всіх вузлів Kubernetes ==="
###############################################################################
# 1. ОНОВЛЕННЯ СИСТЕМИ
###############################################################################
echo "=== [1/7] Оновлення системи на всіх вузлах ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- bash -c "
sudo apt-get update &&
sudo apt-get upgrade -y
"
done
###############################################################################
# 2. ВИМКНЕННЯ FIREWALL (спрощена конфігурація)
###############################################################################
echo "=== [2/7] Вимкнення firewall на всіх вузлах ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- sudo ufw disable
done
###############################################################################
# 3. ЗАВАНТАЖЕННЯ НЕОБХІДНИХ МОДУЛІВ ЯДРА
###############################################################################
echo "=== [3/7] Налаштування kernel-модулів ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- bash -c "
echo -e 'overlay\nbr_netfilter' | sudo tee /etc/modules-load.d/k8s.conf
sudo modprobe overlay
sudo modprobe br_netfilter
"
done
###############################################################################
# 4. НАЛАШТУВАННЯ мережевих параметрів
###############################################################################
echo "=== [4/7] Налаштування sysctl параметрів ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- bash -c "
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
sudo sysctl --system
"
done
###############################################################################
# 5. ВСТАНОВЛЕННЯ containerd
###############################################################################
echo "=== [5/7] Встановлення containerd ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- sudo apt-get install -y containerd
done
###############################################################################
# 6. НАЛАШТУВАННЯ containerd, SystemdCgroup та CRICTL
###############################################################################
echo "=== [6/7] Налаштування containerd і CRI ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- bash -c "
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# Оновлюємо sandbox image
sudo sed -i 's/registry.k8s.io\\/pause:3.8/registry.k8s.io\\/pause:3.10.1/' /etc/containerd/config.toml
# Увімкнення режиму cgroup через systemd
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# Додаємо конфіг для crictl
sudo tee /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
sudo systemctl restart containerd
sudo systemctl enable containerd
"
done
###############################################################################
# 7. ВСТАНОВЛЕННЯ kubeadm, kubelet, kubectl
###############################################################################
echo "=== [7/7] Встановлення Kubernetes компонентів ==="
for NODE in "${NODES[@]}"; do
multipass exec $NODE -- bash -c "
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' \
| sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable kubelet
"
done
###############################################################################
# 8. ПІДТВЕРДЖЕННЯ ГОТОВНОСТІ
###############################################################################
echo "=== Усі вузли підготовлено! ==="
echo "Можна переходити до ініціалізації control plane."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment