Kubernetes Cluster Management mit Terraform
Dieses Modul erstellt und verwaltet Kubernetes Cluster auf Harvester mit den folgenden Features:
- Cilium CNI (von Rancher)
- Aktiviertes KubeProxyReplacement
- Gateway API Support
Voraussetzungen
Folgende Tools werden benötigt:
- Terraform v1.5.0 oder höher
- Infisical CLI (für Secrets Management)
- Rancher CLI (für Kubeconfig-Erstellung)
- kubectl (optional)
Vor der ersten Verwendung muss eine kubeconfig-Datei erstellt werden:
./scripts/create_kubeconfig.sh <cluster-name> <umgebung>
Cluster Management mit Workspaces
Das Modul verwendet Terraform Workspaces für die Verwaltung verschiedener Cluster-Umgebungen. Jeder Workspace hat seinen eigenen State und spezifische Konfigurationen.
1. Workspace Verwaltung
Verfügbare Workspace-Befehle:
# Workspace erstellen
terraform workspace new [dev|test|prod]
# Workspace auswählen
terraform workspace select [dev|test|prod]
# Alle Workspaces anzeigen
terraform workspace list
# Aktuellen Workspace anzeigen
terraform workspace show
2. Cluster Deployment
Cluster erstellen oder aktualisieren:
# Workspace auswählen
terraform workspace select [dev|test|prod]
# Konfiguration prüfen
terraform plan -var-file="cluster-configs/${terraform.workspace}.tfvars"
# Cluster erstellen/aktualisieren
terraform apply -var-file="cluster-configs/${terraform.workspace}.tfvars"
3. Cluster Entfernen
Zum Löschen eines Clusters:
# Workspace auswählen
terraform workspace select [dev|test|prod]
# Cluster löschen
terraform destroy -var-file="cluster-configs/${terraform.workspace}.tfvars"
4. State Management
Jeder Workspace verwaltet seinen eigenen State in einem separaten Verzeichnis:
terraform.tfstate.d/
├── dev/
│ └── terraform.tfstate
├── test/
│ └── terraform.tfstate
└── prod/
└── terraform.tfstate
Cluster Konfigurationen
Die Cluster werden je nach Workspace unterschiedlich konfiguriert:
| Workspace | Beschreibung | Nodes |
|---|---|---|
| dev | Entwicklungsumgebung | 1 All-in-One Node (4 CPU, 16GB RAM) |
| test | Testumgebung | 1 Control-Plane (2 CPU, 4GB RAM) + 1 Worker (4 CPU, 8GB RAM) |
| prod | Produktionsumgebung | 3 Control-Plane (2 CPU, 4GB RAM) + 2 Worker (4 CPU, 8GB RAM) |
Nach dem Deployment
Nach erfolgreicher Cluster-Erstellung:
-
Kubeconfig generieren:
./scripts/create_kubeconfig.sh ${terraform.workspace}Die Kubeconfig wird als
hnrx-${terraform.workspace}-kubeconfiggespeichert. -
Gateway API CRDs installieren:
# Kubeconfig verwenden export KUBECONFIG=hnrx-${terraform.workspace}-kubeconfig # Gateway API CRDs installieren kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
Terraform Module Description
Requirements
| Name | Version |
|---|---|
| terraform | >= 1.0.0 |
| infisical | 0.15.21 |
| rancher2 | 7.3.2 |
Providers
No providers.
Modules
| Name | Source | Version |
|---|---|---|
| rancher_cluster | git::https://git.hnrx.net/terraform-modules/rancher-cluster.git | main |
Resources
No resources.
Inputs
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| cluster_kubernetes_version | Kubernetes Version für die Cluster | string |
"v1.32.5+rke2r1" |
no |
| cluster_vm_image | Image für die VMs | string |
"default/image-62xch" |
no |
| cluster_vm_network | Netzwerk für die VMs | string |
"default/vmnetwork" |
no |
| harvester_cluster_name | Name des Harvester Clusters | string |
"c-g8zlv" |
no |
| infisical_api_url | Infisical API URL | string |
"https://app.infisical.com" |
no |
| infisical_client_id | Infisical Client ID für die Authentifizierung | string |
n/a | yes |
| infisical_client_secret | Infisical Client Secret für die Authentifizierung | string |
n/a | yes |
| infisical_environment | Infisical Umgebung (z.B. dev, test, prod) | string |
"dev" |
no |
| infisical_project_id | Infisical Projekt ID | string |
n/a | yes |
| rancher2_api_url | Rancher API URL | string |
n/a | yes |
| rancher2_insecure | SSL-Verifizierung für Rancher API überspringen | bool |
false |
no |
Outputs
| Name | Description |
|---|---|
| cluster | Details des Clusters |