Files
talos-terraform-proxmox/README.md
2025-08-11 08:55:13 +07:00

193 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` в корне проекта:
```bash
# Proxmox credentials
PROXMOX_VE_USERNAME=your_username@pam
PROXMOX_VE_PASSWORD=your_password
# Talos cluster name
TALOS_CLUSTER_NAME=talos-nsk2
```
## Структура проекта
```yaml
.
├── 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 - Развертывание кластера
Автоматизированный скрипт для полного развертывания:
```bash
./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
### destroy.sh - Удаление кластера
Полная очистка инфраструктуры:
```bash
./destroy.sh
```
**Действия:**
1. Загрузка переменных из `.env`
2. Автоматическое удаление всех ресурсов (`terraform destroy -auto-approve`)
3. Удаление kubeconfig файла из `~/.kube/`
## Использование
### Первоначальное развертывание
1. Настройте переменные окружения в `.env`
2. Инициализируйте Terraform:
```bash
terraform init
```
3. Запустите развертывание:
```bash
./start.sh
```
### Подключение к кластеру
После развертывания kubeconfig сохраняется в:
```bash
~/.kube/${TALOS_CLUSTER_NAME}.yaml
```
Использование:
```bash
export KUBECONFIG=~/.kube/${TALOS_CLUSTER_NAME}.yaml
kubectl get nodes
```
### Проверка Cilium
```bash
# Статус Cilium
kubectl -n kube-system get pods -l k8s-app=cilium
# Hubble UI (если включен)
kubectl -n kube-system port-forward service/hubble-ui 12000:80
```
### Удаление кластера
```bash
./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)