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

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

  • РЕД ОС 7.3, 8.0;

  • Debian 11, 12;

  • Rocky Linux 9.

Для сателлитов поддерживается офлайн-установка кластера 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. Если вы используете архив kubespray-installer-redos.tar.gz, kubespray-installer-debian.tar.gz или kubespray-installer-rocky.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).

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

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

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

ASK_PASS

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

ANSIBLE_USER

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

ANSIBLE_PASSWORD

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

ASK_BECOME_PASS

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

VERBOSE

Уровень детализации логирования (0-4). По умолчанию установлен минимальный уровень детализации (0).

Пример запуска с переменными окружения:

ANSIBLE_USER=username ANSIBLE_PASSWORD=password ./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

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

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

kubectl get nodes

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

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

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