10 KiB
10 KiB
Подготовка к развороту кластера
Подготовка 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- утилиты для работы с сетевыми дисками по протоколу iscsisiderolabs/nfs-utils- утилиты для монтирования фс по протоколу nfssiderolabs/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.20110.255.200.20210.255.200.203
Для воркеров будут закреплены IP:
10.255.200.20410.255.200.20510.255.200,20610.255.200.20710.255.200.20810.255.200.209
Скрин со списком виртуальных машин:
Скрин с настройками статики для сети в maintenance mode:
По аналогии настройки сети нужно провести для всех виртуальных машин.
Сборка кластера
Сейчас узлы запущены в 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
