chore: rewrite, add longhorn
This commit is contained in:
@@ -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).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user