Установка кластера Kubernetes с помощью Kubespray

Это руководство описывает процесс офлайн-установки кластера Kubernetes с использованием автономного установщика на базе Kubespray. Офлайн-установка Kubernetes для основного экземпляра системы поддерживается для следующих операционных систем:

  • РЕД ОС 7.3, 8.0;

  • Debian 11, 12;

  • Platform V SberLinux OS 9;

  • Rocky Linux 9;

  • Ubuntu 22, 24.

Для сателлитов поддерживается офлайн-установка кластера K0s на любых операционных системах семейства Linux.

Для установки в окружении других ОС с использованием подключения к Интернету обратитесь к разделу Установка кластера Kubernetes вручную.

Установку кластера можно производить как на master-узле кластера, так и на АРМ администратора — отдельном узле, имеющем сетевой доступ к узлам кластера.

Подготовка файлов установщика

Подготовка файлов установщика состоит из следующих этапов:

Скачивание архива установщика

Для установки необходимо скачать архив установщика Kubernetes из файлового хранилища R-Vision:

Если у вас есть скачанный установщик системы, архивы можно загрузить из его меню. Для этого:

  1. Запустите установщик системы:

    bash ./evo.platform_<version>.run

    Требуемая версия bash: 4.0 или выше.

    Или сделайте файл установщика исполняемым и запустите непосредственно:

    chmod +x ./evo.platform_<version>.run
    ./evo.platform_<version>.run
  2. Выберите режим работы Downloading additional packages.

    install additional packages

  3. Загрузите дополнительный пакет, например, kubespray-installer-redos.tar.gz или k0s-installer.run.

Архив с установочным файлом необходимо загрузить во временную директорию /tmp.

Распаковка архива

Выполните следующие шаги:

  1. Загрузите архив установщика Kubernetes на узел, на котором будет производиться установка.

    • Для Windows:

      pscp <archive_path> user@server:<installation_dir>
    • Для Linux или macOS:

      scp <archive_path> user@server:<installation_dir>

    Здесь:

    • <archive_path> — путь к архиву установщика Kubernetes.

    • <installation_dir> — директория, в которой будет производиться установка (будет размещен файл дистрибутива evo.platform_<version>.run).

    Все дальнейшие действия выполняются на узле, на котором будет производиться установка.
  2. Если вы используете архив установщика Kubernetes, например, kubespray-installer-redos.tar.gz, распакуйте архив с установочными файлами с помощью следующих команд:

    cd <installation_dir>
    tar xvfz <archive_name>

    Здесь:

    • <installation_dir> — директория, в которой будет производиться установка (будет размещен файл дистрибутива evo.platform_<version>.run).

    • <archive_name> — имя архива, например, kubespray-installer-redos.tar.gz.

Установка кластера Kubernetes

Установка кластера Kubernetes состоит из следующих этапов:

Отключение использования IPv6

Чтобы избежать ошибок разрешения имен, перед развертыванием кластера отключите использование IPv6, выполнив следующие действия на каждом узле кластера:

  1. В каталоге /etc/sysctl.d создайте файл 99-disable-ipv6.conf со следующим содержимым:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
  2. Сохраните файл.

  3. Примените изменения с помощью следующей команды:

    sudo sysctl --system

Настройка доменных имен узлов кластера

В процессе установки Kubespray автоматически изменяет доменную зону worker-узлов (часть доменного имени без имени хоста) на доменную зону первого master-узла в файле инвентаризации. Если имя хоста worker-узла совпадает с таковым у master-узла, после изменения доменной зоны полные доменные имена (FQDN) master- и worker-узла совпадут и установка завершится некорректно.

Пример:

  • FQDN master-узла — siem.master.local;

  • FQDN worker-узла — siem.worker.local.

В процессе установки FQDN worker-узла изменится на siem.master.local, что приведет к неработоспособности кластера.

