Files
talos_install/README.md
T
2026-08-02 17:06:01 +03:00

10 KiB
Raw Blame History

Подготовка к развороту кластера

Подготовка schematic.yaml для генерации образа через публичный/приватный Image Factory

customization:
  systemExtensions:
    officialExtensions:
      - siderolabs/iscsi-tools
      - siderolabs/nfs-utils
      - siderolabs/qemu-guest-agent
      - siderolabs/util-linux-tools
  extraKernelArgs:
    - net.ifnames=0
В образ добавляются расширения:
  • siderolabs/iscsi-tools - утилиты для работы с сетевыми дисками по протоколу iscsi
  • siderolabs/nfs-utils - утилиты для монтирования фс по протоколу nfs
  • siderolabs/qemu-guest-agent - гостевой агент для виртуальных машин, запущенных в среде QEMU/KVM (тестовый кластер разворачивается в Proxmox VE)
  • siderolabs/util-linux-tools - набор низкоуровневых утилит Linux, нужен для диагностики и для некоторых CSI драйверов

Отправка schematic.yaml в сторону Image Fabric, получение ID образа и скачивание образа

Следующая команда отправляет файл в сторону Image Fabric:

curl -X POST --data-binary @schematics/schematic.yaml https://factory.talos.dev/schematics

  • --data-binary @schematics/schematic.yaml - передача файла, в данном случае размещен в директории для удобства, но может быть размещен в корне проекта
  • https://factory.talos.dev/schematics - URL публичного Image Fabric
В ответ прилетит JSON с ID образа и информацией об установленных расширениях:
{
  "id": "c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d",
  "schematic": "customization:\n 
  extraKernelArgs:\n 
  - net.ifnames=0\n 
  systemExtensions:\n 
  officialExtensions:\n 
  - siderolabs/iscsi-tools\n 
  - siderolabs/nfs-utils\n 
  - siderolabs/qemu-guest-agent\n"
}
Скачать образ можно командой:

curl -L -o images/metal-amd64.iso "https://factory.talos.dev/image/c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d/v1.13.7/metal-amd64.iso"

  • c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d - ID, полученный в ответе ранее
  • metal-amd64.iso - образ для bare metal и виртуальных машин без поддержки cloud-init

Подготовка виртуальных машин

Будет развернут кластер следующего вида:

  • 3 мастера: 1vcpu, 2G ram, 15G ssd
  • 3 воркера с доп диском под данные: 3vcpu, 6G ram, 15G + 30G ssd
  • 3 воркера без доп дисков: 3vcpu, 6G ram, 15G ssd
Для мастеров будут закреплены IP:
  • 10.255.200.201
  • 10.255.200.202
  • 10.255.200.203
Для воркеров будут закреплены IP:
  • 10.255.200.204
  • 10.255.200.205
  • 10.255.200,206
  • 10.255.200.207
  • 10.255.200.208
  • 10.255.200.209
Скрин со списком виртуальных машин:

vm

Скрин с настройками статики для сети в maintenance mode:

net По аналогии настройки сети нужно провести для всех виртуальных машин.

Сборка кластера

Сейчас узлы запущены в maintenance mode из iso образа и для первичной заливки machineconfig нужно в явном виде указать флаг --insecure

Генерация конфига кластера

talosctl gen config test-cluster https://10.255.200.201:6443 -o ./test-cluster

  • talosctl gen config - команда генерации конфига
  • test-cluster - имя кластера
  • https://10.255.200.201:6443 - эндпоинт, в данном случае первый мастер(может быть адрес/домен балансировщика)
  • -o ./test-cluster - сохранение конфигов для доступа к кластеру
Пример выполнения команды:
generating PKI and tokens
Created test-cluster/controlplane.yaml
Created test-cluster/worker.yaml
Created test-cluster/talosconfig
  • test-cluster/talosconfig - конфиг с секретом для управления узлами после бутстрапа
  • test-cluster/controlplane.yaml - конфигурация для мастер узлов
  • test-cluster/worker.yaml - конфигурация для воркер узлов

Патчи machineconfig для узлов кластера

Общий патч для установки ОС на диск:

machine:
  install:
    disk: /dev/sda
    image: factory.talos.dev/installer/c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d:v1.13.7

Патч указывает на образ, который будет установлен на диск /dev/sda

