2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00
2025-08-10 21:15:19 +07:00

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

Этапы выполнения:

  1. Загрузка переменных из .env
  2. Terraform Plan - показ планируемых изменений
  3. Подтверждение и Apply - создание инфраструктуры
  4. Сохранение kubeconfig в ~/.kube/${TALOS_CLUSTER_NAME}.yaml
  5. Установка Cilium через Helm:
    • Добавление репозитория cilium
    • Обновление репозиториев
    • Установка с кастомными values
  6. Применение 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

Действия:

  1. Загрузка переменных из .env
  2. Автоматическое удаление всех ресурсов (terraform destroy -auto-approve)
  3. Удаление kubeconfig файла из ~/.kube/

Использование

Первоначальное развертывание

  1. Настройте переменные окружения в .env

  2. Инициализируйте Terraform:

    terraform init
    
  3. Запустите развертывание:

    ./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
No description provided
Readme 39 KiB
Languages
Shell 60.3%
HCL 39.7%