Kubernetes The Hard Way: Workers
Kubernetes THW: Workers #
Продолжаем Kubernetes The Hard Way: подключаем рабочие узлы.
В предыдущей статье мы собрали control plane вручную: выпустили сертификаты, подготовили конфигурации и запустили управляющие компоненты. API-сервер уже отвечает, но кластер пока остается без рабочих узлов.
Пока в кластере нет worker-нод, запускать прикладные поды просто негде. В этой статье добавим Worker-ноду и разберем весь путь от чистой VM до зарегистрированного узла в Kubernetes.
Формат тот же, что и в первой части: подготовим ОС, поставим containerd и kubelet, настроим подключение к
кластеру и проверим регистрацию узла. Покажу два варианта: ручной сценарий через bootstrap token и CSR API или
стандартный путь через kubeadm join.

1. Введение
Control Plane принимает решения: где запускать поды, как поддерживать желаемое состояние и что делать при сбоях. Но сами приложения живут на worker-нодах, то есть в data plane кластера.
Worker-нода обычно сводится к двум главным частям: kubelet и контейнерный рантайм, в нашем случае containerd. kubelet общается с API-сервером, получает спецификации подов и следит за тем, чтобы контейнеры действительно работали.
В отличие от мастер-нод, здесь нет etcd, kube-apiserver, kube-controller-manager и kube-scheduler. Нет и static pod-ов control plane. Приватный ключ CA на worker-ноду тоже не попадает.
Из-за этого сама машина настраивается проще, но появляется отдельный bootstrap-вопрос: как новой ноде войти в кластер, если у нее еще нет ни клиентского сертификата, ни доверия к API?
Эта статья продолжает Kubernetes The Hard Way. Перед началом убедитесь, что:
- Управляющий контур (CP) развернут и работает
- API-се рвер доступен по адресу
api.my-first-cluster.example.com:6443 - Настроена ролевая модель (RBAC) и загружены конфигурации в кластер
Главы:
2. Инфраструктура
Ниже минимальный набор параметров, с которым будем добавлять worker-ноду: имя, адрес, DNS и состав ПО. Этого достаточно, чтобы повторить шаги из статьи в своей среде.
Рабочие узлы
| Имя | IP-адрес | Операционная система | Ресурсы |
|---|---|---|---|
worker-1.my-first-cluster.example.com | NODE-IP-4 | ubuntu-24-04-lts | 2CPU / 4RAM / 40GB |
DNS-записи
| A-запись | IP-адрес | TTL |
|---|---|---|
worker-1.my-first-cluster.example.com | NODE-IP-4 | 60s |
Компоненты
На worker-ноде оставляем только то, что нужно для запуска рабочих нагрузок. Компоненты control plane и etcd здесь не нужны.
| Компонент | Версия | Назначение |
|---|---|---|
| containerd | 2.1.6 | Контейнерный рантайм, управляющий жизненным циклом контейнеров. |
| runc | v1.3.4 | Низкоуровневый инструмент для запуска контейнеров с использованием средств ядра Linux. |
| crictl | v1.33.0 | Утилита для отладки CRI-сред с поддержкой взаимодействия с containerd. |
| kubelet | v1.34.5 | Агент, запускаемый на каждом узле, обеспечивающий выполнение и контроль состояния подов. |
| kubectl | v1.34.5 | Клиент для взаимодействия с Kubernetes API (опционально). |
| kubeadm | v1.34.5 | Инструмент для автоматизации присоединения узла к кластеру (опционально). |
3. Базовая настройка узлов
Сначала приводим ОС в предсказуемое состояние: задаем переменные окружения, меняем hostname и ставим базовые утилиты. Шаг почти такой же, как на master-нодах, меняются только значения для worker-узла.
Сначала приводим worker-узел в предсказуемое состояние: задаем переменные окружения, меняем hostname и ставим базовые утилиты. Это короткий шаг, но дальше почти все команды будут опираться именно на эти значения.
Базовая настройка узлов
● Обязателен к применению
Базовая настройка узлов
● Обязателен к применению
Базовые настройки узлов
- Переменные окружения узла.
- Изменение имени узла.
- Установка зависимостей.
Переменные окружения узла
export HOST_NAME=worker-1
export CLUSTER_NAME="my-first-cluster"
export BASE_DOMAIN="example.com"
export CLUSTER_DOMAIN="cluster.local"
export FULL_HOST_NAME="${HOST_NAME}.${CLUSTER_NAME}.${BASE_DOMAIN}"
Изменение имени узла
hostnamectl set-hostname ${FULL_HOST_NAME}
Установка зависимостей
- apt
- yum
- dnf
sudo apt update
sudo apt install -y conntrack socat jq tree
sudo yum update
sudo yum install -y conntrack-tools socat jq tree
sudo dnf update
sudo dnf install -y conntrack-tools socat jq tree
4. Загрузка модулей ядра
Загружаем модули ядра, которые нужны containerd и сетевой части Kubernetes. Набор тот же, что и на master-нодах.
Этот раздел посвящен загрузке модулей ядра, необходимых для корректной работы Kubernetes. Настройка включает конфигурацию modprobe и активацию модулей overlay и br_netfilter, обеспечивающих поддержку контейнерной файловой системы и сетевых функций. Эти действия обязательны для функционирования сетевых политик, iptables и контейнерных рантаймов.
Загрузка модулей ядра
● Обязателен к применению
Загрузка модулей ядра
● Обязателен к применению
Этапы установки компонента:
- Конфигурация modprobe.
- Загрузка модулей.
- Bash
- Cloud-init
Модуль overlay используется файловой системой OverlayFS для управления слоями контейнеров. Он позволяет объединять несколько директорий в единую виртуальную файловую систему. Применяется такими рантаймами, как Docker и containerd.
Модуль br_netfilter обеспечивает обработку трафика сетевых мостов через подсистему netfilter. Это необходимо для корректной работы iptables в Kubernetes.
5. Настройка параметров sysctl
Дальше настраиваем sysctl: включаем IP forwarding и параметры для bridge-трафика. Значения здесь тоже совпадают с
control plane.
Этот раздел посвящен настройке параметров ядра с помощью sysctl, необходимых для сетевой работы Kubernetes. Вносятся изменения, обеспечиваю щие маршрутизацию трафика между подами и корректную работу iptables для мостов. Эти параметры обязательны для включения пересылки IP-пакетов и фильтрации сетевых потоков в кластере.
Настройка параметров sysctl
● Обязателен к применению
Настройка параметров sysctl
● Обязателен к применению
Этапы установки компонента:
- Конфигурация sysctl.
- Применение конфигурации.
Сетевые параметры
Для корректной маршрутизации и фильтрации трафика необходимо задать параметры ядра.
- Bash
- Cloud-init
Если параметр net.ipv4.ip_forward не активирован, система не будет пересылать IP-пакеты между интерфейсами. Это может привести к сетевым сбоям внутри кластера, недоступности сервисов и потере связи между подами.
- Bash
- Cloud-init
Конфигурация sysctl
cat <<EOF > /etc/sysctl.d/99-network.conf
net.ipv4.ip_forward=1
EOF
sysctl --system