Ga naar inhoud

AKS-platform: cluster baseline

De cluster baseline is de standaardconfiguratie van elk AKS-cluster van de oplossing. Het is de Terraform layer cluster-baseline (modules aks-cluster, node-pools, cluster-identities, diagnostic-settings). Deze pagina somt de instellingen op die ertoe doen en de waarden van de referentieconfiguratie.

Referentieontwerp, jouw deployment kan afwijken

De onderstaande waarden zijn gelezen uit de Terraform modules en de configuratiebestanden nonprod en prod van de Azure- variant. Het ontwerpdocument beschrijft een paar andere waarden; de verschillen worden genoemd waar ze ertoe doen.

Vastgelegd in de module

Deze instellingen staan in de module en kunnen niet met een variabele worden uitgezet.

Instelling Waarde Waarom
Entra ID-integratie Aan, met Azure RBAC voor Kubernetes-autorisatie Mensen melden zich aan met Entra ID.
Lokale accounts Uitgeschakeld Geen gedeelde admin-credential (local_account_disabled = true).
Toegang tot de API server VNet-integratie in een eigen subnet De API server heeft een privéadres in de spoke, geen publiek endpoint.
OIDC issuer en workload identity Ingeschakeld Pods krijgen Azure-toegang zonder opgeslagen secrets (Identiteit en toegang).
Azure Policy add-on Ingeschakeld Azure Policy voor Kubernetes (Security policy).
System node pool Naam system, autoscaling, managed OS-disk, alleen kritieke add-ons, label node-pool=system Houdt applicatiepods van de systeemnodes af.
Clusteridentiteit Eén user-assigned managed identity, gebruikt voor zowel het control plane als de kubelet Zie Clusteridentiteiten.
Netwerkplugin Azure CNI in overlay-modus met de Calico network policy engine Zie Netwerk.

Omgevingswaarden

Instelling Productie Niet-productie
Clusternaam aks-prod aks-nonprod
Kubernetes-versie Minor versie vastgepind in de configuratie (1.34 in de referentiebestanden) Hetzelfde
SKU-tier Standard (met SLA) Free
Upgradekanaal none (handmatig) patch
VM-grootte system pool Standard_D4s_v5 Standard_D2s_v5
Nodes system pool (min tot max) 3 tot 5 1 tot 2
Zones system pool 1, 2, 3 1
Max pods per node system pool 30 100
VM-grootte user pool general Standard_D4s_v5 Standard_D4s_v5
Nodes user pool general (min tot max) 3 tot 20 1 tot 5
Zones user pool general 1, 2, 3 1
Max pods per node user pool general 30 100
Label user pool workload-type=general workload-type=general
OS-disk 128 GB, managed 128 GB, managed
Surge tijdens upgrades (user pool) 33% 33%
Resource group rg-prod-aks (nodes in rg-prod-aks-nodes) rg-nonprod-aks (nodes in rg-nonprod-aks-nodes)

Ontwerpdocument versus code

Het ontwerpdocument beschrijft niet-productie als 2 tot 3 systeemnodes en 2 tot 10 usernodes over zones 1 en 2, met 30 pods per node. Het configuratiebestand nonprod stelt de kleinere waarden hierboven in, om kosten te besparen. Het hub-integrated niet-productiebestand gebruikt dezelfde groottes als nonprod.

User node pools zijn een map in de configuratie. Een pool toevoegen (bijvoorbeeld een dedicated ingress-, platform-, spot- of GPU-pool) is een configuratiewijziging: naam, VM-grootte, min en max aantal, zones, disk size, max pods, labels, taints en surge. De pool- module schakelt autoscaling in op elke pool.

Upgrades en onderhoudsvensters

Productie Niet-productie
Kubernetes-versie-upgrades Handmatig, in het venster, nadat niet-productie is gevalideerd Het patch-kanaal past patchversies automatisch toe; minor upgrades blijven handmatig
Auto-upgradevenster Zaterdag 03:00, 4 uur, UTC+1 Dinsdag 20:00, 4 uur, UTC+1
Venster voor node-OS Zaterdag 03:00, 4 uur, UTC+1 Dinsdag 20:00, 4 uur, UTC+1

Beide vensters zijn wekelijks. De offset staat vast, dus het venster schuift een uur ten opzichte van de lokale tijd als de zomertijd begint of eindigt. Pas de offset in de configuratie aan als dat uitmaakt.

Het ontwerpdocument noemt het node image-venster voor productie zondag en voor niet-productie woensdag. De configuratiebestanden stellen het in op dezelfde dag als het Kubernetes-upgradevenster.

