Artikel: Cluster-Provisionierung mit Terraform Listing 1: Namespace erstellen resource "kubernetes_namespace" "example" { metadata { name = "example-namespace" } } resource "kubernetes_deployment" "example" { metadata { name = "example-deployment" namespace = kubernetes_namespace.example. metadata[0].name } spec { replicas = 3 selector { match_labels = { app = "example-app" } } template { metadata { labels = { app = "example-app" } } spec { container { name = "nginx" image = "nginx:latest" } } } } } Listing 2: Ergänztes Terraform-Skript provider "helm" { kubernetes { host = aws_eks_cluster.example.endpoint cluster_ca_certificate = base64decode( aws_eks_cluster.example.certificate_ authority[0].data ) token = data.aws_eks_cluster_auth.example.token } } # Helm-Release: NGINX Ingress Controller resource "helm_release" "nginx_ingress" { name = "nginx-ingress" repository = "https://kubernetes.github.io/ingressnginx" chart = "ingress-nginx" namespace = "ingress-nginx" create_namespace = true # Werte im Helm-Chart überschreiben set { name = "controller.replicaCount" value = "2" } set { name = "controller.service.type" value = "LoadBalancer" } # Sicherstellen, dass der Cluster bereits existiert depends_on = [aws_eks_cluster.example] } Listing 3: Modulaufruf module "avm-ptn-aks-production" { source = "Azure/avm-ptn-aks-production/ azurerm" version = "0.3.0" kubernetes_version = "1.30" name = module.naming.kubernetes_cluster. name_unique resource_group_name = azurerm_resource_group.this.name location = azurerm_resource_group.this. location private_dns_zone_id = azurerm_private_dns_zone.mydomain.id private_dns_zone_id_enabled = true rbac_aad_tenant_id = data.azurerm_client_config.current. tenant_id enable_telemetry = true network_policy = "calico" network = { name = module.avm_res_network_virtualnetwork.name resource_group_name = azurerm_resource_group.this.name node_subnet_id = module.avm_res_network_virtualnetwork.subnets["subnet"].resource_id pod_cidr = "192.168.0.0/16" } acr = { name = module.naming.container_registry. name_unique subnet_resource_id = module.avm_res_ network_virtualnetwork.subnets ["private_link_subnet"].resource_id private_dns_zone_resource_ids = [azurerm_private_dns_zone.this.id] } } Listing 4: GKE-Autopilot-Cluster erstellen module "cluster-1" { source = "./fabric/modules/gke-clusterautopilot" project_id = "myproject" name = "cluster-1" location = "europe-west3" access_config = { ip_access = { authorized_ranges = { internal-vms = "10.0.0.0/8" } } } vpc_config = { network = var.vpc.self_link subnetwork = var.subnet.self_link secondary_range_names = { pods = "pods" services = "services" } } labels = { environment = "dev" } } Artikel: Dev-Cluster auf Windows Server 2025 Listing: Dashboard-RBAC konfigurieren apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard Artikel: Windows-Container im Betrieb Listing: Referenzkonfiguration für kube-proxy auf Windows-Knoten cd /etc/kubernetes sudo nano kube-proxy-windows.yaml In diese Datei fügen Sie ein: apiVersion: apps/v1 kind: DaemonSet metadata: name: kube-proxy-windows namespace: kube-system spec: selector: matchLabels: k8s-app: kube-proxy-windows template: metadata: labels: k8s-app: kube-proxy-windows spec: nodeSelector: kubernetes.io/os: windows tolerations: - operator: "Exists" serviceAccountName: kube-proxy containers: - name: kube-proxy image: mcr.microsoft.com/oss/ kubernetes/kube-proxy:v1.34.0 command: - "kube-proxy.exe" - "--v=3" - "--cluster-cidr=10.0.0.0/16" - "--hostname-override=$(COMPUTER NAME)" - "--kubeconfig=C:\\k\\config" - "--proxy-mode=kernelspace" volumeMounts: - name: kubeproxy-config mountPath: C:\\k\\config volumes: - name: kubeproxy-config hostPath: path: C:\\k\\config type: File Artikel: Scale-out-Storage mit Ceph und Rook Listing 1: Ceph-Cluster deklarieren apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: cephVersion: image: quay.io/ceph/ceph:v19.2.2 allowUnsupported: false dataDirHostPath: /var/lib/rook skipUpgradeChecks: false continueUpgradeAfterChecksEvenIfNot Healthy: false mon: count: 3 allowMultiplePerNode: false mgr: count: 2 allowMultiplePerNode: false modules: - name: pg_autoscaler enabled: true - name: rook enabled: true dashboard: enabled: true ssl: false Listing 2: Storage-Netzwerk konfigurieren apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: network: provider: host addressRanges: public: - "10.42.0.0/16" cluster: - "192.168.99.0/24" Listing 3: Block-Storage mit RBD apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: replicapool namespace: rook-ceph spec: failureDomain: host replicated: size: 3 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rook-ceph-block annotations: storageclass.kubernetes.io/ is-default-class: "true" provisioner: rook-ceph.rbd.csi.ceph.com parameters: clusterID: rook-ceph pool: replicapool imageFormat: "2" Listing 4: Gemeinsame Volumes mit CephFS apiVersion: ceph.rook.io/v1 kind: CephFilesystem metadata: name: ceph-filesystem namespace: rook-ceph spec: metadataPool: replicated: size: 3 dataPools: - name: data0 failureDomain: host replicated: size: 3 preserveFilesystemOnDelete: true metadataServer: activeCount: 1 activeStandby: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rook-cephfs provisioner: rook-ceph.cephfs.csi.ceph.com parameters: clusterID: rook-ceph fsName: ceph-filesystem pool: ceph-filesystem-data0 Artikel: Persistente Daten mit Ceph und Rook Listing: Manifest "web.yaml" apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx volumeMounts: - name: data mountPath: /usr/share/nginx/html volumes: - name: data persistentVolumeClaim: claimName: web-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: web-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: rook-ceph-block