3.9.16.2.3 Установка kubernetes с использованием контейнерного движка cri-o
Развертывание Master-node
Предварительная настройка
Настройка DNS
Установка Kubernetes
Настройка Master-ноды
Присоединение Worker к кластеру
Настройка сети в кластере
Развертывание Worker-node
Предварительная настройка
Настройка DNS
Установка Kubernetes
Присоединение Worker к кластеру
Окружение
- Версия РЕД ОС: 8
- Конфигурация: Сервер графический, Сервер минимальный
- Версия ПО: kubernetes1.28-1.28.15-1, kubernetes1.28-kubeadm-1.28.15-1
Для дальнейшей настройки необходимо перейти в сеанс пользователя root:
su -
Далее команды будут выполняться с правами пользователя root, если не указано иное.
Развертывание Master-node
Предварительная настройка
В качестве предварительной настройки управляющего узла необходимо выполнить следующий алгоритм действий:
Для работы kubelet отключите swap:
swapoff -a && sed -i '/ swap / s/ˆ\(.*\)$/#\1/g' /etc/fstab
Задайте имя хоста, например:
hostnamectl set-hostname masternode
Для проверки изменений выполните:
hostname && hostname -I masternode 192.168.122.77
Создайте файл для автозагрузки модулей ядра, необходимых для работы сервиса crio:
nano /etc/modules-load.d/crio.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
Установите необходимые пакеты в зависимости от версии (в примере 1.28):
dnf install kubernetes1.28 kubernetes1.28-kubeadm cri-o cri-tools iproute-tc
Примените правило iptables для перенаправления сетевых портов:
iptables -P FORWARD ACCEPT
Установите настройки по умолчанию для конфигурации контейнера:
sed -i '/^\[crio\.runtime\]/a seccomp_profile = "\/etc\/containers\/policy.json"' /etc/crio/crio.conf
Перезапустите конфигурации служб и добавьте в автозагрузку службы crio и kubelet:
systemctl daemon-reload systemctl enable --now crio systemctl enable kubelet.service
Настройка Master-ноды
Запустите инициализацию кластера 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.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 a15yqe.yuq93ltce6elv5y8 \ --discovery-token-ca-cert-hash sha256:5f6de2cb74e756b7815b4d2e5a4a1a709ac6f97e7ec0f37e449aacc841d6b7ef
Настройте параметры управления кластером. Настройку можно выполнить как для непривилегированного пользователя, так и для суперпользователя 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
и дальнейшие действия по настройке кластера выполняйте от имени непривилегированного пользователя.
Присоединение Worker к кластеру
После успешной инициализации кластера kubernetes к управляющему узлу (master) необходимо присоединить рабочие узлы (worker). Подробную информацию по настройке рабочих узлов (worker) см. в п. «Развертывание Worker-node».
Для вывода команды присоединения рабочих узлов на master-ноде выполните:
kubeadm token create --print-join-command kubeadm join 192.168.122.77:6443 --token t549x9.kc3wgu8zbitykalw --discovery-token-ca-cert-hash sha256:5f6de2cb74e756b7815b4d2e5a4a1a709ac6f97e7ec0f37e449aacc841d6b7ef
Полученную команду необходимо выполнить на каждом присоединяемом рабочем (worker) узле:
kubeadm join 192.168.122.77:6443 --token t549x9.kc3wgu8zbitykalw --discovery-token-ca-cert-hash sha256:5f6de2cb74e756b7815b4d2e5a4a1a709ac6f97e7ec0f37e449aacc841d6b7ef [preflight] Running pre-flight checks [WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet [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
Проверить работоспособность кластера можно следующей командой (достаточно нескольких минут наблюдения):
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
Развертывание Worker-node
Предварительная настройка
В качестве предварительной настройки рабочего узла необходимо выполнить следующий алгоритм действий:
Для работы kubelet отключите swap:
swapoff -a && sed -i '/ swap / s/ˆ\(.*\)$/#\1/g' /etc/fstab
Задайте имя хоста, например:
hostnamectl set-hostname worker
Для проверки изменений выполните:
hostname && hostname -I worker 192.168.122.225
Создайте файл для автозагрузки модулей ядра, необходимых для работы сервиса crio:
nano /etc/modules-load.d/crio.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
Установите необходимые пакеты в зависимости от версии (в примере 1.28):
dnf install kubernetes1.28 kubernetes1.28-kubeadm cri-o cri-tools iproute-tc
Примените правило iptables для перенаправления сетевых портов:
iptables -P FORWARD ACCEPT
Установите настройки по умолчанию для конфигурации контейнера:
sed -i '/^\[crio\.runtime\]/a seccomp_profile = "\/etc\/containers\/policy.json"' /etc/crio/crio.conf
Перезапустите конфигурации служб и добавьте в автозагрузку службы crio и kubelet:
systemctl daemon-reload systemctl enable --now crio systemctl enable kubelet.service
Присоединение worker к кластеру
Подробную информацию о подключении рабочего (worker) узла к кластеру см. в п. «Присоединение Worker к кластеру».
Дата последнего изменения: 23.01.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.