Regels uit het ontwerp:

  • niet-productie wordt als eerste geüpgraded en productie volgt na een validatieperiode, zodat beide clusters in de stabiele toestand dezelfde minor versie draaien;
  • een minor versie kan op AKS niet worden teruggedraaid. Het redmiddel na een mislukte upgrade is een forward fix of een rollback op workloadniveau;
  • controleer vóór een minor upgrade op verwijderde Kubernetes-API's (het ontwerp noemt kubent en pluto);
  • Terraform houdt de versie bij, dus een handmatige versiewijziging buiten Terraform verschijnt als drift.

Add-ons en opties

Optie Referentieconfiguratie Opmerkingen
Azure Policy add-on Aan Vastgelegd in de module.
Key Vault Secrets Provider (CSI driver) Aan in nonprod, prod en nonprod-integrated, met secret rotation elke 2 minuten Het ontwerpdocument zegt dat de CSI driver niet wordt gebruikt en dat applicaties Key Vault met de SDK lezen. De codeswitch staat in de referentiebestanden aan.
Azure Monitor (Container Insights) Uit Heeft een Log Analytics workspace-ID nodig.
Image cleaner Uit Draait, als hij aan staat, elke 168 uur (7 dagen).
Managed Prometheus Niet in de code Het ontwerp zegt dit later te evalueren.
AKS diagnostic settings Uit (deploy_aks_diagnostics = false) Het productiebestand somt de categorieën op die vóór go-live moeten worden ingeschakeld: kube-apiserver, kube-audit-admin, kube-controller-manager, guard, cloud-controller-manager. Heeft een Log Analytics workspace nodig.
Defender for Containers Uit Zie Security policy.

Het ontwerp zegt dat diagnostic settings verplicht zijn vóór go-live in productie, met een retentie van 90 dagen (productie) en 30 dagen (niet-productie) in Log Analytics. Retentie is een eigenschap van de workspace en wordt niet door deze oplossing ingesteld.

Clusteridentiteiten

De identity layer maakt per cluster één user-assigned managed identity aan (mi-kubelet-<env>). De cluster baseline gebruikt die als control plane-identiteit en als kubelet-identiteit. De module cluster-identities geeft hem deze Azure-rollen:

Rol Scope Doel
Network Contributor Node-subnet Nodes aan het subnet koppelen
Network Contributor API server-subnet VNet-integratie van de API server
Private DNS Zone Contributor Elke private DNS-zone in aks_private_dns_zone_ids Private DNS-records beheren (geen ingesteld in de referentiebestanden)
Managed Identity Operator De identiteit zelf De kubelet-identiteit aan de node scale sets toewijzen
AcrPull Elke registry in aks_acr_ids Images ophalen zonder pull secrets (geen ingesteld in de bestanden voor productie en nonprod)

De omgevingsroot wijst ook Network Contributor op het spoke-VNet toe aan dezelfde identiteit.

Ontwerpdocument versus code

Het IAM-ontwerpdocument beschrijft een system-assigned control plane-identiteit en een aparte user-assigned kubelet-identiteit. De code gebruikt één user-assigned identiteit voor beide. Beschouw de code als leidend.

Bootstrap voor GitOps

De cluster baseline geeft GitOps een bereikbaar, geauthenticeerd cluster met workload identity en een network policy engine. Hij rolt geen namespaces, RBAC of platformservices uit. Het ontwerp noemt deze als GitOps-bootstrapresources:

Resource Doel
Namespaces platform-system, gateway-system, monitoring, policy-system Thuis van platformcomponenten
Priority class platform-critical (waarde 1000000) Kernplatformpods die niet mogen worden geëvicteerd
Priority class platform-high (waarde 900000) GitOps-controller, ingress gateway, certificaatbeheer
Priority class workload-default (waarde 100000) Standaard voor applicatiepods, wordt als eerste gepreempt
Cluster role bindings voor de platformgroepen Platform admin, operator, auditor, break-glass

Herstelmodel

Het ontwerp behandelt een cluster als wegwerpbaar en herbouwbaar: een vernietigd cluster wordt met Terraform herbouwd (het ontwerp verwacht 30 tot 60 minuten) en GitOps herstelt daarna platformservices, RBAC, policies en applicaties. Data op persistent volumes wordt niet gedekt. Plan Azure Backup voor AKS of Velero per workload.

Het ontwerp noemt ook resource locks (CanNotDelete op de productie-resource group en op het state storage account) en state storage met versioning en soft delete. De Terraform-code van de oplossing maakt geen locks aan. Bevestig bij het platformteam hoe deze in jouw omgeving zijn ingesteld.