Skip to content

Быстрый старт

Предварительная подготовка

  • Установите talosctl и kubectl на рабочее место администратора.
  • Обеспечьте доступ к сети: вашим компьютерам потребуется доступ в интернет для загрузки установщика ALT Orchestra и образов контейнеров, синхронизация времени и прочее. Или настройте контур в локальной сети без доступа к интернету, но доступностью между узлами.

Подготовка образа

Сгенерируйте образ с помощью генератора образов с необходимыми архитектурными параметрами для вашей среды развертывания. В случае настройки контура без доступа в интернет, расположите образы в локальном хранилище с учетом выбранного вами варианта установки (ISO/IPXE).

Запустите узлы

С помощью подготовленного образа первоначальной загрузки запустите все узлы control plane и worker. После загрузки системы с образа ISO вы увидите панель управления ALT Orchestra.

Примечание: образ ISO полностью работает в оперативной памяти и не будет изменять ваши диски, пока вы не примените конфигурацию.

Сохраните IP-адреса узлов

Скопируйте IP-адрес, отображаемый на консоли каждого созданного control plane и worker узла, и сохраните в переменных окружения рабочего места администратора. В данной статье рассматривается упрощенный вариант кластера с одним control plane узлом.

Примечание: в общем случае, control plane узлов может быть больше, но с учетом выполнения условия кворума.

console
$ CONTROL_PLANE_IP="<control-plane-ip-1>"
$ WORKER_IP=("<worker-ip-1>" "<worker-ip-2>" "<worker-ip-3>"...)

Или создайте рабочую директорию myTalosCluster1, в ней создайте файл с переменными окружения и выполните его.

Примечание: в качестве CLUSTER_ENDPOINT может быть выбран один из control plane узлов. В рассматриваемом в рамках данной статьи примере один control plane узел, который будет также в роли CLUSTER_ENDPOINT. Отказоустойчивые варианты настройки можно узнать в статье о конечной точке доступа Kubernetes API.

console
# ./myTalosCluster1/.env
# IP-адреса ВМ
CONTROL_PLANE_IP="<control-plane-ip-1>"
WORKER_IP=("<worker-ip-1>" "<worker-ip-2>" "<worker-ip-3>" ...)
CLUSTER_ENDPOINT=<endpoint-ip> # IP, по которому будет доступно Kubernetes API кластера
# Название кластера
CLUSTER_NAME="myClusterName"
BASE_REGISTRY="factory.altlinux.space"
console
$ source .env

Получение информации об узлах

Для дальнейшего применения конфигурации кластера на узлах необходимо для каждого узла узнать список дисков и интерфейсов:

console
$ talosctl get discoveredvolume --insecure --nodes <node-ip-address>
$ talosctl get links --insecure --nodes <node-ip-address>

Генерация конфигурации

Сгенерируйте секрет в рабочей директории ./myTalosCluster1:

console
$ talosctl gen secrets -o secrets.yaml

Сгенерируйте конфигурацию узлов кластера с указанием версии, подготовленной ранее:

console
$ talosctl gen config --with-secrets secrets.yaml $CLUSTER_NAME https://$CLUSTER_ENDPOINT:6443 --talos-version <TALOS_VERSION> --install-image <IMAGE_LINK> --kubernetes-version <KUBE_VERSION>
  • --talos-version - версия пакета talos, в соответствии с которой будет сгенерирован актуальный конфиг. Если версия talosctl совпадает с версией пакета talos в устанавливаемом образе на узле (можно проверить по матрице поддержки или командой talosctl get version -n <IP>), то данный параметр можно опустить, иначе укажите соответствующую версию пакета (по умолчанию будет указана версия talosctl)
  • --install-image - сгенерированная на начальном этапе ссылка на образ инсталятора (по умолчанию "altlinux.space/alt-orchestra/installer:<LAST_VERSION>")
  • --kubernetes-version - версия kubernetes из списка удовлетворяющих матрице поддержки

В результате выполнения команды получаем файлы в рабочей директории controlplane.yaml, worker.yaml, talosconfig. Если планируемые настройки не будут отличаться для каждого controlplane и worker узла (диски, интефейсы, кастомные hostname и т.д.), то внесите нужные изменения в controlplane.yaml и worker.yaml и перейдите к шагу применения конфига к узлам.

Иначе, если планируемые настройки будут отличаться для каждого controlplane и worker узла:

  • Создайте в рабочем каталоге директории ./talos/controlplanes/ и ./talos/workers/. Скопируйте в данные директории конфиг для каждого узла:
text
├── talos
│   ├── controlplanes
│   │   └── controlplane-1.yaml
│   └── workers
│       ├── worker-1.yaml
│       ├── worker-2.yaml
│       └── worker-3.yaml
  • Или создайте патчи для каждого узла с настройкой ранее полученных дисков и интерфейсов.