Для корректной установки узлам требуется присвоить FQDN, имеющие единую доменную зону, но различные имена хостов. В примере выше:

  • FQDN master-узла — master.siem.local;

  • FQDN worker-узла — worker.siem.local.

Чтобы проверить и при необходимости изменить доменные имена узлов кластера, выполните следующие действия для каждого из них:

  1. Получите доменное имя узла кластера, выполнив следующую команду:

    hostname -f
  2. Если имя хоста worker-узла совпадает с именем хоста master-узла, измените FQDN worker-узла, измените FQDN:

    • Если на узле установлена утилита hostnamectl:

      1. Измените FQDN с помощью hostnamectl:

        sudo hostnamectl set-hostname <new_fqdn>

        Здесь:

        • <new_fqdn> — новое FQDN узла.

      2. Перезапустите узел.

    • Если на узле не установлена утилита hostnamectl:

      1. Измените FQDN с помощью hostname:

        sudo hostname <new_fqdn>

        Здесь:

        • <new_fqdn> — новое FQDN узла.

        Данная команда изменит FQDN узла только до перезагрузки, поэтому также необходимо выполнить последующие шаги.
      2. Измените FQDN в файле /etc/hostname:

        sudo nano /etc/hostname
      3. Измените FQDN в файле /etc/hosts:

        sudo nano /etc/hosts

Настройка SSH-доступа

Проверьте возможность подключения по SSH-ключу к каждому узлу кластера:

ssh <FQDN>

Здесь:

  • <FQDN> — FQDN текущего узла.

Чтобы узнать FQDN текущего узла, выполните следующую команду:

hostname -f

Убедитесь, что FQDN узла разрешается в IP-адрес. Это можно проверить, например, с помощью утилиты nslookup:

nslookup <FQDN>

Здесь:

  • <FQDN> — FQDN текущего узла.

Установка Kubernetes на узлы с адресами localhost.localdomain, localhost и 127.0.0.1 не предусмотрена.

Если подключение по SSH-ключу не настроено, сгенерируйте ключи и добавьте открытый ключ на каждый узел:

ssh-keygen
ssh-copy-id <user>@<FQDN>

Установка утилит

На каждом узле установите утилиты, требуемые для подключения к кластеру:

sudo dnf install bash-completion vim telnet chrony jq htop tcpdump zip unzip rsync ebtables ethtool conntrack -y

Синхронизация времени с NTP-сервером

Настройте синхронизацию времени с корпоративным NTP-сервером, выполнив следующие команды на каждом узле кластера:

sudo timedatectl set-ntp true
sudo sed -i "/^server /d" /etc/chrony.conf
sudo bash -c 'echo "server <time_server>" >> /etc/chrony.conf'
sudo systemctl enable --now chronyd
sudo systemctl restart chronyd
sudo systemctl status chronyd
chronyc sources

Здесь:

  • <time_server> — адрес корпоративного сервера времени (например, ntp.rvision.local).

Включение шифрования трафика между узлами кластера

Чтобы настроить шифрование трафика между узлами кластера, вы можете включить использование протокола WireGuard для сетевого плагина Calico. После этого плагин начнет создавать защищенные туннели между узлами кластера.

  • Для работы WireGuard требуется ядро Linux версии 5.6 и выше, поскольку этот протокол встроен в ядро начиная с версии 5.6.

  • Трафик между узлами кластера шифруется, но на каждом узле трафик между самим подом и его хостом остается открытым. Считается, что для его перехвата злоумышленнику требуется прямой доступ к самому хосту.

  • Трафик между подами на одном узле не шифруется.

Инструкции по устранению типичных проблем при работе WireGuard приведены в разделе Устранение проблем при эксплуатации системы.

