Найти тему
Почти DevOps

Установка Kubernetes cluster на сервера Red OS crio

Оглавление

Видео

В статье рассмотрим как установить Kubernetes на RedOS с cri-o
В статье рассмотрим как установить Kubernetes на RedOS с cri-o

Настройка Master-node

1. Для работы kubelet отключите swap:

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

2. Отключите SELinux:

setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

3. Создайте файл для автозагрузки модулей ядра, необходимых для работы сервиса crio:

  • nano /etc/modules-load.d/crio.conf
overlay
br_netfilter
  • Загрузите модули в ядро:
modprobe overlay
modprobe br_netfilter
  • Проверьте, что данные модули работают:
lsmod | egrep "br_netfilter|overlay"

4. Создайте конфигурационный файл для работы сети внутри 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

5. Установите необходимые пакеты:

dnf install kubernetes kubernetes-kubeadm cri-o cri-tools

6. Настройте проброс портов в iptables:

iptables -P FORWARD ACCEPT

7. Установите настройки по умолчанию для конфигурации контейнера:

sed -i '/^\[crio\.runtime\]/a seccomp_profile = "\/etc\/containers\/policy.json"' /etc/crio/crio.conf

8. Запустите службу crio и добавьте ее в автозагрузку:

systemctl enable --now crio

9. Добавьте службу kubelet в автозагрузку:

systemctl enable kubelet.service

10. Загрузите образы контейнеров, необходимых kubeadm для инициализации ноды кластера:

kubeadm config images pull

11. Запустите инициализацию мастер-ноды в одноранговом кластере. Данная команда выполнит начальную настройку и подготовку основного узла кластера. Ключ --pod-network-cidr задает адрес внутренней подсети для вашего кластера.

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

12. Настройте параметры управления кластером. Настройку можно выполнить как для локального пользователя, так и для суперпользователя 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 .bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf

13. Установите внутреннюю конфигурацию сети в кластере (в примере используется calico).

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

14. Проверьте список и статус всех подов в кластере:

kubectl get pod -n kube-system

15. Для вывода команды присоединения worker к кластеру выполните:

kubeadm token create --print-join-command

Настройка рабочих нод

1. Для работы kubelet отключите swap:

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

2. Отключите SELinux:

setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

3. Создайте файл для автозагрузки модулей ядра, необходимых для работы сервиса crio:

  • nano /etc/modules-load.d/crio.conf
overlay
br_netfilter
  • Загрузите модули в ядро:
modprobe overlay
modprobe br_netfilter
  • Проверьте, что данные модули работают:
lsmod | egrep "br_netfilter|overlay"

4. Создайте конфигурационный файл для работы сети внутри 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

5. Установите необходимые пакеты:

dnf install kubernetes kubernetes-kubeadm cri-o cri-tools

6. Настройте проброс портов в iptables:

iptables -P FORWARD ACCEPT

7. Установите настройки по умолчанию для конфигурации контейнера:

sed -i '/^\[crio\.runtime\]/a seccomp_profile = "\/etc\/containers\/policy.json"' /etc/crio/crio.conf

8. Запустите службу crio и добавьте ее в автозагрузку:

systemctl enable --now crio

9. Добавьте службу kubelet в автозагрузку:

systemctl enable kubelet.service

Подключение рабочих нод к мастеру

1. На master-ноде получите команду присоединения worker:

kubeadm token create --print-join-command

kubeadm join 10.81.186.86:6443 --token l1py3b.pboa64i6uoz63hzp --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7

2. На worker выполните полученную команду:

kubeadm join 10.81.186.86:6443 --token t48hdu.lh2sica7ga921pez --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7

[preflight] Running pre-flight checks
[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.

3. На master выполните команду для вывода списка нод кластера и их статуса:

kubectl get nodes

NAME STATUS ROLES AGE VERSION
localhost.localdomain Ready control-plane 18h v1.24.12
worker Ready <none> 18h v1.24.12

4. Дополнительно можно проверить работу нод на master. Запустите nginx:

kubectl run nginx --image=nginx

pod/nginx created

Проверьте размещение пода:

kubectl get pods

NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 18h

Просмотреть детальную информацию можно с помощью команды:

kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 2m 10.244.171.65 worker <none> <none>

Полезные команды

Далее приведены некоторые полезные для работы команды:

  • kubectl delete node <имя_ноды> - удалить ноду;
  • kubectl exec -it nginx -- /bin/bash - выполнить вход в виртуальную консоль;
  • kubectl delete pods <имя_пода> - удалить под;
  • kubectl get pod -o wide - детальная информация о подах;
  • kubectl get service --all-namespaces - подробная информация о сервисах.

Спасибо RedOS