ec321d8e8a307cf09d7566e16dd1c457e911b215
Terraform Proxmox Talos Cluster
Infrastructure as Code для развертывания Kubernetes кластера на базе Talos OS в Proxmox VE с использованием Cilium CNI.
Архитектура
- Control Planes: 1 нода (talos-cp-1)
- Workers: 2 ноды (talos-worker-1, talos-worker-2)
- CNI: Cilium с L2 Announcements
- Версия Talos: 1.10.6
- Версия модуля: bbtechsys/talos/proxmox 0.1.5
Требования
Система
- Terraform >= 1.0
- kubectl
- helm
Proxmox VE
- Proxmox VE >= 7.0
- Datastore для образов:
nvme1
- Datastore для ISO:
Images
- Доступ к API через https://192.168.8.10:8006/
Переменные окружения
Создайте файл .env
в корне проекта:
# Proxmox credentials
PROXMOX_VE_USERNAME=your_username@pam
PROXMOX_VE_PASSWORD=your_password
# Talos cluster name
TALOS_CLUSTER_NAME=talos-nsk2
Структура проекта
.
├── main.tf # Основная конфигурация Terraform
├── start.sh # Скрипт развертывания кластера
├── destroy.sh # Скрипт удаления кластера
└── cilium/
├── values.yaml # Конфигурация Cilium
├── ippool.yaml # IP Pool для LoadBalancer
└── l2-announcement-policy.yaml # Политика L2 анонсов
Конфигурация
Terraform (main.tf)
Основная конфигурация включает:
- Провайдеры: Proxmox (bpg/proxmox ~> 0.75.0), Talos (siderolabs/talos ~> 0.7.1)
- Модуль Talos: автоматическое создание VM, установка Talos OS, настройка кластера
- Патчи конфигурации: отключение CNI по умолчанию, разрешение планирования на control plane
Cilium CNI
values.yaml
- IPAM: Kubernetes mode
- kube-proxy: полная замена
- L2 Announcements: включены
- Hubble: UI и relay включены
- Security Context: расширенные capabilities для работы с Talos
IP Pool (ippool.yaml)
- CIDR: 192.168.8.11/32
- Назначение: LoadBalancer IP для сервисов
L2 Announcement Policy
- Область действия: только worker ноды
- Типы IP: External IPs и LoadBalancer IPs
Скрипты
start.sh - Развертывание кластера
Автоматизированный скрипт для полного развертывания:
./start.sh
Этапы выполнения:
- Загрузка переменных из
.env
- Terraform Plan - показ планируемых изменений
- Подтверждение и Apply - создание инфраструктуры
- Сохранение kubeconfig в
~/.kube/${TALOS_CLUSTER_NAME}.yaml
- Установка Cilium через Helm:
- Добавление репозитория cilium
- Обновление репозиториев
- Установка с кастомными values
- Применение Cilium ресурсов:
- IP Pool для LoadBalancer
- L2 Announcement Policy
Интерактивные подтверждения:
- Apply terraform changes? (y/n)
- Save kubeconfig? (y/n)
- Install Cilium? (y/n)
- Apply Cilium IP Pool and L2 Announcement Policy? (y/n)
destroy.sh - Удаление кластера
Полная очистка инфраструктуры:
./destroy.sh
Действия:
- Загрузка переменных из
.env
- Автоматическое удаление всех ресурсов (
terraform destroy -auto-approve
) - Удаление kubeconfig файла из
~/.kube/
Использование
Первоначальное развертывание
-
Настройте переменные окружения в
.env
-
Инициализируйте Terraform:
terraform init
-
Запустите развертывание:
./start.sh
Подключение к кластеру
После развертывания kubeconfig сохраняется в:
~/.kube/${TALOS_CLUSTER_NAME}.yaml
Использование:
export KUBECONFIG=~/.kube/${TALOS_CLUSTER_NAME}.yaml
kubectl get nodes
Проверка Cilium
# Статус Cilium
kubectl -n kube-system get pods -l k8s-app=cilium
# Hubble UI (если включен)
kubectl -n kube-system port-forward service/hubble-ui 12000:80
Удаление кластера
./destroy.sh
Сетевая конфигурация
- Cluster CIDR: управляется Talos
- Pod Network: управляется Cilium
- LoadBalancer IP: 192.168.8.11
- L2 Announcements: только с worker нод
Troubleshooting
Проблемы с сетью
- Проверьте доступность 192.168.8.10:8006
- Убедитесь в корректности credentials в
.env
Проблемы с Cilium
- Проверьте статус подов:
kubectl -n kube-system get pods -l k8s-app=cilium
- Логи Cilium:
kubectl -n kube-system logs -l k8s-app=cilium
Проблемы с Talos
- Проверьте статус нод:
kubectl get nodes
- Используйте talosctl для диагностики (требует talos config)
Description
Languages
Shell
60.3%
HCL
39.7%