Добавлена конфигурация для kube-vip и l2 load balancer (#32)

* Добавлена конфигурация для kube-vip и l2 load balancer

* Update gitignore

* Добавлены рабочие узлы

* Добавлены DNS серверы

* Изменены настройки сети

* Update readme

* Update readme

---------

Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
This commit is contained in:
github-actions[bot]
2025-01-14 12:00:19 +03:00
committed by GitHub
parent 0c4f496270
commit 3024073a96
13 changed files with 222 additions and 43 deletions

9
.gitignore vendored
View File

@@ -79,6 +79,9 @@ go.work
.vscode
.DS_Store
ansible/secrets
main
talos/{controlplane,worker}.yaml
talosconfig
talos/controlplane.yaml
talos/worker.yaml
talos/secrets.yaml
talos/talosconfig
talos/cp*.yaml
talos/worker*.yaml

View File

@@ -1,73 +1,114 @@
# Talos
## Что такое Талос?
## Что такое Talos?
Talos - это дистрибутив Linux, оптимизированный для контейнеров;
переосмысление Linux для распределенных систем, таких как Kubernetes.
Разработанный, чтобы быть максимально минимальным, сохраняя при этом практичность.
По этим причинам Talos имеет ряд уникальных для него особенностей:
[Talos Linux](https://www.talos.dev/) — это **Linux**, разработанный для [Kubernetes](https://kubernetes.io/): безопасный, неизменяемый и минималистичный.
- неизменяесый
- атомарный
- эфимерный
- минималистичный
- по умолчанию он безопасен
- управляется с помощью одного декларативного файла конфигурации и gRPC API
- Talos может быть развернут в контейнерных, облачных, виртуализированных и голых металлических платформах.
- Поддерживает **облачные платформы, «голое железо» и платформы виртуализации**
- Все **управление системой осуществляется через API**. Нет SSH, оболочки или консоли
- Готовность к работе: **поддерживает одни из крупнейших Kubernetes-кластеров в мире**
- Проект с открытым исходным кодом от команды [Sidero Labs](https://www.siderolabs.com/)
## Почему Талос
## Почему Talos
Имея меньше, Талос предлагает больше. Безопасность. Эффективность. Устойчивость. Последовательность.
Имея меньше, Talos предлагает больше: безопасность, эффективность, устойчивость, согласованность.
Все эти области улучшаются просто за счет того, что у них меньше.
Все эти аспекты улучшаются благодаря простоте и минимализму.
## Загрузка Talos на голом металле с ISO
## Загрузка Talos на физический сервер с использованием ISO
Talos не устанавливается на диск при загрузке из ISO до тех пор, пока не будет применена конфигурация машины.
Talos может быть установлен на физическую машину с использованием ISO-образа. ISO-образы для архитектур amd64 и arm64 доступны на [странице релизов Talos](https://github.com/siderolabs/talos/releases/).
## Настройка Talos Linux
Talos не устанавливается на диск при загрузке с ISO до тех пор, пока не будет применена конфигурация машины.
Определяем переменную с IP адресом Control Plane узла:
Пожалуйста, следуйте [руководству по началу работы](https://www.talos.dev/v1.9/introduction/getting-started/) для выполнения общих шагов по установке Talos.
Примечание: Если на диске уже установлена Talos, при загрузке с ISO Talos загрузится с этой установленной версии.
Порядок загрузки должен отдавать предпочтение диску перед ISO, либо ISO должно быть удалено после установки, чтобы Talos загружался с диска.
Ознакомьтесь со справочником по [параметрам ядра](https://www.talos.dev/v1.9/reference/kernel/) для списка поддерживаемых Talos параметров ядра.
Доступны два типа ISO-образов:
- metal-arch.iso: поддерживает загрузку на системах с BIOS и UEFI (для x86), только UEFI для arm64.
- metal-arch-secureboot.iso: поддерживает загрузку только на системах с UEFI в режиме SecureBoot (создано с помощью [Image Factory](https://www.talos.dev/v1.9/learn-more/image-factory/).
## Начало работы
Руководство по настройке кластера Talos Linux.
Этот документ проведет вас через процесс установки простого кластера Talos, а также объяснит некоторые ключевые концепции.
Независимо от того, где вы запускаете Talos, этапы создания Kubernetes-кластера включают:
1. Загрузка машин с образа Talos Linux.
2. Определение конечной точки API Kubernetes и создание конфигурации машин.
3. Настройка Talos Linux путем применения конфигураций машин.
4. Настройка `talosctl`.
5. Запуск Kubernetes.
## Производственный кластер
Для высокодоступного Kubernetes-кластера в продакшене рекомендуется использовать три узла плоскости управления.
Использование пяти узлов может обеспечить большую устойчивость к сбоям,
но также приводит к большему количеству операций репликации и может отрицательно сказаться на производительности.
### Layer 2 VIP (общий IP-адрес)
Talos имеет встроенную поддержку работы Kubernetes через общий/виртуальный IP-адрес.
Для этого требуется соединение уровня 2 (Layer 2) между узлами управляющей плоскости.
Выберите неиспользуемый IP-адрес в той же подсети, что и узлы плоскости управления, для использования в качестве VIP.
(Убедитесь, что выделенный адрес не используется другими устройствами и исключен из диапазона DHCP.)
### Выделение секретов
При создании конфигурационных файлов для кластера Talos Linux рекомендуется начать с генерации файлы с секретами,
который должен быть сохранен в безопасном месте.
Этот файл можно использовать для генерации конфигураций машин или клиентов в любое время:
```sh
export TALOS_CONTROL_PLANE_IP=192.168.1.48
talosctl gen secrets -o secrets.yaml
```
Вот так можно посмотреть список дисков на узле:
### Запускаем Talos
Теперь мы можем создать общую конфигурацию машин:
```sh
talosctl -n $TALOS_CONTROL_PLANE_IP get disks --insecure
talosctl gen config --kubernetes-version 1.31.4 --with-secrets secrets.yaml my-cluster https://172.16.61.10:6443 --config-patch @patch.yaml
```
Генерируем конфиг
Создаем конфигурацию для каждого узла:
```sh
talosctl gen config --kubernetes-version 1.32.0 talos https://$TALOS_CONTROL_PLANE_IP:6443 --config-patch @patch.yaml
talosctl machineconfig patch controlplane.yaml --patch @cp0.patch --output cp0.yaml
talosctl machineconfig patch controlplane.yaml --patch @cp1.patch --output cp1.yaml
talosctl machineconfig patch controlplane.yaml --patch @cp2.patch --output cp2.yaml
talosctl machineconfig patch worker.yaml --patch @worker0.patch --output worker0.yaml
talosctl machineconfig patch worker.yaml --patch @worker1.patch --output worker1.yaml
talosctl machineconfig patch worker.yaml --patch @worker2.patch --output worker2.yaml
```
Применяем конфигурацию
```sh
talosctl apply-config --insecure -n $TALOS_CONTROL_PLANE_IP --file ./controlplane.yaml
talosctl apply-config --insecure -n 172.16.61.144 --file ./cp0.yaml
talosctl apply-config --insecure -n 172.16.61.145 --file ./cp1.yaml
talosctl apply-config --insecure -n 172.16.61.146 --file ./cp2.yaml
talosctl apply-config --insecure -n 172.16.61.147 --file ./worker0.yaml
talosctl apply-config --insecure -n 172.16.61.149 --file ./worker1.yaml
talosctl apply-config --insecure -n 172.16.61.148 --file ./worker2.yaml
```
После перезапуска Controls Plane узла необходимо инициализировать etcd:
```sh
talosctl bootstrap --nodes $TALOS_CONTROL_PLANE_IP --endpoints $TALOS_CONTROL_PLANE_IP --talosconfig=./talosconfig
talosctl bootstrap --nodes 172.16.61.11 --endpoints 172.16.61.11 --talosconfig=./talosconfig
```
Получаем kube config:
```sh
talosctl kubeconfig ~/.kube/config --nodes $TALOS_CONTROL_PLANE_IP --endpoints $TALOS_CONTROL_PLANE_IP --talosconfig ./talosconfig
```
Добавляем рабочий узел:
```sh
export TALOS_WORKER_1_IP=192.168.1.142
talosctl apply-config --insecure -n $TALOS_WORKER_1_IP --file ./worker.yaml
talosctl kubeconfig ~/.kube/config --nodes 172.16.61.10 --endpoints 172.16.61.10 --talosconfig ./talosconfig
```
## Настройка Cilium
@@ -88,7 +129,7 @@ helm upgrade \
cilium/cilium \
--version 1.16.5 \
--namespace kube-system \
--values cilium.yaml
--values cilium/values.yaml
```
## Metrics Server
@@ -102,6 +143,19 @@ helm upgrade \
--set args={--kubelet-insecure-tls}
```
Поднимаем **Traefik Kubernetes Ingress**
```sh
talosctl upgrade-k8s --nodes $TALOS_CONTROL_PLANE_IP --to 1.32.1
helm upgrade \
--install \
--namespace traefik \
--create-namespace \
traefik traefik/traefik \
--values traefik/values.yaml
```
Обновление кластера
```sh
talosctl --nodes 172.16.61.10 upgrade-k8s --to 1.32.0
```

7
talos/cilium/ippool.yaml Normal file
View File

@@ -0,0 +1,7 @@
apiVersion: cilium.io/v2alpha1
kind: CiliumLoadBalancerIPPool
metadata:
name: pool
spec:
blocks:
- cidr: 172.16.61.20/32

View File

@@ -0,0 +1,16 @@
apiVersion: cilium.io/v2alpha1
kind: CiliumL2AnnouncementPolicy
metadata:
name: policy1
spec:
serviceSelector:
matchLabels:
color: blue
nodeSelector:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: DoesNotExist
interfaces:
- ^ens[160-161]+
externalIPs: true
loadBalancerIPs: true

View File

@@ -23,5 +23,17 @@ cgroup:
autoMount:
enabled: false
hostRoot: /sys/fs/cgroup
k8sServiceHost: localhost
k8sServicePort: 7445
k8sServiceHost: 172.16.61.10
k8sServicePort: 6443
l2announcements:
enabled: true
devices: ens+
hubble:
relay:
enabled: true
ui:
enabled: true
ingress:
enabled: true
hosts:
- hubble.test

13
talos/cp0.patch Normal file
View File

@@ -0,0 +1,13 @@
machine:
network:
hostname: cp0
interfaces:
- interface: ens160
dhcp: false
addresses:
- 172.16.61.11/24
vip:
ip: 172.16.61.10
routes:
- network: 0.0.0.0/0
gateway: 172.16.61.2

13
talos/cp1.patch Normal file
View File

@@ -0,0 +1,13 @@
machine:
network:
hostname: cp1
interfaces:
- interface: ens160
dhcp: false
addresses:
- 172.16.61.12/24
vip:
ip: 172.16.61.10
routes:
- network: 0.0.0.0/0
gateway: 172.16.61.2

13
talos/cp2.patch Normal file
View File

@@ -0,0 +1,13 @@
machine:
network:
hostname: cp2
interfaces:
- interface: ens160
dhcp: false
addresses:
- 172.16.61.13/24
vip:
ip: 172.16.61.10
routes:
- network: 0.0.0.0/0
gateway: 172.16.61.2

View File

@@ -1,4 +1,8 @@
machine:
network:
nameservers:
- 77.88.8.8
- 77.88.8.1
install:
disk: /dev/nvme0n1
time:

11
talos/traefik/values.yaml Normal file
View File

@@ -0,0 +1,11 @@
deployment:
kind: DaemonSet
service:
labels:
color: blue
spec:
externalTrafficPolicy: Local
additionalArguments:
- --serversTransport.insecureSkipVerify=true

11
talos/worker0.patch Normal file
View File

@@ -0,0 +1,11 @@
machine:
network:
hostname: worker0
interfaces:
- interface: ens160
dhcp: false
addresses:
- 172.16.61.14/24
routes:
- network: 0.0.0.0/0
gateway: 172.16.61.2

11
talos/worker1.patch Normal file
View File

@@ -0,0 +1,11 @@
machine:
network:
hostname: worker1
interfaces:
- interface: ens160
dhcp: false
addresses:
- 172.16.61.15/24
routes:
- network: 0.0.0.0/0
gateway: 172.16.61.2

11
talos/worker2.patch Normal file
View File

@@ -0,0 +1,11 @@
machine:
network:
hostname: worker2
interfaces:
- interface: ens160
dhcp: false
addresses:
- 172.16.61.16/24
routes:
- network: 0.0.0.0/0
gateway: 172.16.61.2