219 lines
6.0 KiB
Markdown
219 lines
6.0 KiB
Markdown
# AKS Cluster Terraform Configuration
|
|||
|
|
|
||
|
|
Dieses Projekt verwaltet einen Azure Kubernetes Service (AKS) Cluster mit vollständigem Monitoring und Alerting über Terraform.
|
||
|
|
|
||
|
|
## Projektübersicht
|
||
|
|
|
||
|
|
Der AKS Cluster wurde ursprünglich in Azure erstellt und anschließend mit `aztfexport` in Terraform importiert. Die Konfiguration wurde optimiert und um zusätzliche Monitoring-Komponenten erweitert.
|
||
|
|
|
||
|
|
## Infrastruktur-Komponenten
|
||
|
|
|
||
|
|
### Netzwerk
|
||
|
|
- **Resource Group**: `trusted_ai_demo_rg` (Germany West Central)
|
||
|
|
- **Virtual Network**: `trusted_ai_demo_vn` (10.0.0.0/16)
|
||
|
|
- **Subnet**: `default` (10.0.0.0/24)
|
||
|
|
|
||
|
|
### AKS Cluster
|
||
|
|
- **Name**: `trai_k8s_cluster`
|
||
|
|
- **Kubernetes Version**: 1.33
|
||
|
|
- **VM Size**: `Standard_D2as_v6` (2 vCPUs, 8 GB RAM)
|
||
|
|
- **Node Count**: 2-3 (Auto-Scaling)
|
||
|
|
- **Availability Zones**: 1, 2
|
||
|
|
- **Features**:
|
||
|
|
- OIDC Issuer enabled
|
||
|
|
- Workload Identity enabled
|
||
|
|
- Image Cleaner enabled (wöchentlich)
|
||
|
|
- Automatische Updates (Sonntags)
|
||
|
|
- Azure CNI Overlay Networking
|
||
|
|
|
||
|
|
### Monitoring & Logging
|
||
|
|
- **Log Analytics Workspace**: `aksloganalyticstraik8scluster`
|
||
|
|
- SKU: PerGB2018
|
||
|
|
- Retention: 30 Tage
|
||
|
|
- **Data Collection Rule**: Container Insights mit:
|
||
|
|
- Container Logs V2
|
||
|
|
- Kubernetes Events
|
||
|
|
- Pod Inventory
|
||
|
|
- **OMS Agent**: Automatisch auf allen Nodes deployed
|
||
|
|
|
||
|
|
### Alerting
|
||
|
|
- **Action Group**: Email-Benachrichtigungen
|
||
|
|
- **Metric Alerts**:
|
||
|
|
- CPU Usage > 95%
|
||
|
|
- Memory Working Set > 100%
|
||
|
|
|
||
|
|
## Projektstruktur
|
||
|
|
|
||
|
|
```
|
||
|
|
.
|
||
|
|
├── README.md # Diese Datei
|
||
|
|
├── main.tf # Haupt-Ressourcendefinitionen
|
||
|
|
├── variables.tf # Variablendefinitionen
|
||
|
|
├── terraform.tfvars # Aktuelle Variablenwerte
|
||
|
|
├── outputs.tf # Output-Definitionen
|
||
|
|
├── provider.tf # Azure Provider-Konfiguration
|
||
|
|
├── terraform.tf # Terraform-Einstellungen
|
||
|
|
├── terraform.tfstate # State-Datei (lokal)
|
||
|
|
├── aztfexportResourceMapping.json # Import-Mapping
|
||
|
|
├── aztfexportSkippedResources.txt # Übersprungene Ressourcen
|
||
|
|
└── cluster-status-commands.md # Nützliche Azure CLI Befehle
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
## Verwendung
|
||
|
|
|
||
|
|
### Voraussetzungen
|
||
|
|
- Terraform >= 1.0
|
||
|
|
- Azure CLI
|
||
|
|
- kubectl
|
||
|
|
- Authentifizierung bei Azure (`az login`)
|
||
|
|
|
||
|
|
### Initialisierung
|
||
|
|
```bash
|
||
|
|
terraform init
|
||
|
|
```
|
||
|
|
|
||
|
|
### Änderungen anzeigen
|
||
|
|
```bash
|
||
|
|
terraform plan
|
||
|
|
```
|
||
|
|
|
||
|
|
### Infrastruktur erstellen/aktualisieren
|
||
|
|
```bash
|
||
|
|
terraform apply
|
||
|
|
```
|
||
|
|
|
||
|
|
### Infrastruktur löschen
|
||
|
|
```bash
|
||
|
|
terraform destroy
|
||
|
|
```
|
||
|
|
|
||
|
|
### Cluster-Zugriff einrichten
|
||
|
|
```bash
|
||
|
|
az aks get-credentials --resource-group trusted_ai_demo_rg --name trai_k8s_cluster --overwrite-existing
|
||
|
|
kubectl get nodes
|
||
|
|
```
|
||
|
|
|
||
|
|
## Konfiguration
|
||
|
|
|
||
|
|
### Wichtige Variablen (terraform.tfvars)
|
||
|
|
|
||
|
|
```hcl
|
||
|
|
location = "germanywestcentral"
|
||
|
|
resource_group_name = "trusted_ai_demo_rg"
|
||
|
|
aks_cluster_name = "trai_k8s_cluster"
|
||
|
|
aks_node_vm_size = "Standard_D2as_v6"
|
||
|
|
aks_node_zones = ["1", "2"]
|
||
|
|
alert_email_address = "your-email@example.com"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Anpassbare Parameter
|
||
|
|
|
||
|
|
| Variable | Beschreibung | Default |
|
||
|
|
|----------|--------------|---------|
|
||
|
|
| `aks_node_pool_min_count` | Minimale Anzahl Nodes | 2 |
|
||
|
|
| `aks_node_pool_max_count` | Maximale Anzahl Nodes | 3 |
|
||
|
|
| `aks_node_vm_size` | VM-Größe für Nodes | Standard_D2as_v6 |
|
||
|
|
| `aks_node_zones` | Availability Zones | ["1", "2"] |
|
||
|
|
|
||
|
|
## Outputs
|
||
|
|
|
||
|
|
Nach dem Apply werden folgende Informationen ausgegeben:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
terraform output
|
||
|
|
```
|
||
|
|
|
||
|
|
- `aks_cluster_fqdn` - Cluster FQDN
|
||
|
|
- `aks_cluster_id` - Cluster Resource ID
|
||
|
|
- `aks_oidc_issuer_url` - OIDC Issuer URL
|
||
|
|
- `log_analytics_workspace_id` - Log Analytics Workspace ID
|
||
|
|
- Weitere...
|
||
|
|
|
||
|
|
## Kostenübersicht
|
||
|
|
|
||
|
|
**Monatliche Kosten (geschätzt)**:
|
||
|
|
- 2x Standard_D2as_v6 Nodes: ~€70/Monat
|
||
|
|
- Log Analytics Workspace: ~€2-5/Monat (bei geringer Nutzung)
|
||
|
|
- **Gesamt**: ~€75-80/Monat
|
||
|
|
|
||
|
|
**Kostenoptimierung**:
|
||
|
|
- Ursprünglich Standard_D4d_v4: ~€140/Monat
|
||
|
|
- **Ersparnis**: ~€60-65/Monat (ca. 50%)
|
||
|
|
|
||
|
|
## Import-Historie
|
||
|
|
|
||
|
|
Das Projekt wurde mit `aztfexport` erstellt:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
aztfexport resource-group trusted_ai_demo_rg --non-interactive --plain-ui --continue
|
||
|
|
```
|
||
|
|
|
||
|
|
**Importierte Ressourcen**: 9
|
||
|
|
- Resource Group
|
||
|
|
- Virtual Network + Subnet
|
||
|
|
- AKS Cluster
|
||
|
|
- Monitor Action Group
|
||
|
|
- 2x Metric Alerts
|
||
|
|
- Data Collection Rule (nachträglich hinzugefügt)
|
||
|
|
- Log Analytics Workspace (nachträglich hinzugefügt)
|
||
|
|
|
||
|
|
**Übersprungene Ressourcen**: 2
|
||
|
|
- Maintenance Configurations (automatisch verwaltet)
|
||
|
|
|
||
|
|
## Optimierungen
|
||
|
|
|
||
|
|
1. **VM-Größe**: Wechsel von Standard_D4d_v4 zu Standard_D2as_v6
|
||
|
|
- 50% Kostenreduktion
|
||
|
|
- Moderne AMD EPYC v6 Prozessoren
|
||
|
|
- Ausreichend für die meisten Workloads
|
||
|
|
|
||
|
|
2. **Availability Zones**: Reduziert auf Zonen 1 und 2
|
||
|
|
- Zone 3 war für das Abonnement nicht verfügbar
|
||
|
|
|
||
|
|
3. **Monitoring**: Komplett neu aufgesetzt
|
||
|
|
- Eigener Log Analytics Workspace (statt shared)
|
||
|
|
- Container Insights mit modernem V2 Format
|
||
|
|
- Strukturierte Alerting-Regeln
|
||
|
|
|
||
|
|
4. **Variabilisierung**: Alle Werte in variables.tf ausgelagert
|
||
|
|
- Einfache Anpassung
|
||
|
|
- Wiederverwendbar
|
||
|
|
|
||
|
|
## Nützliche Befehle
|
||
|
|
|
||
|
|
Siehe [cluster-status-commands.md](./cluster-status-commands.md) für eine vollständige Liste nützlicher Azure CLI und kubectl Befehle.
|
||
|
|
|
||
|
|
## Sicherheitshinweise
|
||
|
|
|
||
|
|
- `terraform.tfvars` enthält sensitive Werte (Email-Adresse) und sollte nicht in Version Control eingecheckt werden
|
||
|
|
- `.gitignore` ist konfiguriert, um State-Dateien und sensitive Daten auszuschließen
|
||
|
|
- Verwenden Sie Azure Key Vault oder ähnliche Lösungen für Production-Secrets
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Quota-Fehler bei Node Pool Rotation
|
||
|
|
Wenn Sie VM-Größen ändern und einen Quota-Fehler erhalten:
|
||
|
|
```bash
|
||
|
|
terraform destroy
|
||
|
|
terraform apply
|
||
|
|
```
|
||
|
|
|
||
|
|
### Log Analytics Workspace existiert nicht
|
||
|
|
Falls der Workspace gelöscht wurde, erstellt Terraform automatisch einen neuen.
|
||
|
|
|
||
|
|
## Weiterführende Schritte
|
||
|
|
|
||
|
|
- [ ] State zu Azure Blob Storage migrieren (Remote State)
|
||
|
|
- [ ] Azure Key Vault Integration für Secrets
|
||
|
|
- [ ] CI/CD Pipeline einrichten
|
||
|
|
- [ ] Weitere Monitoring Dashboards erstellen
|
||
|
|
- [ ] Backup-Strategie implementieren
|
||
|
|
|
||
|
|
## Kontakt
|
||
|
|
|
||
|
|
Für Fragen oder Probleme, siehe die GitHub Issues.
|
||
|
|
|
||
|
|
## Lizenz
|
||
|
|
|
||
|
|
Projekt für Demo-Zwecke.
|