Блог-шпаргалка

Картинка

Кластер k8s

Категория -> linux
Обновлено: 2026-05-13

Предлагаю не душнить с описанием того, что такое kubernetes. Раз ты сюда пришёл, значит уже знаешь что это и скорее всего docker'a тебе стало мало

Данное пособие ни в коем случае не претендует на 100% мануал howto. Данное пособие, как и все статьи на этом сайте - это шпаргалка "как делал я и у меня это получилось"

Поехали.

Для организации не просто minikube, а реального кластера k8s и возможной реализации его в боевых условиях, были использованы виртуальные машины, обладающие следующими характеристиками:
CPU - 2 Core
RAM - 4 Gb
HDD - 20 Gb
NET - 10.0.0.0/24

Хостнеймы:
k8s-master
k8s-wn01, k8s-wn02, k8s-wn03

Перед выполнением работ необходимо отключить swap в /etc/fstab

Все действия выполняются от привилегированного пользователя root

Следующую последовательность необходимо выполнить на всех нодах

cat <<EOF | tee /etc/hosts
127.0.0.1 localhost
10.0.0.10 k8s-master
10.0.0.11 k8s-wn01
10.0.0.12 k8s-wn02
10.0.0.13 k8s-wn03
EOF

Добавляем необходимые модули ядра в автозапуск

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

И загружаем их

modprobe overlay
modprobe br_netfilter

Подправим возможность контроля обработки трафика через bridge в netfilter

сat <<EOF | 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 --system

Установим среду выполнения контейнеров

apt update
apt install -y containerd

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

mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml

Для стабильной работы движка необходимо включить SystemdCgroup. Давайте выебнемся и сделаем это sed’ом 😎

sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

Опосля внесённых изменений рестартанём и добавим в автозапуск контейнерный движок

systemctl restart containerd
systemctl enable containerd

Теперь устанавливаем kubernetes и компоненты, предварительно выяснив актуальную версию

apt install -y apt-transport-https ca-certificates curl gpg

Добавим ключ цифровой подписи

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.36/deb/Release.key | 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.36/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list

Обновляем кэш пакетов

apt update

ну и ставим заветное

apt install -y kubelet kubeadm kubectl

Для понимания
kubelet - сервис, контролирующий работу подов
kubeadm - управление кластером kubernetes
kubectl - утилита для ввода команд

Установка завершена! Для просмотра версии скомандуем

kubectl version --client --output=yaml

Инициализация кластера

Следующую последовательность необходимо выполнить только на мастере

kubeadm init --pod-network-cidr=10.244.0.0/27

Я взял 27 маску сети, которая вмещает в себя 29 реальных хостов. Не думаю, что в моей жизни продакшн кубов будет больше. Вы же исходите из своих хотелок

На какое-то время покажется, что сервер подвис. Надо будет подождать, пока не побегут букафффки и в конце появится Your Kubernetes control-plane has initialized successfully!