Чтобы включить шифрование трафика между узлами кластера, выполните следующие действия:

  1. Убедитесь что на всех узлах кластера открыт порт 51820.

  2. Подключитесь к терминалу узла, на котором распакован архив установщика.

  3. Перейдите в каталог, в котором распакован архив установщика.

  4. Добавьте параметр calico_wireguard_enabled: true в файл custom_variables.yml. Например, это можно сделать с помощью следующей команды:

    echo "calico_wireguard_enabled: true" >> custom_variables.yml

Запуск скрипта установки

Скрипт принимает следующие переменные окружения:

Переменная Описание

ANSIBLE_USER

Пользователь для подключения к узлам по SSH.

Обязательная переменная.

ANSIBLE_PASSWORD

Пароль для подключения к узлам по SSH.

Обязательная переменная.

ASK_PASS

Запрос пароля для подключения к узлам по SSH.

Если необходимо запросить пароль, укажите ASK_PASS=yes.

ASK_BECOME_PASS

Запрос пароля для повышения привилегий до sudo.

Если необходимо запросить пароль, укажите ASK_BECOME_PASS=yes.

VERBOSE

Уровень детализации логирования.

Допустимые значения: целые числа 0—​4.

По умолчанию: 0 (минимальный уровень детализации).

Если передано любое недопустимое значение, устанавливается значение 2.

Пример запуска только с обязательными переменными окружения
ANSIBLE_USER=username ANSIBLE_PASSWORD=password ./install.sh
Пример запуска с опциональными переменными окружения
ANSIBLE_USER=username ANSIBLE_PASSWORD=password ASK_PASS=yes ASK_BECOME_PASS=yes VERBOSE=4 ./install.sh

По умолчанию скрипт установки запускается в интерактивном режиме, при котором отдельно запрашиваются FQDN для каждого узла кластера и путь до директории с данными containerd. Чтобы отключить интерактивность скрипта установки, необходимо сразу передать эти данные при его запуске с помощью следующих переменных окружения:

Переменная Описание

MASTER_NODES

Список FQDN master-узлов через пробел.

WORKER_NODES

Список FQDN worker-узлов через пробел.

CONTAINERD_ROOT

Путь к директории с данными containerd.

По умолчанию: /var/lib/containerd.

Пример запуска в неинтерактивном режиме:

ANSIBLE_USER=username ANSIBLE_PASSWORD=password MASTER_NODES="m01.example.com" WORKER_NODES="w01.example.com w02.example.com" CONTAINERD_ROOT="/var/lib/containerd" ./install.sh

Если пользователь не имеет права записи в корневой каталог, установщик необходимо запускать через sudo:

sudo ANSIBLE_USER=username ANSIBLE_PASSWORD=password MASTER_NODES="m01.example.com" WORKER_NODES="w01.example.com w02.example.com" CONTAINERD_ROOT="/var/lib/containerd" ./install.sh

Проверка работоспособности

После завершения установки проверьте работоспособность кластера:

  1. Проверьте статус узлов кластера:

    kubectl get nodes

    Если все узлы кластера имеют статус Ready, значит, кластер успешно развернут.

  2. Если вы включали шифрование трафика между узлами кластера, убедитесь, что оно работает:

    1. Чтобы отслеживать статус WireGuard, установите утилиту wg с помощью менеджера пакетов вашей операционной системы, например:

      sudo dnf install -y yq wireguard-tools
    2. Проверьте, что в информации об узлах Calico появилось поле wireguardPublicKey:

      for node in $(kubectl get nodes -o yaml| yq '.items[].metadata.name'); do
        echo ">>> $node";
        calicoctl get node $node -o yaml | grep wireguardPublicKey;
      done
    3. Проверьте, что утилита wg возвращает информацию о конфигурации, с помощью следующих команд:

      sudo wg show
      sudo wg showconf wireguard.cali

В Calico процесс обновления ключей WireGuard полностью автоматизирован и не требует ручных действий. Он встроен в работу компонента Felix на каждом узле кластера.

Описание алгоритма обновления ключей приведено в разделе Обновление ключей WireGuard.

Была ли полезна эта страница?

Обратная связь