Установка кластера Kubernetes с помощью Kubespray
|
Это руководство описывает процесс офлайн-установки кластера Kubernetes с использованием автономного установщика на базе Kubespray. Офлайн-установка Kubernetes для основного экземпляра системы поддерживается для следующих операционных систем:
Для сателлитов поддерживается офлайн-установка кластера K0s на любых операционных системах семейства Linux. Для установки в окружении других ОС с использованием подключения к Интернету обратитесь к разделу Установка кластера Kubernetes вручную. |
Установку кластера можно производить как на master-узле кластера, так и на АРМ администратора — отдельном узле, имеющем сетевой доступ к узлам кластера.
Подготовка файлов установщика
Подготовка файлов установщика состоит из следующих этапов:
Скачивание архива установщика
Для установки необходимо скачать архив установщика Kubernetes из файлового хранилища R-Vision:
-
для РЕД ОС —
kubespray-installer-redos.tar.gz; -
для Debian —
kubespray-installer-debian.tar.gz; -
для Platform V SberLinux OS —
kubespray-installer-sberlinux.tar.gz; -
для Rocky Linux —
kubespray-installer-rocky.tar.gz; -
для Ubuntu —
kubespray-installer-ubuntu.tar.gz; -
для установки K0s в кластере сателлита —
k0s-installer.run.
|
Если у вас есть скачанный установщик системы, архивы можно загрузить из его меню. Для этого:
|
Архив с установочным файлом необходимо загрузить во временную директорию /tmp.
Распаковка архива
Выполните следующие шаги:
-
Загрузите архив установщика 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).
Все дальнейшие действия выполняются на узле, на котором будет производиться установка. -
-
Если вы используете архив установщика 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, выполнив следующие действия на каждом узле кластера:
-
В каталоге
/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 -
Сохраните файл.
-
Примените изменения с помощью следующей команды:
sudo sysctl --system
Настройка доменных имен узлов кластера
В процессе установки Kubespray автоматически изменяет доменную зону worker-узлов (часть доменного имени без имени хоста) на доменную зону первого master-узла в файле инвентаризации. Если имя хоста worker-узла совпадает с таковым у master-узла, после изменения доменной зоны полные доменные имена (FQDN) master- и worker-узла совпадут и установка завершится некорректно.
|
Пример:
В процессе установки FQDN worker-узла изменится на |
Для корректной установки узлам требуется присвоить FQDN, имеющие единую доменную зону, но различные имена хостов. В примере выше:
-
FQDN master-узла —
master.siem.local; -
FQDN worker-узла —
worker.siem.local.
Чтобы проверить и при необходимости изменить доменные имена узлов кластера, выполните следующие действия для каждого из них:
-
Получите доменное имя узла кластера, выполнив следующую команду:
hostname -f -
Если имя хоста worker-узла совпадает с именем хоста master-узла, измените FQDN worker-узла, измените FQDN:
-
Если на узле установлена утилита
hostnamectl:-
Измените FQDN с помощью
hostnamectl:sudo hostnamectl set-hostname <new_fqdn>Здесь:
-
<new_fqdn>— новое FQDN узла.
-
-
Перезапустите узел.
-
-
Если на узле не установлена утилита
hostnamectl:-
Измените FQDN с помощью
hostname:sudo hostname <new_fqdn>Здесь:
-
<new_fqdn>— новое FQDN узла.
Данная команда изменит FQDN узла только до перезагрузки, поэтому также необходимо выполнить последующие шаги. -
-
Измените FQDN в файле
/etc/hostname:sudo nano /etc/hostname -
Измените FQDN в файле
/etc/hosts:sudo nano /etc/hosts
-
-
Настройка SSH-доступа
Проверьте возможность подключения по SSH-ключу к каждому узлу кластера:
ssh <FQDN>
Здесь:
-
<FQDN>— FQDN текущего узла.
|
Чтобы узнать FQDN текущего узла, выполните следующую команду:
|
|
Убедитесь, что FQDN узла разрешается в IP-адрес. Это можно проверить, например, с помощью утилиты nslookup:
Здесь:
Установка 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 приведены в разделе Устранение проблем при эксплуатации системы. |
Чтобы включить шифрование трафика между узлами кластера, выполните следующие действия:
-
Убедитесь что на всех узлах кластера открыт порт 51820.
-
Подключитесь к терминалу узла, на котором распакован архив установщика.
-
Перейдите в каталог, в котором распакован архив установщика.
-
Добавьте параметр
calico_wireguard_enabled: trueв файлcustom_variables.yml. Например, это можно сделать с помощью следующей команды:echo "calico_wireguard_enabled: true" >> custom_variables.yml
Запуск скрипта установки
Скрипт принимает следующие переменные окружения:
| Переменная | Описание |
|---|---|
|
Пользователь для подключения к узлам по SSH. Обязательная переменная. |
|
Пароль для подключения к узлам по SSH. Обязательная переменная. |
|
Запрос пароля для подключения к узлам по SSH. Если необходимо запросить пароль, укажите |
|
Запрос пароля для повышения привилегий до sudo. Если необходимо запросить пароль, укажите |
|
Уровень детализации логирования. Допустимые значения: целые числа По умолчанию: Если передано любое недопустимое значение, устанавливается значение |
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. Чтобы отключить интерактивность скрипта установки, необходимо сразу передать эти данные при его запуске с помощью следующих переменных окружения:
| Переменная | Описание |
|---|---|
|
Список FQDN master-узлов через пробел. |
|
Список FQDN worker-узлов через пробел. |
|
Путь к директории с данными 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, значит, кластер успешно развернут. -
Если вы включали шифрование трафика между узлами кластера, убедитесь, что оно работает:
-
Чтобы отслеживать статус WireGuard, установите утилиту wg с помощью менеджера пакетов вашей операционной системы, например:
sudo dnf install -y yq wireguard-tools -
Проверьте, что в информации об узлах 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 -
Проверьте, что утилита wg возвращает информацию о конфигурации, с помощью следующих команд:
sudo wg showsudo wg showconf wireguard.cali
-
|
В Calico процесс обновления ключей WireGuard полностью автоматизирован и не требует ручных действий. Он встроен в работу компонента Felix на каждом узле кластера. Описание алгоритма обновления ключей приведено в разделе Обновление ключей WireGuard. |
Была ли полезна эта страница?
