Setup Kubernetes Cluster Using Kubeadm

From wiki.baghirzade.pro
Revision as of 07:21, 19 November 2025 by Sadmin (talk | contribs) (Created page with "== Kubeadm Setup Prerequisites == Following are the prerequisites for '''Kubeadm Kubernetes cluster setup'''. # Minimum two '''Ubuntu nodes''' [One master and one worker node]. You can have more worker nodes as per your requirement. # The master node should have a minimum of '''2 vCPU and 2GB RAM'''. # For the worker nodes, a minimum of 1vCPU and 2 GB RAM is recommended. # '''10.X.X.X/X''' network range with static IPs for master and worker nodes. We will be using the '...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Kubeadm Setup Prerequisites

Following are the prerequisites for Kubeadm Kubernetes cluster setup.

  1. Minimum two Ubuntu nodes [One master and one worker node]. You can have more worker nodes as per your requirement.
  2. The master node should have a minimum of 2 vCPU and 2GB RAM.
  3. For the worker nodes, a minimum of 1vCPU and 2 GB RAM is recommended.
  4. 10.X.X.X/X network range with static IPs for master and worker nodes. We will be using the 192.x.x.x series as the pod network range that will be used by the Calico network plugin. Make sure the Node IP range and pod IP range don't overlap.

На cp1:

sudo hostnamectl set-hostname cp1

На worker1:

sudo hostnamectl set-hostname w1

На worker2:

sudo hostnamectl set-hostname w2

На всех нодах добавь записи в /etc/hosts:

sudo nano /etc/hosts

В конец файла допиши, подставив свои IP:

10.0.0.10 cp1 10.0.0.11 w1 10.0.0.12 w2

Это позволяет нодам обращаться друг к другу по имени, а не по IP.

1. Общая подготовка системы (все ноды)

1.1. Обновляем пакеты

sudo apt update
sudo apt upgrade -y

Просто приводим систему в свежий вид, чтобы избежать багов из-за старых пакетов.

1.2. Отключаем swap (обязательно для kubeadm)

На всех нодах:

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Проверка:

free -h

1.3. Модули ядра и sysctl (для сетки) На каждой ноде:

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

Теперь sysctl:

cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF

sudo sysctl --system

Это включает корректную обработку трафика через Linux bridge и форвардинг — обязательно для CNI (Calico).

1.4. (Для лаба) Отключить UFW

Если UFW включён и это чистый лаб:

sudo ufw disable

В проде, конечно, лучше открыть нужные порты, но для первой сборки проще без firewall.

2. Устанавливаем containerd (все ноды)

На каждой ноде:

sudo apt install -y containerd

Генерируем дефолтный конфиг:

sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null

Рестарт и включение:

sudo systemctl restart containerd sudo systemctl enable containerd sudo systemctl status containerd

SystemdCgroup = true → kubelet и containerd используют один и тот же cgroup-драйвер (systemd). Это теперь “best practice”.

3. Устанавливаем kubeadm/kubelet/kubectl 1.34 (все ноды)

По официальным докам для v1.34:

3.1. Пакеты для репо

На каждой ноде:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

3.2. GPG-ключ и репозиторий pkgs.k8s.io (v1.34) Ubuntu 22.04 уже имеет /etc/apt/keyrings, но если вдруг нет:

sudo mkdir -p -m 755 /etc/apt/keyrings

Ключ репозитория:

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key \

 | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Добавляем репо именно для Kubernetes 1.34:

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

3.3. Установка kubeadm/kubelet/kubectl

sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl

Репозиторий v1.34 гарантирует, что ставится именно ветка 1.34.x. apt-mark hold не даст случайно обновиться до другой минорной версии при apt upgrade

(Не обязательно, но можно сразу включить kubelet, он будет крутиться и ждать kubeadm init / join):

sudo systemctl enable --now kubelet

4. Подготовка имён хостов и hosts (все ноды)

4.1. hostname

На cp1:

sudo hostnamectl set-hostname cp1

На worker1:

<pre