Files
cbazzaandClaude Sonnet 4.5 dfff276de6 Restructure project: Move AKS cluster to beispiel-k8s-cluster directory
Major improvements:
- Import existing Azure AKS cluster with aztfexport
- Optimize VM size from Standard_D4d_v4 to Standard_D2as_v6 (50% cost reduction)
- Configure availability zones to [1, 2]
- Add comprehensive monitoring setup:
  * New Log Analytics Workspace
  * OMS Agent integration
  * Data Collection Rule for Container Insights
  * Email alerts for CPU and Memory
- Refactor configuration:
  * Extract all values to variables.tf
  * Rename resources with meaningful names
  * Add detailed outputs.tf
- Add project documentation:
  * Comprehensive README.md
  * cluster-status-commands.md with useful Azure CLI commands
  * terraform.tfvars.example template
  * .gitignore for sensitive files

Infrastructure changes:
- Resource Group: trusted_ai_demo_rg (Germany West Central)
- AKS Cluster: trai_k8s_cluster (Kubernetes 1.33)
- Node Pool: 2-3 nodes with auto-scaling
- Network: VNet 10.0.0.0/16, Subnet 10.0.0.0/24
- Monitoring: Full Container Insights with alerts

Cost optimization: ~€75/month (down from ~€140/month)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 13:36:51 +01:00

6.0 KiB

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

terraform init

Änderungen anzeigen

terraform plan

Infrastruktur erstellen/aktualisieren

terraform apply

Infrastruktur löschen

terraform destroy

Cluster-Zugriff einrichten

az aks get-credentials --resource-group trusted_ai_demo_rg --name trai_k8s_cluster --overwrite-existing
kubectl get nodes

Konfiguration

Wichtige Variablen (terraform.tfvars)

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:

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:

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 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:

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.