yaml
# ./myTalosCluster1/controlplane-patch-1.yaml
machine:
  network:
    interfaces:
      - interface: <control-plane-network-interface>
        dhcp: true
  install:
    disk: /dev/<control-plane-disk-name>
yaml
# ./myTalosCluster1/worker-patch-1.yaml
machine:
  network:
    interfaces:
      - interface: <worker-network-interface>
        dhcp: true
  install:
    disk: /dev/<worker-disk-name>
  • Примените патчи:
console
$ talosctl machineconfig patch controlplane.yaml --patch @controlplane-patch-1.yaml --output talos/controlplanes/controlplane-1.yaml
$ talosctl machineconfig patch worker.yaml --patch @worker-patch-1.yaml --output talos/workers/worker-1.yaml

В результирующих файлах в каталоге ./talos проверьте и отредактируйте при необходимости нужные поля:

  • Задайте hostname с учетом уникальности для каждого узла в конце файла. Вы можете оставить автоматическое присвоение имени, либо убрать настройку auto и указать hostname
yaml
---
...
kind: HostnameConfig
auto: stable # A method to automatically generate a hostname for the machine.
 
# # A static hostname to set for the machine.
# hostname: controlplane1
  • Проверьте правильность имени указанного интерфейса для узла
yaml
machine:
  network:
    interfaces:
    - interface: <eth0>
  • Проверьте правильность указанного диска для узла
yaml
install:
  disk: /dev/sda # Диск для инфталяции на узле.
  • Для conrtol plane конфига: Проверьте ссылку на образ инсталятора, она должна совпадать с раннее сгенерированной вами на первом шаге
yaml
install:
   image: altlinux.space/alt-orchestra/installer:v11.0 # altlinux.space/alt-orchestra/installer:v11.0
  • Для conrtol plane конфига: Проверьте правильность образа, ветки и версии kubernetes с учетом матрицы поддержки
yaml
apiServer:
  image: registry.altlinux.org/sisyphus/kube-apiserver:<KUBE_VERSION>
...
controllerManager:
  image: registry.altlinux.org/sisyphus/kube-controller-manager:<KUBE_VERSION>
proxy:
  image: registry.altlinux.org/sisyphus/kube-proxy:<KUBE_VERSION>
scheduler:
  image: registry.altlinux.org/sisyphus/kube-scheduler:<KUBE_VERSION>
kubelet:
  image: registry.altlinux.org/sisyphus/kubelet:<KUBE_VERSION>

Применяем подготовленные конфиги

Инициализируйте каждую ноду, применив подготовленный конфиг:

console
$ talosctl apply-config --insecure -n <NODE_IP> -f talos/controlplanes/controlplane-1.yaml

Объедините только что созданный talosconfig-файл с файлом ~/.talos/config, где хранятся конфигурации всех кластеров talos, к управлению которыми у вас есть доступ:

console
$ talosctl config merge ./talosconfig

Сообщите вашему конфигурационному файлу об endpoints вашего нового кластера:

console
$ talosctl config endpoint <control_plane_IP_1>

Результат после выполнения можно увидеть в файле ~/.talos/config:

yaml
contexts:
    myClusterName:
        endpoints:
            - <control_plane_IP_1>

Далее следует дождаться завершения работы инсталятора не нодах, успешных результат будет виден на панели управления каждого узла (установятся параметры тип, имя, версия kubernetes, статусы изменятся на ready/healthy). Данные процесс может занять некоторое время. Логи процесса можно отслуживать непосредственно на панели управления узла или получить логи на рабочем месте администратора командой:

console
$ talosctl dmesg -n <NODE_IP>

Когда узлы сконфигурированы

Выполните инициализацию кластера etcd, запустив следующую команду:

console
$ talosctl bootstrap --nodes $CLUSTER_ENDPOINT --talosconfig=./talosconfig --endpoints $CLUSTER_ENDPOINT

Интегрируйте свой новый кластер в локальную конфигурацию Kubernetes:

console
$ talosctl kubeconfig --nodes $CLUSTER_ENDPOINT --talosconfig=./talosconfig

При управлении несколькими кластерами проверьте текущий контекст. Весь список доступных кластеров можно посмотреть в ~/.kube/config:

console
$ kubectl config current-context

Убедитесь, что ваши узлы зарегистрированы в Kubernetes в текущем контексте:

console
$ kubectl get nodes

Или с указанием контекста:

console
$ kubectl get nodes --context <CONTEXT_NAME> -o wide

Опубликовано под лицензией GPL-3.0+. Содержание доступно по лицензии CC BY-SA 4.0, если не указано иное. Разработано участниками ALT Orchestra.