Развертывание Master-node Предварительная настройка Настройка DNS Установка Kubernetes Настройка Master-ноды Присоединение Worker к кластеру Настройка сети в кластере Развертывание Worker-node Предварительная настройка Настройка DNS Установка Kubernetes Присоединение Worker к кластеру Дополнительная настройка worker
Окружение
Для дальнейшей настройки необходимо перейти в сеанс пользователя root:
su -
Далее команды будут выполняться с правами пользователя root, если не указано иное.
В качестве предварительной настройки управляющего узла необходимо выполнить следующий алгоритм действий:
Для работы kubelet отключите swap:
swapoff -a && sed -i '/ swap / s/ˆ\(.*\)$/#\1/g' /etc/fstab
Задайте имя хоста, например:
hostnamectl set-hostname masternode
Для проверки изменений выполните:
hostname && hostname -I masternode 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
В зависимости от предпочтений можно либо отключить использование stub-resolv в systemd-resolved, либо указать необходимые адреса DNS непосредственно в configmap.
Для отключения 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 и/или работающих в нём контейнеров, выполните следующую команду в инициированном кластере kubernetes:
kubectl edit configmap coredns -n kube-system
Внесите изменения в следующие строки:
forward . /<путь_к_файлу>/<имя_файла> или <IP-адрес_DNS> { max_concurrent 1000 }
где:
<путь_к_файлу>/<имя_файла> – указывается при использовании файла, подобного /etc/resolv.conf;
<путь_к_файлу>/<имя_файла>
<IP-адрес_DNS> – указывается при использовании одного или нескольких IP-адресов DNS.
<IP-адрес_DNS>
Подробнее о настройке CoreDNS см. в официальной документации проекта.
При выполнении команды kubectl edit configmap coredns -n kube-system, файл конфигурации откроется редактором, определённым переменной $EDITOR.
$EDITOR
Установите необходимые пакеты в зависимости от версии (в примере 1.28):
dnf install kubernetes1.28 kubernetes1.28-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 задает адрес внутренней подсети для кластера;
--pod-network-cidr
ключ --kubernetes-version задает версию kubernetes.
--kubernetes-version
Для вывода версии kubernetes выполните команду:
kubeadm version -o=short v1.28.15
Для вывода подробной информации об используемой версии kubernetes выполните команду:
kubeadm version -o=yaml clientVersion: buildDate: "2024-11-02T00:00:00Z" compiler: gc gitCommit: 841856557ef0f6a399096c42635d114d6f2cf7f4 gitTreeState: archive gitVersion: v1.28.15 goVersion: go1.22.7 major: "1" minor: "28" 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 и дальнейшие действия по настройке кластера выполняйте от имени непривилегированного пользователя.
exit
После успешной инициализации кластера kubernetes к управляющему узлу (master) необходимо присоединить рабочие узлы (worker). Подробную информацию по настройке рабочих узлов (worker) см. в п. «Развертывание Worker-node».
Для вывода команды присоединения рабочих узлов на master-ноде выполните:
kubeadm token create --print-join-command kubeadm join 192.168.122.77:6443 --token avepsn.8v4p2u1zf0y4mh8c --discovery-token-ca-cert-hash sha256:daa72a370ca5b174f7faa161b7cb0125133f1b6322753c28e26ad294fb97ea2d
Полученную команду необходимо выполнить на каждом присоединяемом рабочем (worker) узле:
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 "worker" could not be reached [WARNING Hostname]: hostname "worker": lookup worker 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.
Для этого на master-ноде выполните команду:
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-pbjjn 1/1 Running 0 2d17h kube-flannel kube-flannel-ds-zw2s4 1/1 Running 0 2d17h kube-system coredns-76f75df574-vdz5k 1/1 Running 0 2d17h kube-system coredns-76f75df574-zw25z 1/1 Running 0 2d17h kube-system etcd-masternode 1/1 Running 0 2d17h kube-system kube-apiserver-masternode 1/1 Running 0 2d17h kube-system kube-controller-manager-masternode 1/1 Running 0 2d17h kube-system kube-proxy-27fn4 1/1 Running 0 2d17h kube-system kube-proxy-thjqt 1/1 Running 0 2d17h kube-system kube-scheduler-masternode 1/1 Running 0 2d17h
В выводе команды не должно быть перезапусков контейнеров – это значит, что столбец RESTARTS должен иметь не более 1 перезагрузки на контейнер.
Просмотреть список подключенных к кластеру узлов и их статус можно командой:
kubectl get nodes NAME STATUS ROLES AGE VERSION masternode Ready control-plane 160m v1.28.15 worker Ready <none> 134m v1.28.15
В качестве предварительной настройки рабочего узла необходимо выполнить следующий алгоритм действий:
hostnamectl set-hostname worker
hostname && hostname -I worker 192.168.122.225
Подробную информацию о подключении рабочего (worker) узла к кластеру см. в п. «Присоединение worker к кластеру».
Для корректного функционирования кластера на worker-ноде дополнительно необходимо создать символьную ссылку на плагин flannel:
На этом настройка worker-ноды завершена.
Дата последнего изменения: 19.02.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Нажимая «Отправить запрос», вы соглашаетесь с условиями обработки персональных данных.
Вы будете получать только актуальную информацию по обновлению безопасности
Подписываясь на уведомления, вы соглашаетесь с условиями обработки персональных данных.
На ваш почтовый адрес отправлено письмо с подтверждением подписки.