chore: rewrite, add longhorn

This commit is contained in:
2026-08-04 22:34:32 +03:00
parent 04fe026b82
commit 4d783b2305
20 changed files with 258 additions and 61 deletions
+44 -12
View File
@@ -54,6 +54,9 @@ customization:
- `siderolabs/qemu-guest-agent` - гостевой агент для виртуальных машин, запущенных в среде QEMU/KVM (тестовый кластер разворачивается в Proxmox VE)
- `siderolabs/util-linux-tools` - набор низкоуровневых утилит Linux, нужен для диагностики и для некоторых CSI драйверов
##### Дополнительные аргументы ядра:
- `net.ifnames=0` - отключает predictable naming сетевых интерфейсов (имена вида `enp6s18`), интерфейсы получают классические имена `eth0`, `eth1` и т.д.
## Отправка schematic.yaml в сторону Image Factory, получение ID образа и скачивание образа
#### Следующая команда отправляет файл в сторону Image Factory:
`curl -X POST --data-binary @schematics/schematic.yaml https://factory.talos.dev/schematics`
@@ -64,15 +67,15 @@ customization:
##### В ответ прилетит JSON с ID образа и информацией об установленных расширениях:
```json
{
"id": "c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d",
"id": "e142ceb080fb243141b5b6891cfcf0c60bc9430d69be0adf803999d2b62dc885",
"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 - siderolabs/util-linux-tools\n"
}
```
##### Скачать образ можно командой:
`curl -L -o images/metal-amd64.iso "https://factory.talos.dev/image/c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d/v1.13.7/metal-amd64.iso"`
`curl -L -o images/metal-amd64.iso "https://factory.talos.dev/image/e142ceb080fb243141b5b6891cfcf0c60bc9430d69be0adf803999d2b62dc885/v1.13.7/metal-amd64.iso"`
- `c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d` - ID, полученный в ответе ранее
- `e142ceb080fb243141b5b6891cfcf0c60bc9430d69be0adf803999d2b62dc885` - ID, полученный в ответе ранее
- `metal-amd64.iso` - образ для bare metal и виртуальных машин без поддержки cloud-init
## Подготовка виртуальных машин
@@ -145,7 +148,7 @@ Created test-cluster/talosconfig
machine:
install:
disk: /dev/sda
image: factory.talos.dev/installer/c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d:v1.13.7
image: factory.talos.dev/installer/e142ceb080fb243141b5b6891cfcf0c60bc9430d69be0adf803999d2b62dc885:v1.13.7
```
#### Патч указывает на образ, который будет установлен на диск `/dev/sda`
@@ -157,7 +160,7 @@ machine:
kubespan:
enabled: true
mtu: 1420
advertiseKubernetesNetworks: true
advertiseKubernetesNetworks: false
cluster:
discovery:
enabled: true
@@ -170,6 +173,9 @@ cluster:
- #### patch-worker-with-disk.yaml
```yaml
machine:
kernel:
modules:
- name: iscsi_tcp
disks:
- device: /dev/sdb
partitions:
@@ -187,7 +193,7 @@ machine:
kubespan:
enabled: true
mtu: 1420
advertiseKubernetesNetworks: true
advertiseKubernetesNetworks: false
cluster:
discovery:
enabled: true
@@ -204,7 +210,7 @@ machine:
kubespan:
enabled: true
mtu: 1420
advertiseKubernetesNetworks: true
advertiseKubernetesNetworks: false
cluster:
discovery:
enabled: true
@@ -217,15 +223,17 @@ cluster:
#### В патчах для мастер- и воркер-нод заданы настройки для:
- Kubespan - настройка wireguard mesh сети между узлами кластера
- Отключение kube-proxy и установки дефолтного CNI (Flannel)
- Для нод с доп диском дополнительно загружается модуль ядра `iscsi_tcp` - он нужен Longhorn для подключения томов по iSCSI
- Для нод с доп диском описано монтирование доп диска и проброс его в контейнер kubelet для корректной работы
- Точка монтирования `/var/lib/longhorn` подготовлена под будущую установку Longhorn CSI; сама установка и настройка Longhorn в этом документе не описывается
- Точка монтирования `/var/lib/longhorn` подготовлена под будущую установку Longhorn CSI; установка и настройка Longhorn описаны в отдельном документе - [README_LONGHORN.md](README_LONGHORN.md)
### Патч для настроек сети - в качестве примера показан только для одного из мастеров, по аналогии такие патчи сделаны для всех узлов
```yaml
machine:
network:
interfaces:
- interface: eth0
- deviceSelector:
hardwareAddr: "bc:24:11:80:a1:9b"
addresses:
- 10.255.200.201/24
routes:
@@ -235,6 +243,18 @@ machine:
nameservers:
- 9.9.9.9
```
Интерфейс выбирается через `deviceSelector` по MAC-адресу (`hardwareAddr`), а не по имени (`eth0`) - привязка к MAC не зависит от порядка обнаружения интерфейсов и не сломается при добавлении/замене сетевых карт. MAC-адрес каждой виртуальной машины можно посмотреть в настройках сетевого устройства в Proxmox VE.
##### Получение MAC-адреса через talosctl:
Пока узел работает в maintenance mode, MAC-адреса его интерфейсов можно узнать напрямую через API Talos (столбец `HW ADDR` в выводе):
```sh
talosctl get links -n 10.255.200.201 --insecure
```
На уже настроенном узле команда та же, но без `--insecure` и с указанием эндпоинта:
```sh
talosctl get links -n 10.255.200.201 -e 10.255.200.201
```
Вывод содержит все интерфейсы, включая служебные (`lo`, `kubespan`, `siderolink` и т.д.) - нужен физический интерфейс типа `ether` (обычно `eth0`).
## Применение конфигурации к узлам кластера
#### Экспорт переменной TALOSCONFIG для работы с talosctl:
@@ -275,8 +295,8 @@ export KUBECONFIG=$(pwd)/kubeconfig
ipam:
mode: kubernetes
routingMode: native
ipv4NativeRoutingCIDR: 10.244.0.0/16
routingMode: tunnel
tunnelProtocol: vxlan
autoDirectNodeRoutes: false
kubeProxyReplacement: true
@@ -317,8 +337,13 @@ hubble:
ui:
enabled: true
MTU: 1420
MTU: 1370
```
##### Ключевые моменты конфигурации:
- `routingMode: tunnel` + `tunnelProtocol: vxlan` - трафик между подами инкапсулируется в VXLAN
- `kubeProxyReplacement: true` с `k8sServiceHost: localhost` и `k8sServicePort: 7445` - cilium заменяет kube-proxy (он отключен в патчах) и обращается к kube-apiserver через локальный KubePrism-балансировщик Talos на порту 7445
- `cgroup.autoMount.enabled: false` - Talos уже монтирует cgroup fs, повторное монтирование не требуется
- `MTU: 1370` - MTU Kubespan (1420) минус накладные расходы VXLAN-инкапсуляции (50 байт)
#### Подключение репозитория helm для cilium и установка CNI:
```sh
@@ -332,6 +357,13 @@ helm install cilium cilium/cilium --version 1.19.6 --namespace kube-system -f ci
kubectl get node
```
#### Доступ к Hubble UI:
В `cilium-values.yaml` включены Hubble, Hubble Relay и Hubble UI (`hubble.enabled`, `hubble.relay.enabled`, `hubble.ui.enabled`) - web-интерфейс для наблюдения за сетевыми потоками между подами. Наружу UI не опубликован; для доступа можно пробросить порт:
```sh
kubectl -n kube-system port-forward svc/hubble-ui 12000:80
```
После этого UI доступен на `http://localhost:12000` - в нём видна карта сервисов и сетевые потоки в реальном времени с вердиктами (forwarded/dropped).
## Сброс кластера
##### Внимание: операция необратима и стирает данные на диске узла, включая установленную ОС и все данные приложений (в т.ч. на дисках под Longhorn).