Init
This commit is contained in:
@@ -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`
|
||||
|
||||
##### Скрин со списком виртуальных машин:
|
||||

|
||||
|
||||
##### Скрин с настройками статики для сети в 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 для узлов кластера
|
||||
### Общий патч для установки ОС на диск:
|
||||
```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
|
||||
```
|
||||
Reference in New Issue
Block a user