Подготовка серверов

На этом этапе Kubernetes ещё не создаётся. Сначала подготавливаются все серверы: задаются параметры стенда, устанавливаются системные пакеты, среда запуска контейнеров и компоненты Kubernetes. После завершения этапа серверы должны быть готовы к созданию кластера.

На этой странице

1.1. Параметры стенда

Перед началом развёртывания задайте имена и адреса серверов, а также свободный внешний IP-адрес для стенда.

CONTROL_PLANE_NODE="<control-plane-hostname>"
CONTROL_PLANE_IP="<control-plane-ip>"
DB_NODE="<db-worker-hostname>"
GPU_NODE="<gpu-worker-hostname>"
METALLB_IP="<free-loadbalancer-ip>"

Значения в угловых скобках <...> являются параметрами стенда и перед выполнением команд должны быть заменены на актуальные значения.

1.2. Схема стенда и назначение серверов

В стенде используются три роли: управляющий узел Kubernetes, узел инфраструктурных сервисов и узел с GPU. Дальнейшие команды явно указывают, где они должны выполняться.

Управляющий узел Kubernetes

containerd.io
kubelet
kubeadm
kubectl
cri-tools
helm

Рабочие узлы

containerd.io
kubelet
kubeadm
cri-tools

kubectl и Helm на рабочих узлах не требуются.

1.3. Версии программного обеспечения

Используйте указанные версии компонентов. Это уменьшает риск несовместимости между Kubernetes, сетевыми компонентами, GPU Operator и прикладными сервисами.

Версии компонентов и приложений

КомпонентВерсия
Ubuntu24.04 LTS
containerd.io1.7.29
Kubernetes1.35.6
cri-tools / crictl1.35.0
Helm CLI3.21.3
Kubernetes pause image3.10.1
ingress-nginx controllerv1.12.1
NVIDIA GPU Driver580.126.09
PostgreSQL16
Redis8.8.0-alpine
RabbitMQ Cluster Operator2.21.1
RabbitMQ Messaging Topology Operator1.19.3
RabbitMQ4.2.6-management
Qdrantv1.19.0
MinIORELEASE.2025-07-23T15-54-02Z
Docling Serve (опциональный компонент)1.20.0
vLLMv0.25.1

Версии Helm-пакетов

КомпонентВерсия
cilium/cilium1.16.5
metallb/metallb0.14.9
ingress-nginx/ingress-nginx4.12.1
nvidia/gpu-operatorv25.10.1
cert-managerv1.20.3
qdrant/qdrant1.19.0
vllm/vllm-stack0.1.12

Пакетные версии:

containerd.io = 1.7.29-1~ubuntu.24.04~noble
kubeadm       = 1.35.6-1.1
kubelet       = 1.35.6-1.1
kubectl       = 1.35.6-1.1
cri-tools     = 1.35.0-1.1

1.4. Установка базовых пакетов

На всех серверах устанавливаются системные утилиты, которые используются на следующих этапах для загрузки пакетов, диагностики сети и работы с конфигурацией.

На всех узлах:

apt update

apt install -y \
  gpg \
  curl \
  wget \
  dnsutils \
  vim \
  telnet \
  unzip \
  bash-completion \
  ca-certificates \
  jq \
  conntrack \
  socat

1.5. Установка и настройка containerd

containerd используется Kubernetes для запуска контейнеров. Сначала подключается репозиторий и устанавливается пакет, затем создаётся итоговая конфигурация среды выполнения.

Установка containerd

На всех узлах:

install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

chmod a+r /etc/apt/keyrings/docker.asc

cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

apt update

Установка:

CONTAINERD_VERSION="1.7.29-1~ubuntu.24.04~noble"

apt install -y containerd.io="${CONTAINERD_VERSION}"
apt-mark hold containerd.io

Настройка containerd

На всех узлах сразу создаётся итоговый конфиг:

