Предварительная обработка узлов

Перед установкой кластера global все узлы (узлы управляющей плоскости и рабочие узлы) должны пройти предварительную обработку.

Содержание

Выполнение скрипта быстрой настройки

В установочном пакете предоставлен скрипт для быстрой настройки узлов.

Распакуйте установочный пакет, чтобы получить файл скрипта init.sh в каталоге res. Скопируйте файл скрипта на узлы и убедитесь, что у вас есть права root.

Выполните скрипт:

bash init.sh
ВНИМАНИЕ

Скрипт init.sh не гарантирует корректную обработку всех перечисленных ниже проверок. Вам всё равно необходимо продолжить выполнение следующих шагов.

Проверки узлов

Ниже приведён список всех проверок, которые должны быть выполнены на узлах. В зависимости от роли узла требуемые проверки могут отличаться. Например, некоторые проверки применимы только к узлам управляющей плоскости.

Проверки разделены на две категории:

  • ✅ Обозначает проверку, которая должна быть успешно пройдена.
  • ⚠️ Обозначает проверку, которая должна быть выполнена в определённых сценариях. Пожалуйста, определите, выполнены ли соответствующие условия согласно инструкциям. Если да, необходимо их устранить.

Список проверок:

  • ОС и ядро

    • ✅ В конфигурации загрузчика grub машины должен быть параметр transparent_hugepage=never.
    • ✅ В конфигурации загрузчика grub системы CentOS 7.x должен быть параметр cgroup.memory=nokmem.
    • ✅ Проверьте, что модули ядра ip_vs, ip_vs_rr, ip_vs_wrr и ip_vs_sh загружены.
    • ⚠️ Если версия ядра ниже 4.19.0 (или RHEL ниже 4.18.0), проверьте, что модули ядра nf_conntrack_ipv4 и (для IPv6) nf_conntrack_ipv6 загружены.
    • ⚠️ Если в кластере global планируется использовать CNI Kube-OVN, модули ядра geneve и openvswitch должны быть загружены.
    • ✅ Отключите apparmor/selinux и брандмауэр.
    • ✅ Отключите swap.
  • Пользователи и права

    • ✅ SSH-пользователь узла имеет права root и может использовать sudo без пароля.
    • ✅ Параметры UseDNS и UsePAM в файле /etc/ssh/sshd_config должны быть установлены в no.
    • ✅ Выполнение systemctl show --property=DefaultTasksMax должно возвращать infinity или очень большое значение; в противном случае отредактируйте /etc/systemd/system.conf.
  • Сеть узла

    • hostname должен соответствовать следующим правилам:
      • Не более 36 символов.
      • Начинается и заканчивается буквой или цифрой.
      • Содержит только строчные буквы, цифры, - и ., но не содержит последовательностей .-, .. или -..
    • ✅ В файле /etc/hosts localhost должен разрешаться в 127.0.0.1.
    • ✅ Файл /etc/resolv.conf должен существовать и содержать конфигурации nameserver, но не должен содержать адреса, начинающиеся с 172 (отключите systemd-resolved).
    • ⚠️ В файле /etc/resolv.conf не должно быть настроек поисковых доменов (если необходимо настроить, см. Настройка поискового домена).
    • ✅ IP-адрес машины не должен быть петлевым, многоадресным, локальным по ссылке, all-0 или широковещательным.
    • ✅ Выполнение ip route должно возвращать маршрут по умолчанию или маршрут, указывающий на 0.0.0.0.
    • ✅ Узлы не должны занимать следующие порты:
      • Узлы управляющей плоскости: 2379, 2380, 6443, 10249 ~ 10256
      • Узел, на котором находится установщик: 8080, 12080, 12443, 16443, 2379, 2380, 6443, 10249 ~ 10256
      • Рабочие узлы: 10249 ~ 10256
    • ✅ Если в кластере global используется Kube-OVN или Calico, убедитесь, что следующие порты не заняты:
      • Kube-OVN: 6641, 6642
      • Calico: 179
    • ⚠️ Убедитесь, что IP-адреса в сетевом сегменте 172.16.x.x ~ 172.32.x.x, необходимых Docker, не заняты. Если IP-адреса в этом сегменте заняты и их нельзя изменить, обратитесь в техническую поддержку.
  • Требования к программному обеспечению и каталогам:

    • ✅ Должны быть установлены следующие утилиты: ip, ss, tar, swapoff, modprobe, sysctl, md5sum, а также scp или sftp.
    • ⚠️ Если планируется использовать локальное хранилище TopoLVM или Rook, необходимо установить lvm2.
    • ✅ Файл /etc/systemd/system/kubelet.service не должен существовать.
    • ✅ Параметры монтирования /tmp не должны содержать noexec.
    • ✅ Удалите пакеты, конфликтующие с компонентами кластера global (см. Удаление конфликтующих пакетов).
    • ✅ Следующие каталоги должны быть удалены, если они существуют:
      • /var/lib/docker
      • /var/lib/containerd
      • /var/log/pods
      • /var/lib/kubelet/pki
  • Проверки между узлами

    • ✅ Между узлами кластера global не должно быть ограничений сетевого брандмауэра.
    • hostname каждого узла в кластере должен быть уникальным.
    • ✅ Все узлы должны иметь одинаковый часовой пояс, а ошибка синхронизации времени должна быть ≤ 10 секунд.

