This commit is contained in:
2026-08-02 17:00:11 +03:00
commit f3a51d1681
21 changed files with 1333 additions and 0 deletions
+290
View File
@@ -0,0 +1,290 @@
# Подготовка к развороту кластера
## Подготовка schematic.yaml для генерации образа через публичный/приватный Image Factory
```yaml
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 публичного factory
##### В ответ прилетит JSON с ID образа и информацией об установленных расширениях:
```json
{
"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](/img/pve-vms.png)
##### Скрин с настройками статики для сети в maintenance mode:
![net](/img/talos-net.png)
По аналогии настройки сети нужно провести для всех виртуальных машин.
# Сборка кластера
Сейчас узлы запущены в 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 для узлов кластера
### Общий патч для установки ОС на диск:
```yaml
machine:
install:
disk: /dev/sda
image: factory.talos.dev/installer/c0ad57b8eb60094dd2ebed394ae5e9dfb279c7661d6c1de5944ede4c16cbfc9d:v1.13.7
```
#### Патч указывает на образ, который будет установлен на диск `/dev/sda`
### Общие патчи для мастер и воркер нод с зависимостью от дополнительного диска:
- #### patch-controlplane.yaml
```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
```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
```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 для корректной работы
### Патч для настроек сети, в качестве примера показан только для одного из мастеров, по аналогии сделаны для всех узлов
```yaml
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 для всех узлов кластера с патчами
```sh
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`
#### Проверить, что кластер подает признаки жизни командами
```sh
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:
```sh
talosctl kubeconfig ./kubeconfig -n 10.255.200.201 -e 10.255.200.201
export KUBECONFIG=$(pwd)/kubeconfig
```
### Установка CNI cilium в кластер через helm
#### cilium-values.yaml
```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:
```sh
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
```
#### Проверить доступность узлов кластера:
```sh
kubectl get node
```