• Русский
  • Предварительная подготовка узлов

    Перед установкой кластера global все узлы (узлы control plane и worker-узлы) должны пройти предварительную подготовку.

    INFO

    Эта страница относится к узлам, работающим под традиционной операционной системой, такой как RHEL, CentOS или Ubuntu, которые разворачивает по SSH. Некоторые из проверок ниже — например, пользователь SSH и параметры /etc/ssh/sshd_config — необходимы для сохранения работоспособности присоединения узла по SSH.

    Поддерживаемые версии ОС и ядра

    В следующей таблице перечислены поддерживаемые операционные системы, их проверенные версии и соответствующие протестированные версии ядра.

    Платформа применяет строгие политики сопоставления версий для официальной поддержки:

    • Версия ОС (x.y.z): исправляющие версии (z) могут различаться, но основные и второстепенные версии (x и y) должны строго совпадать с проверенными версиями. Изменение x или y официально не поддерживается.
    • Версия ядра (x.y.z-build): суффикс сборки (build) может различаться, но базовая версия ядра (x.y.z) должна строго совпадать с протестированными версиями. Изменение x.y.z официально не поддерживается.
    INFO
    • Поддерживается только версия ядра, поставляемая с официальной операционной системой. Если ОС, версия ядра или архитектура CPU не соответствуют требованиям, обратитесь в техническую поддержку.
    • В Kylin V10, V10-SP1 и V10-SP2 известны проблемы с ядром, которые могут вызывать сбои сетевого доступа NodePort; рекомендуется выполнить обновление до Kylin V10-SP3.

    x86

    Red Hat Enterprise Linux (RHEL)
    CentOS
    Ubuntu
    Kylin Linux Advanced Server
    • RHEL 7.8: 3.10.0-1127.el7.x86_64
    • RHEL 8.0: 4.18.0-80.el8.x86_64
    • RHEL 8.6: 4.18.0-372.9.1.el8.x86_64
    • RHEL 8.10: 4.18.0-553
    • RHEL 9.6: 5.14.0-570.12.1

    Примечание: RHEL 7.8 не поддерживает Calico Vxlan IPv6.

    ARM

    Kylin Linux Advanced Server
    • Kylin V10 SP3: 4.19.90-52.22.v2207.ky10.aarch64

    Примечание: Архитектура ARM поддерживает только Kunpeng 920. Для других моделей обратитесь в техническую поддержку.

    Выполнение скрипта быстрой конфигурации

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

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

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

    bash init.sh
    WARNING

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

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

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

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

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

    Ниже приведен список проверок:

    • ОС и ядро

      • ✅ В конфигурации загрузки 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 и firewall.
      • ✅ Отключите swap .
    • Пользователи и разрешения

      • ✅ Пользователь SSH на узле имеет привилегии root и может использовать sudo без пароля.
      • ✅ Параметр UseDNS в /etc/ssh/sshd_config должен быть установлен в no.
      • ✅ Перед добавлением узла установите параметр UsePAM в /etc/ssh/sshd_config в no, затем перезапустите sshd. Иначе политики сеанса PAM (например, принудительная смена пароля, pam_access, faillock или pam_limits) могут заблокировать присоединение узла по SSH. После того как узел перейдет в состояние Ready, можно восстановить UsePAM yes. На системах с включенным SELinux, использующих аутентификацию по паролю, значение UsePAM no само по себе может нарушить вход по SSH; в таком случае используйте аутентификацию по ключу.
      • systemctl show --property=DefaultTasksMax должен возвращать infinity; низкое ограничение (например, значение 512 по умолчанию в RHEL 7 / CentOS 7) приводит к тому, что активно работающие контейнеры не могут создавать потоки. Если значение не равно infinity, задайте DefaultTasksMax=infinity в /etc/systemd/system.conf и выполните systemctl daemon-reexec.
    • Сеть узла

      • hostname должен соответствовать следующим правилам:
        • Не более 36 символов.
        • Начинается и заканчивается буквой или цифрой.
        • Содержит только строчные буквы, цифры, - и ., но не может содержать .-, .. или -..
      • localhost в /etc/hosts должен разрешаться в 127.0.0.1.
      • ✅ Файл /etc/resolv.conf должен существовать и содержать конфигурации nameserver, но не должен содержать адреса, начинающиеся с 172 (отключите systemd-resolved).
      • ⚠️ В файле /etc/resolv.conf не должны быть настроены домены поиска (если их необходимо настроить, см. Настройка домена поиска).
      • ✅ IP-адрес машины не может быть адресом loopback, multicast, link-local, all-0 или broadcast.
      • ✅ Выполнение ip route должно возвращать маршрут по умолчанию или маршрут, указывающий на 0.0.0.0.
      • ✅ Узлы не должны занимать следующие порты:
        • Узлы control plane: 2379, 2380, 6443, 10249 ~ 10256
        • Узел, на котором расположен установщик: 8080, 12080, 12443, 16443, 2379, 2380, 6443, 10249 ~ 10256
        • Worker-узлы: 10249 ~ 10256
      • ✅ Если кластер использует Kube-OVN или Calico, убедитесь, что следующие порты не заняты:
        • Kube-OVN: 6641, 6642
        • Calico: 179
      • ⚠️ Убедитесь, что IP-адреса в сетевом сегменте 172.17.x.x ~ 172.18.x.x, требуемые nerdctl, не заняты. Если 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/nerdctl
        • /opt/nerdctl/
        • /var/lib/containerd
        • /var/log/pods
        • /var/lib/kubelet/pki
    • Проверки между узлами

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

    Приложение

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

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

    DANGER
    • Во избежание прерывания работы приложений или потери данных обязательно подтвердите наличие конфликтующих пакетов. Если конфликт найден, разработайте план переключения приложения и создайте резервную копию данных перед удалением.
    • После удаления конфликтующих пакетов все равно необходимо проверить наличие других потенциально конфликтующих двоичных файлов в каталогах, таких как /usr/local/bin/ (например, ПО, связанное с docker, nerdctl, containerd, runc, podman, сетями контейнеров, runtime контейнеров или 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 (два пробела).
    WARNING
    • Если строка search в файле /etc/resolv.conf не соответствует указанным ограничениям, это может привести к сбоям DNS-запросов или снижению производительности.
    • Перед изменением файла /etc/resolv.conf рекомендуется создать его резервную копию.