3.9.16.3.2 Установка kubernetes с использованием контейнерного движка containerd
Входные данные
Развертывание управляющего узла (control plane)
Предварительная настройка
Настройка DNS
Установка Kubernetes
Настройка управляющего узла
Присоединение рабочей ноды к кластеру
Настройка сети в кластере
Развертывание рабочих нод (nodes)
Предварительная настройка
Настройка DNS
Установка Kubernetes
Присоединение рабочей ноды к кластеру
Дополнительная настройка рабочей ноды
Проверка работы
Окружение
- Версия ОС: 8
- Конфигурация ОС: Сервер графический, Сервер минимальный
- Редакция ОС: Стандартная
- Версия ПО: kubernetes1.36-1.36.2-1, kubernetes1.36-kubeadm-1.36.2-1
Для дальнейшей настройки необходимо перейти в сеанс пользователя root:
su -
Далее команды будут выполняться с правами пользователя root, если не указано иное.
Входные данные
В рамках текущей инструкции будут использоваться следующие данные:
-
для управляющего узла (control-plane):
-
IP-адрес —
192.168.122.77; -
имя узла —
control-plane. -
для рабочей ноды (node):
-
IP-адрес —
192.168.122.225; -
имя узла —
work-node.
Развертывание управляющего узла (control plane)
Предварительная настройка
В качестве предварительной настройки управляющего узла необходимо выполнить следующий алгоритм действий:
-
Для работы kubelet отключите swap:
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
-
Задайте имя хоста, например:
hostnamectl set-hostname control-plane
Для проверки изменений выполните:
hostname && hostname -I control-plane 192.168.122.77
-
Создайте файл для автозагрузки модулей ядра, необходимых для работы сервиса containerd:
nano /etc/modules-load.d/containerd.conf
со следующим содержимым:
overlay
br_netfilter
-
Загрузите модули в ядро:
modprobe overlay modprobe br_netfilter
Проверьте, что модули загружены:
lsmod | grep -E "br_netfilter|overlay"
Вывод команды должен иметь примерно следующий вид:
br_netfilter 32768 0 bridge 434176 1 br_netfilter overlay 204800 18
-
Создайте конфигурационный файл для работы сети внутри kubernetes:
nano /etc/sysctl.d/99-kubernetes-cri.conf
со следующим содержимым:
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
-
Примените параметры командой:
sysctl --system
Настройка DNS
В зависимости от предпочтений можно либо отключить использование stub-resolv в systemd-resolved, либо указать необходимые адреса DNS непосредственно в configmap.
Отключение stub-resolv в systemd-resolved
Для отключения stub-resolv в systemd-resolved необходимо выполнить команду:
sed -i 's|#DNSStubListener=yes|DNSStubListener=no|g' /etc/systemd/resolved.conf
После чего необходимо применить внесенные изменения:
systemctl daemon-reload systemctl restart systemd-resolved.service
Использование других адресов для службы DNS в кластере kubernetes
В случае необходимости использования других адресов DNS для кластера Kubernetes и/или работающих в нём контейнеров, выполните следующую команду в инициированном кластере kubernetes:
kubectl edit configmap coredns -n kube-system
Внесите изменения в следующие строки:
forward . /<путь_к_файлу>/<имя_файла> или <IP-адрес_DNS> {
max_concurrent 1000
}
где:
-
<путь_к_файлу>/<имя_файла>– указывается при использовании файла, подобного /etc/resolv.conf; -
<IP-адрес_DNS>– указывается при использовании одного или нескольких IP-адресов DNS.
Подробнее о настройке CoreDNS см. в официальной документации проекта.
При выполнении команды kubectl edit configmap coredns -n kube-system, файл конфигурации откроется редактором, определённым переменной $EDITOR.
Установка Kubernetes
Установите необходимые пакеты:
dnf install kubernetes kubernetes-kubeadm containerd iproute-tc
Примените правило iptables для перенаправления сетевых портов:
iptables -P FORWARD ACCEPT
Установите настройки по умолчанию для конфигурации контейнера:
containerd config default | tee /etc/containerd/config.toml
Измените стандартное расположение сетевых плагинов:
sed -i 's|bin_dir = "/opt/cni/bin"|bin_dir = "/usr/libexec/cni"|g' /etc/containerd/config.toml
Разрешите использование драйвера SystemdCgroup для containerd:
sed -i 's|SystemdCgroup = false|SystemdCgroup = true|g' /etc/containerd/config.toml
Перезапустите конфигурации служб и добавьте в автозагрузку службы containerd и kubelet:
systemctl daemon-reload systemctl restart containerd systemctl enable --now containerd systemctl enable kubelet.service
Настройка управляющего узла
Запустите инициализацию кластера kubernetes. Команда выполнит начальную настройку и подготовку управляющего узла кластера:
kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=$(kubeadm version -o=short)
где:
-
ключ
--pod-network-cidrзадает адрес внутренней подсети для кластера; -
ключ
--kubernetes-versionзадает версию kubernetes.
Для вывода версии kubernetes выполните команду:
kubeadm version -o=short
v1.36.2
Для вывода подробной информации об используемой версии kubernetes выполните команду:
kubeadm version -o=yaml clientVersion: buildDate: "2026-06-16T00:00:00Z" compiler: gc gitCommit: 24e2b02af5543d7910c2bb074c7264df5a8f0467 gitTreeState: archive gitVersion: v1.36.2 goVersion: go1.26.4-X:nodwarf5 major: "1" minor: "36" platform: linux/amd64
В случае успешной инициализации, в конце вывода команды будет отображаться примерно следующее:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.122.77:6443 --token cdrf7z.98a1temo7yc1bluj \
--discovery-token-ca-cert-hash sha256:daa72a370ca5b174f7faa161b7cb0125133f1b6322753c28e26ad294fb97ea2d
Настройте параметры управления кластером. Настройку можно выполнить как для непривилегированного пользователя, так и для суперпользователя root.
Для управления кластером от имени непривилегированного пользователя выполните команды:
mkdir /home/$USER/.kube cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config chown $USER: /home/$USER/.kube /home/$USER/.kube/config
Для управления кластером от имени суперпользователя root выполните команды:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc source /root/.bashrc export KUBECONFIG=/etc/kubernetes/admin.conf
Если настройка производилась для непривилегированного пользователя, выйдите из сеанса пользователя root командой exit и дальнейшие действия по настройке кластера выполняйте от имени непривилегированного пользователя.
Присоединение рабочей ноды к кластеру
После успешной инициализации кластера kubernetes к управляющему узлу (control plane) необходимо присоединить рабочие ноды (nodes). Подробную информацию по настройке рабочих нод (nodes) см. в п. «Развертывание рабочих нод (nodes)».
Для вывода команды присоединения рабочих нод на управляющем узле выполните:
kubeadm token create --print-join-command
kubeadm join 192.168.122.77:6443 --token avepsn.8v4p2u1zf0y4mh8c --discovery-token-ca-cert-hash sha256:daa72a370ca5b174f7faa161b7cb0125133f1b6322753c28e26ad294fb97ea2d
Полученную команду необходимо выполнить на каждом присоединяемой рабочей (nodes) ноде:
kubeadm join 192.168.122.77:6443 --token cdrf7z.98a1temo7yc1bluj --discovery-token-ca-cert-hash sha256:daa72a370ca5b174f7faa161b7cb0125133f1b6322753c28e26ad294fb97ea2d
[preflight] Running pre-flight checks
[WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet
[WARNING Hostname]: hostname "work-node" could not be reached
[WARNING Hostname]: hostname "work-node": lookup work-node on 192.168.122.1:53: no such host
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Обратите внимание, что на каждой присоединяемой рабочей ноде необходимо выполнить дополнительную настройку.
Настройка сети в кластере
После присоединения к кластеру рабочих нод для обеспечения взаимодействия узлов внутри кластера необходимо настроить внутреннюю конфигурацию сети flannel.
Для этого на управляющем узле выполните команду:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Выполнение команды займет некоторое время.
Для корректного функционирования кластера также необходимо создать символьную ссылку на плагин flannel:
ln -s /opt/cni/bin/flannel /usr/libexec/cni/flannel
После этого проверить работоспособность кластера можно следующей командой (достаточно нескольких минут наблюдения):
watch -n 1 kubectl get pods -A
Вывод команды должен выглядеть примерно следующим образом:
NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-7mqff 1/1 Running 0 16m kube-flannel kube-flannel-ds-stzdr 1/1 Running 0 21m kube-system coredns-589f44dc88-9b7th 1/1 Running 0 28m kube-system coredns-589f44dc88-d27lh 1/1 Running 0 28m kube-system etcd-control-plane 1/1 Running 0 16m kube-system kube-apiserver-control-plane 1/1 Running 0 16m kube-system kube-controller-manager-control-plane 1/1 Running 0 16m kube-system kube-proxy-6krcp 1/1 Running 0 28m kube-system kube-proxy-np4jm 1/1 Running 0 16m kube-system kube-scheduler-control-plane 1/1 Running 0 16m
В выводе команды не должно быть перезапусков контейнеров – это значит, что столбец RESTARTS должен иметь не более 1 перезагрузки на контейнер.
Просмотреть список подключенных к кластеру нод и их статус можно командой:
kubectl get nodes NAME STATUS ROLES AGE VERSION control-plane Ready control-plane 13m v1.36.2 work-node Ready <none> 61s v1.36.2
Для проверки корректности настройки и подключения нод рекомендуется выполнить действия, описанные в подразделе «Проверка работы».
Развертывание рабочих нод (nodes)
Предварительная настройка
В качестве предварительной настройки рабочей ноды необходимо выполнить следующий алгоритм действий:
-
Для работы kubelet отключите swap:
swapoff -a && sed -i '/ swap / s/ˆ\(.*\)$/#\1/g' /etc/fstab
-
Задайте имя хоста, например:
hostnamectl set-hostname work-node
Для проверки изменений выполните:
hostname && hostname -I work-node 192.168.122.225
-
Создайте файл для автозагрузки модулей ядра, необходимых для работы сервиса containerd:
nano /etc/modules-load.d/containerd.conf
со следующим содержимым:
overlay
br_netfilter
-
Загрузите модули в ядро:
modprobe overlay modprobe br_netfilter
Проверьте, что модули загружены:
lsmod | grep -E "br_netfilter|overlay"
Вывод команды должен иметь примерно следующий вид:
br_netfilter 32768 0 bridge 434176 1 br_netfilter overlay 204800 18
-
Создайте конфигурационный файл для работы сети внутри kubernetes:
nano /etc/sysctl.d/99-kubernetes-cri.conf
со следующим содержимым:
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
-
Примените параметры командой:
sysctl --system
Настройка DNS
В зависимости от предпочтений можно либо отключить использование stub-resolv в systemd-resolved, либо указать необходимые адреса DNS непосредственно в configmap.
Отключение stub-resolv в systemd-resolved
Для отключения stub-resolv в systemd-resolved необходимо выполнить команду:
sed -i 's|#DNSStubListener=yes|DNSStubListener=no|g' /etc/systemd/resolved.conf
После чего необходимо применить внесенные изменения:
systemctl daemon-reload systemctl restart systemd-resolved.service
Использование других адресов для службы DNS в кластере kubernetes
В случае необходимости использования других адресов DNS для кластера Kubernetes и/или работающих в нём контейнеров, выполните следующую команду в инициированном кластере kubernetes:
kubectl edit configmap coredns -n kube-system
Внесите изменения в следующие строки:
forward . /<путь_к_файлу>/<имя_файла> или <IP-адрес_DNS> {
max_concurrent 1000
}
где:
-
<путь_к_файлу>/<имя_файла>– указывается при использовании файла, подобного /etc/resolv.conf; -
<IP-адрес_DNS>– указывается при использовании одного или нескольких IP-адресов DNS.
Подробнее о настройке CoreDNS см. в официальной документации проекта.
При выполнении команды kubectl edit configmap coredns -n kube-system, файл конфигурации откроется редактором, определённым переменной $EDITOR.
Установка Kubernetes
Установите необходимые пакеты:
dnf install kubernetes kubernetes-kubeadm containerd iproute-tc
Примените правило iptables для перенаправления сетевых портов:
iptables -P FORWARD ACCEPT
Установите настройки по умолчанию для конфигурации контейнера:
containerd config default | tee /etc/containerd/config.toml
Измените стандартное расположение сетевых плагинов:
sed -i 's|bin_dir = "/opt/cni/bin"|bin_dir = "/usr/libexec/cni"|g' /etc/containerd/config.toml
Разрешите использование драйвера SystemdCgroup для containerd:
sed -i 's|SystemdCgroup = false|SystemdCgroup = true|g' /etc/containerd/config.toml
Перезапустите конфигурации служб и добавьте в автозагрузку службы containerd и kubelet:
systemctl daemon-reload systemctl restart containerd systemctl enable --now containerd systemctl enable kubelet.service
Присоединение рабочей ноды к кластеру
Подробную информацию о подключении рабочей ноды (nodes) к кластеру см. в п. «Присоединение рабочей ноды к кластеру».
Дополнительная настройка рабочей ноды
Для корректного функционирования кластера на рабочей ноде дополнительно необходимо создать символьную ссылку на плагин flannel:
ln -s /opt/cni/bin/flannel /usr/libexec/cni/flannel
На этом настройка рабочей ноды завершена.
Проверка работы
Для проверки корректности настройки на управляющем узле запустите nginx:
kubectl run nginx --image=nginx pod/nginx created
Проверьте размещение пода:
kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 54s
Просмотреть детальную информацию можно с помощью команды:
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 77s 10.244.1.4 work-node <none> <none>
Откройте браузер и в адресной строке пропишите IP-адрес, указанный в детальной информации о поде nginx, 10.244.1.4:

Nginx можно также установить с помощью инструмента для управления пакетами Kubernetes – Helm. Подробнее о helm см. в нашей инструкции «Управление пакетами Kubernetes с помощью HELM».
Дата последнего изменения: 06.07.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.