Linux

Установка Kubernetes на Linux: развёртывание кластера с нуля

В этом руководстве вы настроите рабочий кластер Kubernetes на базе Ubuntu или Debian с использованием kubeadm. Вы получите готовую к запуску среду для оркестрации контейнеров.

Обновлено 6 апреля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04 LTS / 24.04 LTSDebian 12Kubernetes v1.30+

Введение / Зачем это нужно

Kubernetes стал де-факто стандартом для оркестрации контейнеров в производственной среде. Развернув его на Linux, вы получаете масштабируемую платформу, которая автоматически управляет жизненным циклом ваших приложений, балансирует нагрузку и восстанавливает сервисы при сбоях. Этот гайд поможет вам собрать стабильный кластер с помощью официальных пакетов kubeadm, минуя устаревшие обёртки и сложные скрипты.

Требования / Подготовка

Перед началом убедитесь, что у вас есть как минимум один сервер или виртуальная машина. Минимальные ресурсы — 2 CPU и 2 ГБ ОЗУ. Вам потребуется доступ по SSH с правами sudo, стабильное интернет-соединение для загрузки пакетов и открытые порты 6443, 80, 443, 10250–10252. Если вы планируете масштабировать кластер, подготовьте дополнительные узлы с теми же параметрами.

Шаг 1: Подготовка системы и отключение подкачки

Kubernetes требует отключённого swap для корректного планирования ресурсов. Выполните команду:

sudo swapoff -a

Чтобы изменение сохранялось после перезагрузки, откройте /etc/fstab и закомментируйте строку, содержащую swap. Также убедитесь, что модули ядра для сетевых фильтров загружены:

sudo modprobe overlay
sudo modprobe br_netfilter

Примените параметры ядра для проброса трафика между интерфейсами:

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

Шаг 2: Установка и настройка Container Runtime

Для работы Kubernetes требуется среда выполнения контейнеров. Мы используем containerd как наиболее стабильный вариант, рекомендованный сообществом.

sudo apt update
sudo apt install -y containerd

Создайте конфигурационный файл по умолчанию:

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

Откройте файл /etc/containerd/config.toml, найдите секцию [plugins."io.containerd.grpc.v1.cri"] и установите SystemdCgroup = true. Без этого kubelet не сможет корректно управлять cgroup. Перезапустите и включите службу:

sudo systemctl restart containerd
sudo systemctl enable containerd

Шаг 3: Добавление репозитория и установка компонентов k8s

Установите утилиты для работы с HTTPS и добавьте официальный ключ Kubernetes:

sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo 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.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

Установите компоненты, зафиксировав версию, чтобы избежать автоматических обновлений, нарушающих работу кластера:

sudo apt update
sudo apt install -y kubelet=1.30.0-1.1 kubeadm=1.30.0-1.1 kubectl=1.30.0-1.1
sudo apt-mark hold kubelet kubeadm kubectl

kubeadm разворачивает кластер, kubelet управляет контейнерами на узле, а kubectl — ваш CLI-инструмент для общения с API-сервером.

Шаг 4: Инициализация управляющего узла

Запустите инициализацию. Параметр --pod-network-cidr задаёт подсеть для внутренних подов, она обязательна для большинства плагинов:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Дождитесь завершения. В терминале появится команда для копирования конфигурации администратора и строка kubeadm join для подключения дополнительных узлов. Сохраните их в безопасном месте. Настройте доступ для текущего пользователя:

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

Шаг 5: Подключение сетевого плагина и проверка работоспособности

Без CNI-плагина поды не получат IP-адреса. Установим Flannel, так как он не требует дополнительных настроек:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Подождите 1–2 минуты. Проверьте статус ядра:

kubectl get nodes

Все узлы должны перейти в состояние Ready.

Проверка результата

Разверните тестовый под, чтобы убедиться, что планировщик и сеть работают:

kubectl run nginx-test --image=nginx:latest

Проверьте статус и внутренний IP:

kubectl get pods -o wide

Если вы видите статус Running и назначенный адрес из подсети 10.244.x.x, кластер полностью готов к развёртыванию ваших сервисов. Удалите тестовый объект: kubectl delete pod nginx-test.

Возможные проблемы

  • Error: failed to run Kubelet: failed to create kubelet: failed to get container info for "/system.slice/kubelet.service": проверьте, что containerd запущен и параметр SystemdCgroup установлен в true.
  • Узел остаётся в статусе NotReady или NetworkUnavailable: убедитесь, что команда kubectl apply -f ... для CNI-плагина выполнилась успешно. Ошибка часто возникает при блокировке портов 8472 и 4789 фаерволом.
  • kubeadm init падает на этапе kubelet-start: проверьте, что swap действительно отключён, а версия containerd совместима с Kubernetes v1.30. Вывод journalctl -u kubelet -f покажет точную причину сбоя.

Часто задаваемые вопросы

Можно ли установить Kubernetes на домашний ПК?
Обязательно ли отключать подкачку (swap) для работы k8s?
Какой сетевой плагин (CNI) выбрать новичку?
Нужны ли права root для установки компонентов?

Полезное

Подготовка системы и отключение swap
Установка компонента Container Runtime
Установка kubeadm, kubelet и kubectl
Инициализация управляющего узла
Подключение сетевого плагина и проверка