DevOps Fortgeschritten
Infrastructure as Code — Fortgeschrittene Patterns¶
IaCTerraformInfrastructureDevOps 5 min Lesezeit
IaC-Best-Practices. Terraform-Module, State-Management, Testing und Drift Detection.
Modul-Design¶
# modules/k8s-cluster/main.tf
variable "cluster_name" { type = string }
variable "node_count" { type = number; default = 3 }
variable "node_size" { type = string; default = "Standard_D4s_v3" }
resource "azurerm_kubernetes_cluster" "main" {
name = var.cluster_name
location = var.location
resource_group_name = var.resource_group
default_node_pool {
name = "default"
node_count = var.node_count
vm_size = var.node_size
}
}
output "kube_config" {
value = azurerm_kubernetes_cluster.main.kube_config_raw
sensitive = true
}
# Verwendung
module "prod_cluster" {
source = "./modules/k8s-cluster"
cluster_name = "prod-eu"
node_count = 5
node_size = "Standard_D8s_v3"
}
State-Management¶
- Remote State: immer (S3, Azure Blob, GCS)
- State Locking: DynamoDB / Azure Blob Lease
- State pro Umgebung: Dev/Staging/Prod trennen
- Sensitive Outputs:
sensitive = true - Import:
terraform importfür bestehende Ressourcen
Testing¶
# Terratest (Go)
func TestKubernetesCluster(t *testing.T) {
terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{
TerraformDir: "../modules/k8s-cluster",
Vars: map[string]interface{}{
"cluster_name": "test-cluster",
"node_count": 1,
},
})
defer terraform.Destroy(t, terraformOptions)
terraform.InitAndApply(t, terraformOptions)
kubeConfig := terraform.Output(t, terraformOptions, "kube_config")
assert.NotEmpty(t, kubeConfig)
}
Zusammenfassung¶
IaC erfordert die gleiche Disziplin wie Anwendungscode: Module, Tests, Code Review und CI/CD. Remote State und Locking sind die Grundlage.
Brauchen Sie Hilfe bei der Implementierung?¶
Unser Team hat Erfahrung mit dem Entwurf und der Implementierung moderner Architekturen. Wir helfen Ihnen gerne.