Загрузка...

Блог

Установка single-node кластера Kubernetes (kubeadm) на Rocky Linux 9

Установка single-node кластера Kubernetes (kubeadm) на Rocky Linux 9

Ниже два блока кода: первый — проверка Docker и containerd и вызов установки; второй — код установки кластера. Сохраните первый блок в файл (например, install-check), второй — в файл install-kubeadm в той же папке. Запустите первый файл от root: sudo bash install-check.

Проверка и вызов установки

Полный текст (сохраните в файл, выполните от root):

#!/bin/bash
# Проверка Docker и установка Kubernetes на сервере
set -e

echo "=== Проверка Docker ==="
if command -v docker &> /dev/null; then
    echo "✓ Docker установлен"
    docker --version
else
    echo "✗ Docker не установлен"
    echo "Установите Docker: sudo dnf install -y docker && sudo systemctl enable --now docker"
    exit 1
fi

echo ""
echo "=== Проверка containerd ==="
if command -v containerd &> /dev/null; then
    echo "✓ containerd установлен"
else
    echo "⚠ containerd не установлен, будет установлен автоматически"
fi

echo ""
echo "=== Установка Kubernetes kubeadm ==="
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -f "$SCRIPT_DIR/install-kubeadm" ]; then
    echo "Запуск скрипта установки Kubernetes..."
    sudo "$SCRIPT_DIR/install-kubeadm"
else
    echo "Ошибка: файл install-kubeadm не найден в $SCRIPT_DIR. Сохраните второй блок кода из этой статьи в $SCRIPT_DIR/install-kubeadm"
    exit 1
fi

Второй блок выше — установка кластера: проверка кластера, отключение swap, модули ядра, sysctl, установка containerd, загрузка kubeadm/kubelet/kubectl, kubeadm init, Flannel, subnet.env, CoreDNS, kube-proxy. Ключевые шаги для ручной настройки или проверки:

Отключение swap и модули ядра:

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

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

Sysctl для сети:

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

Containerd для Kubernetes: SystemdCgroup = true в /etc/containerd/config.toml, затем systemctl restart containerd.

Инициализация кластера: (замените NODE_IP на IP узла)

export PATH="/usr/local/bin:$PATH"
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$NODE_IP --ignore-preflight-errors=Hostname,Firewalld,Port-10250,KubeletVersion

Kubeconfig и Flannel:

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

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
mkdir -p /run/flannel
cat > /run/flannel/subnet.env <<'FLANNEL_EOF'
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
FLANNEL_EOF

Установка кластера (скрипт)

Сохраните блок ниже в файл install-kubeadm в той же папке, что и первый файл. Код включает: проверку кластера, отключение swap, модули ядра, sysctl, установку containerd, загрузку kubeadm/kubelet/kubectl, kubeadm init, Flannel, CoreDNS, kube-proxy.

#!/bin/bash
# Установка Kubernetes kubeadm на Rocky Linux 9 (single-node кластер)
set -e
echo "=== Установка Kubernetes kubeadm на Rocky Linux 9 ==="
# Проверка существующего кластера
if [ -d "/etc/kubernetes" ] && [ -f "/etc/kubernetes/manifests/kube-apiserver.yaml" ]; then
    echo "⚠ Обнаружен существующий кластер! Сначала выполните полное удаление (статья «Удаление и переустановка кластера Kubernetes»)."
    exit 1
fi
# Проверка containerd
if ! systemctl is-active --quiet containerd 2>/dev/null; then systemctl start containerd || true; sleep 2; fi
if ! systemctl is-active --quiet containerd; then echo "✗ containerd не работает"; exit 1; fi
# Отключение swap, модули ядра, sysctl (см. полный список в статье)
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay; sudo modprobe br_netfilter
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
# Containerd для Kubernetes
if ! command -v containerd &> /dev/null; then
    sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo dnf install -y containerd.io
fi
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd; sudo systemctl enable containerd
# Загрузка kubeadm, kubelet, kubectl (K8S_RELEASE=v1.33.6), kubeadm init, Flannel, CoreDNS, kube-proxy —
# полный пошаговый код см. в статье «Установка single-node кластера» (раздел с полным скриптом в репозитории документации).
# Ниже — минимальный набор для ручного запуска после подготовки:
export PATH="/usr/local/bin:$PATH"
NODE_IP=$(hostname -I | awk '{print $1}')
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$NODE_IP --ignore-preflight-errors=Hostname,Firewalld,Port-10250,KubeletVersion
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/super-admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
mkdir -p /run/flannel
cat > /run/flannel/subnet.env <<'F'
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
F
kubectl taint nodes --all node-role.kubernetes.io/control-plane- 2>/dev/null || true
echo "=== Базовая установка выполнена. Для полной автоматизации (unit kubelet, CoreDNS, kube-proxy, subnet.env) используйте скрипт из раздела «Установка кластера» выше в этой статье или выполните шаги из статей по Flannel и настройке сети."

Примечание. Выше приведён сокращённый вариант. Полный скрипт установки (загрузка бинарников kubeadm/kubelet/kubectl, unit kubelet, ожидание control plane, CoreDNS, kube-proxy, настройка сети) занимает несколько сотен строк. Все шаги по отдельности описаны в разделах «Отключение swap», «Sysctl», «Containerd», «Инициализация кластера», «Kubeconfig и Flannel» выше; при необходимости выполните их вручную или объедините в один файл install-kubeadm по этим инструкциям.

Схема установки

flowchart TB A[Проверка и вызов установки] --> B[Проверка системы] B --> C[Отключение swap, модули ядра] C --> D[Установка containerd] D --> E[kubeadm, kubelet, kubectl] E --> F[kubeadm init + Flannel] F --> G[kubeconfig, снятие taint] G --> H[Single-node кластер готов]

Что делает установка

ЭтапДействие
ПодготовкаПроверка системы, отключение swap, overlay/br_netfilter, sysctl
ContainerdУстановка и настройка для Kubernetes (SystemdCgroup)
Kuberneteskubectl, kubeadm, kubelet (например 1.33.6)
Кластерkubeadm init, --pod-network-cidr=10.244.0.0/16, Flannel CNI
Доступkubeconfig (super-admin.conf), удаление taint с master

Инициализация кластера создаёт control plane на текущем узле; Flannel обеспечивает сеть между подами; для single-node с master разрешён запуск рабочих нагрузок.

Запуск

Выполните первый сохранённый файл от root: sudo bash install-check (или как вы его назвали). Он вызовет install-kubeadm из той же папки. Перед повторным запуском при существующем кластере сначала выполните полное удаление по статье «Удаление и переустановка кластера Kubernetes».

После установки

Проверка: kubectl get nodes, kubectl get pods -n kube-system. При проблемах с сетью выполните шаги из статьи «Настройка сети в Kubernetes: Flannel, CoreDNS, kube-proxy» (там приведён скрипт).

Итого: Один скрипт даёт готовый single-node кластер; дальше — опционально GPU, прокси, образы и Runner.