Использование скрипта talos-bootstrap для инициализации кластера Cozystack

talos-bootstrap — CLI для пошаговой инициализации кластера, созданный разработчиками Cozystack.
Рекомендуется для первых развертываний.

talos-bootstrap — интерактивный скрипт для инициализации кластеров Kubernetes на Talos OS.

Он был создан разработчиками Cozystack, чтобы упростить установку Talos Linux на bare-metal узлы и сделать ее удобнее.

1. Установка зависимостей

Установите следующие зависимости:

  • talosctl
  • dialog
  • nmap

Скачайте последнюю версию talos-bootstrap со страницы релизов или напрямую из trunk:

curl -fsSL -o /usr/local/bin/talos-bootstrap \
    https://github.com/cozystack/talos-bootstrap/raw/master/talos-bootstrap
chmod +x /usr/local/bin/talos-bootstrap
talos-bootstrap --help

2. Подготовка конфигурационных файлов

  1. Начните с создания каталога конфигурации для нового кластера:

    mkdir -p cluster1
    cd cluster1
    
  2. Создайте файл конфигурационного patch patch.yaml с общими настройками узлов, используя следующий пример:

    machine:
      kubelet:
        nodeIP:
          validSubnets:
          - 192.168.100.0/24
        extraConfig:
          maxPods: 512
      sysctls:
        net.ipv4.neigh.default.gc_thresh1: "4096"
        net.ipv4.neigh.default.gc_thresh2: "8192"
        net.ipv4.neigh.default.gc_thresh3: "16384"
      kernel:
        modules:
        - name: openvswitch
        - name: drbd
          parameters:
            - usermode_helper=disabled
        - name: zfs
        - name: spl
        - name: vfio_pci
        - name: vfio_iommu_type1
      install:
        image: ghcr.io/cozystack/cozystack/talos:v1.13.0
      registries:
        mirrors:
          docker.io:
            endpoints:
            - https://mirror.gcr.io
      files:
      - content: |
          [plugins]
            [plugins."io.containerd.grpc.v1.cri"]
              device_ownership_from_security_context = true
            [plugins."io.containerd.cri.v1.runtime"]
              device_ownership_from_security_context = true
        path: /etc/cri/conf.d/20-customization.part
        op: create
      - op: overwrite
        path: /etc/lvm/lvm.conf
        permissions: 0o644
        content: |
          backup {
            backup = 0
            archive = 0
          }
          devices {
            global_filter = [ "r|^/dev/drbd.*|", "r|^/dev/dm-.*|", "r|^/dev/zd.*|" ]
          }
    
    cluster:
      network:
        cni:
          name: none
        dnsDomain: cozy.local
        podSubnets:
        - 10.244.0.0/16
        serviceSubnets:
        - 10.96.0.0/16
    
  3. Создайте еще один файл конфигурационного patch patch-controlplane.yaml с настройками, которые относятся только к узлам control plane:

    machine:
      nodeLabels:
        node.kubernetes.io/exclude-from-external-load-balancers:
          $patch: delete
    cluster:
      allowSchedulingOnControlPlanes: true
      controllerManager:
        extraArgs:
          bind-address: 0.0.0.0
      scheduler:
        extraArgs:
          bind-address: 0.0.0.0
      apiServer:
        certSANs:
        - 127.0.0.1
      proxy:
        disabled: true
      discovery:
        enabled: false
      etcd:
        advertisedSubnets:
        - 192.168.100.0/24
    
  4. Чтобы настроить Keycloak как OIDC-провайдера, добавьте следующий раздел в patch-controlplane.yaml, заменив example.com на свой домен:

    cluster:
      apiServer:
        extraArgs:
        oidc-issuer-url: "https://keycloak.example.com/realms/cozy"
        oidc-client-id: "kubernetes"
        oidc-username-claim: "preferred_username"
        oidc-groups-claim: "groups"
    

3. Инициализация и доступ к кластеру

Когда конфигурационные файлы будут готовы, запустите talos-bootstrap на каждом узле кластера:

# в каталоге конфигурации кластера
talos-bootstrap install

Повторите этот шаг для остальных узлов кластера.

После завершения команды install talos-bootstrap сохранит конфигурацию кластера как ./kubeconfig.

Настройте kubectl на использование новой конфигурации, экспортировав переменную KUBECONFIG:

export KUBECONFIG=$PWD/kubeconfig

Проверьте, что кластер доступен с новым kubeconfig:

kubectl get ns

Пример вывода:

NAME              STATUS   AGE
default           Active   7m56s
kube-node-lease   Active   7m56s
kube-public       Active   7m56s
kube-system       Active   7m56s

Следующие шаги

Теперь у вас есть инициализированный кластер Kubernetes, готовый к установке Cozystack. Чтобы завершить установку, следуйте руководству по развертыванию, начиная с раздела Установка Cozystack.

Last modified 2026-05-24: feat: migrate to 1.4 (0c5a079)