Приложение

Удаление конфликтующих пакетов

Перед установкой на узлах могут уже работать приложения в средах docker/containerd или может быть установлено программное обеспечение, конфликтующее с кластером global. Поэтому необходимо проверить и удалить конфликтующие пакеты.

ОПАСНОСТЬ
  • Чтобы избежать прерывания работы приложений или потери данных, обязательно убедитесь в наличии конфликтующих программных пакетов. При обнаружении конфликта разработайте план переключения приложений и сделайте резервную копию данных перед удалением.
  • После удаления конфликтующих пакетов необходимо проверить наличие других потенциально конфликтующих бинарных файлов в каталогах, таких как /usr/local/bin/ (например, программное обеспечение, связанное с docker, containerd, runc, podman, сетями контейнеров, средами выполнения контейнеров или Kubernetes).

Ниже приведены команды для справки.

CentOS / RedHat
Ubuntu
Kylin

Проверка:

for x in \
    docker docker-client docker-common docker-latest \
    podman-docker podman \
    runc \
    containernetworking-plugins \
    apptainer \
    kubernetes kubernetes-master kubernetes-node kubernetes-client \
    ; do
    rpm -qa | grep -F "$x"
done

Удаление:

for x in \
    docker docker-client docker-common docker-latest \
    podman-docker podman \
    runc \
    containernetworking-plugins \
    apptainer \
    kubernetes kubernetes-master kubernetes-node kubernetes-client \
    ; do
    yum remove "$x"
done

В Linux OS файл /etc/resolv.conf используется для настройки параметров разрешения доменных имён клиента DNS. Строка search задаёт путь поиска доменов для DNS-запросов.

Требования к конфигурации

  • Количество доменов: Количество доменов в строке search должно быть меньше domainCountLimit - 3 (по умолчанию domainCountLimit равно 32).
  • Длина одного домена: Каждый домен не должен превышать 253 символа.
  • Общая длина: Общая длина всех доменных имён и пробелов не должна превышать MaxDNSSearchListChar (по умолчанию 2048).

Пример

search domain1.com domain2.com domain3.com
  • Общее количество доменов — 3.
  • Длина одного домена, например domain1.com, — 11.
  • Общая длина — 35, то есть 11 + 11 + 11 + 2 (два пробела).
ВНИМАНИЕ
  • Если строка search в файле /etc/resolv.conf не соответствует указанным ограничениям, это может привести к сбоям DNS-запросов или снижению производительности.
  • Перед изменением файла /etc/resolv.conf рекомендуется сделать его резервную копию.