mirror of
https://github.com/batonogov/learn-devops.git
synced 2025-11-29 00:33:02 +00:00
Добавлена конфигурация для 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:
committed by
GitHub
parent
0c4f496270
commit
3024073a96
9
.gitignore
vendored
9
.gitignore
vendored
@@ -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
|
||||
|
||||
130
talos/README.md
130
talos/README.md
@@ -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
7
talos/cilium/ippool.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
apiVersion: cilium.io/v2alpha1
|
||||
kind: CiliumLoadBalancerIPPool
|
||||
metadata:
|
||||
name: pool
|
||||
spec:
|
||||
blocks:
|
||||
- cidr: 172.16.61.20/32
|
||||
16
talos/cilium/l2-announcement-policy.yaml
Normal file
16
talos/cilium/l2-announcement-policy.yaml
Normal 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
|
||||
@@ -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
13
talos/cp0.patch
Normal 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
13
talos/cp1.patch
Normal 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
13
talos/cp2.patch
Normal 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
|
||||
@@ -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
11
talos/traefik/values.yaml
Normal 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
11
talos/worker0.patch
Normal 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
11
talos/worker1.patch
Normal 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
11
talos/worker2.patch
Normal 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
|
||||
Reference in New Issue
Block a user