containerd config default \
  | sed \
    -e 's/SystemdCgroup = false/SystemdCgroup = true/g' \
    -e 's#sandbox_image = ".*"#sandbox_image = "registry.k8s.io/pause:3.10.1"#g' \
  > /etc/containerd/config.toml

Проверка:

grep -E 'sandbox_image|SystemdCgroup|^disabled_plugins' \
  /etc/containerd/config.toml

Ожидается:

disabled_plugins = []
sandbox_image = "registry.k8s.io/pause:3.10.1"
SystemdCgroup = true

systemctl enable containerd
systemctl restart containerd

1.6. Настройка операционной системы для Kubernetes

Загружаются необходимые модули ядра и применяются системные параметры сети и файловой системы, требуемые для работы Kubernetes и контейнерной сети.

На всех узлах:

cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288
EOF

cat > /etc/sysctl.d/70-disable-ipv6.conf <<EOF
net.ipv6.conf.all.disable_ipv6 = 1
EOF

sysctl --system

1.7. Установка компонентов Kubernetes

На всех серверах подключается репозиторий Kubernetes. На управляющем узле устанавливаются административные утилиты, на рабочие узлы — компоненты, необходимые для подключения к кластеру.

Подключение репозитория Kubernetes

На всех узлах:

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

curl -fsSL \
  https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key \
  | gpg --dearmor \
  -o /usr/share/keyrings/kubernetes-apt-keyring.gpg

echo \
  "deb [signed-by=/usr/share/keyrings/kubernetes-apt-keyring.gpg]
  https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /" \
  > /etc/apt/sources.list.d/kubernetes.list

apt update

Установка пакетов Kubernetes

Управляющий узел

K8S_VERSION="1.35.6-1.1"

apt install -y \
  kubelet="${K8S_VERSION}" \
  kubeadm="${K8S_VERSION}" \
  kubectl="${K8S_VERSION}"

apt-mark hold kubelet kubeadm kubectl

Инфраструктурный и рабочий узлы

K8S_VERSION="1.35.6-1.1"

apt install -y \
  kubelet="${K8S_VERSION}" \
  kubeadm="${K8S_VERSION}"

apt-mark hold kubelet kubeadm

1.8. Установка и настройка crictl

crictl используется для диагностики среды выполнения контейнеров. После установки ему задаётся сокет containerd.

Установка crictl

На всех узлах:

apt install -y cri-tools=1.35.0-1.1
apt-mark hold cri-tools

Настройка crictl

На всех узлах:

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: true
EOF

Проверка:

crictl info

До CNI ожидаемо:

RuntimeReady = true
NetworkReady = false

1.9. Установка Helm и автодополнения команд

Helm используется на управляющем узле для установки компонентов Kubernetes и приложения. Дополнительно включается автодополнение команд оболочки.

Установка Helm

Только на управляющем узле Kubernetes:

HELM_VERSION="v3.21.3"

wget "https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz"
tar -xf "helm-${HELM_VERSION}-linux-amd64.tar.gz" linux-amd64/helm
mv linux-amd64/helm /usr/local/bin/helm
rm -rf "helm-${HELM_VERSION}-linux-amd64.tar.gz" linux-amd64

Автодополнение команд

Управляющий узел

mkdir -p /etc/bash_completion.d/

kubectl completion bash > /etc/bash_completion.d/kubectl
crictl completion bash > /etc/bash_completion.d/crictl
helm completion bash > /etc/bash_completion.d/helm

Инфраструктурный / рабочий узлы

mkdir -p /etc/bash_completion.d/
crictl completion bash > /etc/bash_completion.d/crictl

Проверка подготовки серверов

Перед созданием кластера проверьте, что версии ключевых пакетов зафиксированы и не будут автоматически обновлены системой.

Управляющий узел

apt-mark showhold

Ожидается:

containerd.io
cri-tools
kubeadm
kubectl
kubelet

Инфраструктурный / рабочий узлы

apt-mark showhold

Ожидается:

containerd.io
cri-tools
kubeadm
kubelet