Zum Inhalt springen
_CORE
KI & Agentensysteme Unternehmensinformationssysteme Cloud & Platform Engineering Datenplattform & Integration Sicherheit & Compliance QA, Testing & Observability IoT, Automatisierung & Robotik Mobile & Digitale Produkte Banken & Finanzen Versicherungen Öffentliche Verwaltung Verteidigung & Sicherheit Gesundheitswesen Energie & Versorgung Telko & Medien Industrie & Fertigung Logistik & E-Commerce Retail & Treueprogramme
Referenzen Technologien Blog Know-how Tools
Über uns Zusammenarbeit Karriere
CS EN DE
Lassen Sie uns sprechen

Infrastructure as Code — Pokročilé Patterns

11. 07. 2022 1 Min. Lesezeit intermediate

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 import fü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.

Kostenlose Beratung

Teilen:

CORE SYSTEMS Team

Wir bauen Kernsysteme und KI-Agenten, die den Betrieb am Laufen halten. 15 Jahre Erfahrung mit Enterprise-IT.