Общие патчи для мастер и воркер нод с зависимостью от дополнительного диска:

  • patch-controlplane.yaml

machine:
  network:
    kubespan:
      enabled: true
      mtu: 1420
      advertiseKubernetesNetworks: true
cluster:
  discovery:
    enabled: true
  network:
    cni:
      name: none
  proxy:
    disabled: true
  • patch-worker-with-disk.yaml

machine:
  disks:
    - device: /dev/sdb
      partitions:
        - mountpoint: /var/lib/longhorn
  kubelet:
    extraMounts:
      - destination: /var/lib/longhorn
        type: bind
        source: /var/lib/longhorn
        options:
          - bind
          - rshared
          - rw
  network:
    kubespan:
      enabled: true
      mtu: 1420
      advertiseKubernetesNetworks: true
cluster:
  discovery:
    enabled: true
  network:
    cni:
      name: none
  proxy:
    disabled: true
  • patch-worker-without-disk.yaml

machine:
  network:
    kubespan:
      enabled: true
      mtu: 1420
      advertiseKubernetesNetworks: true
cluster:
  discovery:
    enabled: true
  network:
    cni:
      name: none
  proxy:
    disabled: true

В патчах для мастер и воркер нод заданы настройки для:

  • Kubespan - настройка wireguard mesh сети между узлами кластера
  • Отключение kube-proxy и установки дефолтного CNI (Flannel)
  • Для нод с доп диском описано монтирование доп диска и проброс его в контейнер kubelet для корректной работы

Патч для настроек сети, в качестве примера показан только для одного из мастеров, по аналогии сделаны для всех узлов

machine:
  network:
    interfaces:
      - interface: eth0
        addresses:
          - 10.255.200.201/24
        routes:
          - network: 0.0.0.0/0
            gateway: 10.255.200.1
        dhcp: false
    nameservers:
      - 9.9.9.9

Применение конфигурации к узлам кластера

Экспорт переменной TALOSCONFIG для работы с talosctl:

export TALOSCONFIG=$(pwd)/test-cluster/talosconfig

Применение machineconfig для всех узлов кластера с патчами

talosctl apply-config \
--insecure -n 10.255.200.201 \
--file ./test-cluster/controlplane.yaml \
--config-patch @patches/patch-install.yaml \
--config-patch @patches/patch-controlplane.yaml \
--config-patch @patches/patch-net-master-1.yaml

Остальные узлы по аналогии, нужно только указать соответствующие узлу и роли патчи

После применения machineconfig нужно выполинть bootstrap на первом мастере, адрес которого был указан при инициализации конфига

talosctl bootstrap -n 10.255.200.201 -e 10.255.200.201

Проверить, что кластер подает признаки жизни командами

talosctl etcd members -n 10.255.200.201 -e 10.255.200.201
talosctl health -n 10.255.200.201 -e 10.255.200.201
talosctl get members -n 10.255.200.201 -e 10.255.200.201

Получить и добавить в переменную kubeconfig:

talosctl kubeconfig ./kubeconfig -n 10.255.200.201 -e 10.255.200.201
export KUBECONFIG=$(pwd)/kubeconfig

Установка CNI cilium в кластер через helm

cilium-values.yaml

ipam:
  mode: kubernetes

routingMode: native
ipv4NativeRoutingCIDR: 10.244.0.0/16
autoDirectNodeRoutes: false

kubeProxyReplacement: true
k8sServiceHost: localhost
k8sServicePort: 7445

bpf:
  masquerade: true

cgroup:
  autoMount:
    enabled: false
  hostRoot: /sys/fs/cgroup

securityContext:
  capabilities:
    ciliumAgent:
      - CHOWN
      - KILL
      - NET_ADMIN
      - NET_RAW
      - IPC_LOCK
      - SYS_ADMIN
      - SYS_RESOURCE
      - DAC_OVERRIDE
      - FOWNER
      - SETGID
      - SETUID
    cleanCiliumState:
      - NET_ADMIN
      - SYS_ADMIN
      - SYS_RESOURCE

hubble:
  enabled: true
  relay:
    enabled: true
  ui:
    enabled: true

MTU: 1420

Подключение репозитория helm для cilium и установка CNI:

helm repo add cilium https://helm.cilium.io/
helm repo update cilium
helm install cilium cilium/cilium --version 1.19.6 --namespace kube-system -f cilium-values.yaml

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

kubectl get node