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

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

    INFO

    Эта страница относится к узлам, работающим под традиционной операционной системой, такой как RHEL, CentOS или Ubuntu, которые развертывает по SSH. Некоторые проверки ниже — например, SSH-пользователь и параметры /etc/ssh/sshd_config — нужны для того, чтобы продолжал работать вход узлов через SSH. Если ваша среда работает на Immutable Infrastructure (Alauda OS on Huawei DCS, VMware vSphere или Huawei Cloud Stack), развертывание узлов выполняется на основе образов, и эта предварительная подготовка не применяется; вместо этого см. Установка кластера global на Immutable Infrastructure.

    Поддерживаемые версии OS и kernel

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

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

    • Версия OS (x.y.z): патч-версии (z) могут отличаться, но major- и minor-версии (x и y) должны строго соответствовать проверенным версиям. Изменение x или y официально не поддерживается.
    • Версия kernel (x.y.z-build): суффикс сборки (build) может отличаться, но базовая версия kernel (x.y.z) должна строго соответствовать протестированным версиям. Изменение x.y.z официально не поддерживается.
    INFO
    • Поддерживается только версия kernel, поставляемая вместе с официальной операционной системой. Если OS, версия kernel или архитектура CPU не соответствуют требованиям, обратитесь в техническую поддержку.
    • В версиях Kylin V10, V10-SP1 и V10-SP2 известны проблемы с kernel, которые могут вызывать сбои сетевого доступа 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.

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

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

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

    • OS и kernel

      • ✅ В grub-конфигурации загрузки машины должен быть параметр transparent_hugepage=never.
      • ✅ В grub-конфигурации загрузки системы CentOS 7.x должен быть параметр cgroup.memory=nokmem.
      • ✅ Проверьте, что модули kernel ip_vs, ip_vs_rr, ip_vs_wrr и ip_vs_sh включены.
      • ⚠️ Если версия kernel ниже 4.19.0 (или RHEL ниже 4.18.0), проверьте, что модули kernel nf_conntrack_ipv4 и (для IPv6) nf_conntrack_ipv6 включены.
      • ⚠️ Если кластер global планирует использовать CNI Kube-OVN, модули kernel 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 не следует настраивать search-домены (если их необходимо настроить, см. Настройка search-домена).
      • ✅ 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 рекомендуется создать его резервную копию.