Ниже два блока кода: первый — проверка 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 по этим инструкциям.
Схема установки
Что делает установка
| Этап | Действие |
|---|---|
| Подготовка | Проверка системы, отключение swap, overlay/br_netfilter, sysctl |
| Containerd | Установка и настройка для Kubernetes (SystemdCgroup) |
| Kubernetes | kubectl, 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.