Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Knooppuntbeveiliging is een opt-in-functie voor Linux-knooppuntgroepen die de stabiliteit van knooppunten beschermt wanneer workloads knooppunten onder CPU-, geheugen- of schijfdruk plaatsen. Wanneer u Node Hardening op een cluster inschakelt, verandert AKS hoe elk knooppunt resources voor Kubernetes-onderdelen en -hostservices reserveert en afdwingt en hoe de kubelet pods uitzet wanneer resources laag zijn.
In dit artikel wordt uitgelegd welke wijzigingen Node Hardening aanbrengt, hoe u de geharde standaardinstellingen vergelijkt met de standaardinstellingen van AKS en hoe u de functie inschakelt, verifieert, aanpast en uitschakelt.
Important
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
Voordelen van node-hardening
Op drukke of bursty knooppunten kunnen workloads resources verbruiken die de kubelet, de containerruntime en hostservices nodig hebben. Wanneer dat gebeurt, kunnen knooppunten niet meer reageren, een NotReady status rapporteren of pods plotseling beëindigen. Node Hardening vermindert deze risico's op de volgende manieren:
-
Afgedwongen reserveringen: AKS maakt standaard alleen gebruik van kube-gereserveerde waarden om te berekenen hoeveel capaciteit de planner kan toewijzen aan pods. Door Node Hardening te gebruiken, dwingt de kubelet ook kube-gereserveerde en systeem gereserveerde capaciteit af via Linux-besturingsgroepen (cgroups). De kubelet en containerd worden uitgevoerd in een toegewezen
kubereserved.slicecgroup, zodat ze hun gereserveerde CPU-share en geheugen behouden, zelfs wanneer pods het knooppunt overbelasten. -
Toegewezen capaciteit voor hostservices: Knooppuntbeveiliging voegt een door het systeem gereserveerde toewijzing toe voor hostbesturingssysteemservices, die in
system.sliceworden uitgevoerd. - Meer beschikbare geheugenruimte: De harde ontruimingsdrempel voor beschikbaar geheugen schaalt mee met het geheugen van het knooppunt, dus de kubelet verwijdert pods voordat het knooppunt kritiek weinig geheugen beschikbaar heeft.
- Graceful eviction: Met soft evictiondrempels kan de kubelet pods graceful evicten, met een respijtperiode voor beëindiging, wanneer het geheugen of de schijfruimte bijna opraakt. Hard eviction, die pods onmiddellijk beëindigt, fungeert vervolgens als laatste redmiddel.
- Reserveringen die worden geschaald met poddichtheid: De berekening van het kube-reserved geheugen neemt toe met het maximum aantal pods per knooppunt, wat rekening houdt met de overhead van kubelet en containerd voor het uitvoeren van meer pods.
Welke wijzigingen worden er aangebracht wanneer u Node Hardening inschakelt
In de volgende tabellen worden de standaardinstellingen voor Linux-knooppunten met Kubernetes 1.29 of hoger vergeleken met de standaardwaarden die AKS toepast wanneer knooppuntbeveiliging is ingeschakeld.
Resourcereserveringen
| Setting | Zonder Node-hardening | Met Node Hardening |
|---|---|---|
| Voor Kube gereserveerde CPU | Op basis van het aantal CPU-kernen. Zie CPU-reserveringen voor meer informatie. | Ongewijzigd |
| Kube-gereserveerd geheugen |
min(20 × maxPods + 50, 25% of node memory) MiB |
min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB |
| Kube-reserved process id's (PID's) | 1000 |
Niet gereserveerd |
| Door het systeem gereserveerde CPU | None | 100m |
| Systeemgereserveerd geheugen | None | 200 MiB, plus 100 MiB voor elke volledige 32 GiB aan knooppuntgeheugen, plus 100 MiB voor clusters die gebruikmaken van Azure CNI |
| Door het systeem gereserveerde tijdelijke opslag | None | 1Gi |
Drempelwaarden voor ontruiming
| Setting | Zonder knooppuntbeveiliging | Met Node Hardening |
|---|---|---|
Geforceerde verwijdering: memory.available |
100Mi |
250Mi voor knooppunten met 8 GiB of minder, 375Mi voor knooppunten met meer dan 8 GiB en minder dan 32 GiB en 512Mi voor knooppunten met 32 GiB of meer |
Gedwongen verwijdering: nodefs.available en nodefs.inodesFree |
10% en 5% |
Ongewijzigd |
Geforceerde ontruiming: pid.available |
2000 |
Niet ingesteld |
Zachte verwijdering: memory.available |
None |
500Mi, 750Mi, of 1Gi, met dezelfde geheugenniveaus van knooppunten als harde uitzetting, met een respijtperiode van 30 seconden |
Soft eviction: nodefs.available en nodefs.inodesFree |
None |
12% en 7%, elk met een respijtperiode van 2 minuten |
| Maximale respijtperiode voor beëindiging van pods tijdens zachte evictie | Niet ingesteld | 60 seconden |
Cgroup-handhaving
| Setting | Zonder Node-hardening | Met Node-hardening |
|---|---|---|
| Afgedwongen toewijsbaarheid van knooppunten | pods |
pods, kube-reserved en system-reserved |
| Kubelet en containerd cgroup |
system.slice, zonder limieten |
kubereserved.slice, met geheugen beperkt tot het gereserveerde kube-geheugen en een CPU-share evenredig met de kube-gereserveerde CPU |
| cgroup voor hostservices |
system.slice, zonder limieten |
system.slice, met geheugen beperkt tot het door het systeem gereserveerde geheugen en een CPU-share evenredig met de door het systeem gereserveerde CPU |
Omdat knooppuntbeveiliging meer capaciteit reserveert, rapporteren knooppunten minder toe te wijzen capaciteit voor pods. Op een knooppunt met 4 vCPU's en 16 GiB geheugen dat gebruikmaakt van Azure CNI, vermindert het inschakelen van Node Hardening als volgt de toewijsbare capaciteit:
- Met het standaardmaximum van 250 pods per knooppunt, ongeveer 570 MiB geheugen, 100 millicores CPU en 1 GiB tijdelijke opslag.
- Met een maximum van 30 pods per knooppunt, met ongeveer 1,3 GiB geheugen, 100 millicores CPU en 1 GiB tijdelijke opslag.
Met zachte evictiondrempels wordt de toewijsbare capaciteit niet verminderd. Ze veranderen alleen wanneer de kubelet pods gaat evicten.
Considerations
Houd rekening met de volgende overwegingen voordat u Node Hardening inschakelt:
- U schakelt knooppuntbeveiliging op clusterniveau in en dit is van toepassing op alle Linux-knooppuntgroepen in het cluster. U kunt deze niet inschakelen voor afzonderlijke nodepools en dit heeft geen invloed op Windows nodepools.
- Knooppunten rapporteren minder toewijsbare capaciteit, zodat pods die op een knooppunt passen voordat u Node Hardening inschakelt, later mogelijk niet meer passen. Controleer uw resourceaanvragen voor pods en de grootten van nodegroepen.
- Hostservices in
system.slicedelen een vaste geheugenlimiet die gelijk is aan het door het systeem gereserveerde geheugen. Als u uw eigen agents uitvoert op knooppunten als systemd-services, zoals beveiliging, bewaking of agents voor het doorsturen van logboeken, tellen deze agents mee voor deze limiet. Valideer het geheugengebruik en de stabiliteit ervan voordat u Node Hardening in productie gebruikt. - Waarden die u in de aangepaste kubelet-configuratie van een nodepool instelt, overschrijven de bijbehorende standaardinstellingen van Node Hardening. Zie Instellingen voor knooppuntbeveiliging aanpassen voor meer informatie.
- Als u Node Hardening later uitschakelt, behouden bestaande knooppuntgroepen de geharde instellingen voor zachte ontruiming, zelfs nadat de knooppunten opnieuw zijn geïmageerd. Als u deze instellingen wilt verwijderen, moet u nieuwe knooppuntgroepen maken. Zie Knooppuntbeveiliging uitschakelen voor meer informatie.
- De standaardwaarden kunnen veranderen terwijl de functie in preview is. Begin met een niet-productiecluster en valideer uw workloads onder representatieve knooppuntdrukomstandigheden.
Prerequisites
- Een Azure-abonnement. Als u nog geen account hebt, kunt u een gratis account maken.
- Een AKS-cluster met Linux-knooppuntgroepen of machtigingen om er een te maken.
- De
aks-previewAzure CLI-extensie en deCustomNodeConfigPreviewfunctievlag, zoals beschreven in de volgende secties.
aks-preview De Azure CLI-extensie installeren
Installeer de
aks-previewextensie met behulp van deaz extension addopdracht.az extension add --name aks-previewWerk bij naar de nieuwste versie van de extensie met behulp van de
az extension updateopdracht.az extension update --name aks-preview
CustomNodeConfigPreview De functievlag registreren
Registreer de
CustomNodeConfigPreviewfunctievlag met behulp van deaz feature registeropdracht.az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.
Controleer de registratiestatus met behulp van de
az feature showopdracht.az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Wanneer de status Geregistreerd wordt weergegeven, vernieuwt u de registratie van de Microsoft. ContainerService-resourceprovider met behulp van de
az provider registeropdracht.az provider register --namespace "Microsoft.ContainerService"
Node-beveiliging inschakelen
Tijdens de preview is Node Hardening niet standaard ingeschakeld.
Node-hardening inschakelen op een nieuw cluster
Maak een cluster met Node Hardening ingeschakeld met behulp van de az aks create opdracht met de --enable-node-hardening parameter.
Voor deze opdracht zijn de aks-preview extensie en de CustomNodeConfigPreview functievlag vereist. Zie Vereisten voor meer informatie.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening \
--generate-ssh-keys
Zie Instellingen voor knooppuntbeveiliging controleren om de wijziging te bevestigen.
Knooppuntbeveiliging inschakelen op een bestaand cluster
Schakel Knooppuntbeveiliging in op een bestaand cluster met behulp van de az aks update opdracht met de --enable-node-hardening parameter.
Voor deze opdracht zijn de aks-preview extensie en de CustomNodeConfigPreview functievlag vereist. Zie Vereisten voor meer informatie.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening
Zie Instellingen voor knooppuntbeveiliging controleren om de wijziging te bevestigen.
Instellingen voor Node Hardening controleren
Haal de aanmeldingsgegevens voor uw cluster op met behulp van de
az aks get-credentialsopdracht.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Controleer de effectieve kubelet-reserverings- en ontruimingsinstellingen op een knooppunt door een query uit te voeren op het kubelet-configuratie-eindpunt.
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'Op een gehard knooppunt bevatten
systemReservedenevictionSoftwaarden, en omvatenforceNodeAllocatablekube-reservedensystem-reserved.Vergelijk de capaciteit van het knooppunt met de bijbehorende toewijsbare hulpbronnen.
kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'Op een beveiligd knooppunt zijn de toewijsbare cpu, het geheugen en de tijdelijke opslag lager dan de capaciteit. Het verschil is gelijk aan de waarden voor kube-reserved en system-reserved in Resource reservations, plus de harde verwijderingsdrempels in Eviction thresholds. Op een knooppunt met 4 vCPU's en 16 GiB geheugen dat gebruikmaakt van Azure CNI, is de allocatable CPU 240 millicores lager dan capaciteit: 140 millicores van kube-reserved CPU en 100 millicores van door het systeem gereserveerde CPU.
Instellingen voor knooppuntbeveiliging aanpassen
U kunt de standaardinstellingen voor kube-reserved en evictie voor een Linux-knooppuntgroep overschrijven met behulp van een aangepaste kubelet-configuratie. Voor deze instellingen is de CustomNodeConfigPreview functievlag vereist. U kunt deze gebruiken, ongeacht of Node Hardening is ingeschakeld op het cluster. AKS beheert door het systeem gereserveerde waarden en cgroup-afdwinging en u kunt ze niet aanpassen.
Elke instelling overschrijft een rij in de tabellen Resource-reserveringen of Ontruimingsdrempels. Kube-reserved-regels komen overeen met de kubeReserved instellingen. Rijen voor harde verwijdering komen overeen met de hardEvictionThreshold instellingen. Rijen voor zachte uitzetting komen overeen met de instellingen softEvictionThreshold en softEvictionGracePeriod. De maximale respijtperiode voor podbeëindiging komt overeen met evictionMaxPodGracePeriodInSeconds.
U kunt de volgende instellingen configureren:
| Setting | Overrides | Description |
|---|---|---|
kubeReserved.cpuMillicores |
Kube-gereserveerde CPU | CPU gereserveerd voor Kubernetes-systeem-daemons, in millicores. |
kubeReserved.memoryMB |
voor Kube gereserveerd geheugen | Geheugen gereserveerd voor Kubernetes-systeem-daemons, in MiB. |
hardEvictionThreshold.memoryAvailable |
Harde ontruiming: memory.available |
Harde uitzettingsdrempel voor beschikbaar geheugen. |
hardEvictionThreshold.nodeFsAvailable |
Harde uitzetting: nodefs.available |
Harde ontruimingsdrempel voor de beschikbare ruimte van het knooppuntbestandssysteem. |
hardEvictionThreshold.nodeFsInodesFree |
Geforceerde verwijdering: nodefs.inodesFree |
Harde ontruimingsdrempel voor vrije inodewaarden van het knooppuntbestandssysteem. |
softEvictionThreshold.memoryAvailable |
Zachte evictie: memory.available |
Drempelwaarde voor zachte ontruiming van beschikbaar geheugen. |
softEvictionThreshold.nodeFsAvailable |
Zachte ontruiming: nodefs.available |
Soft eviction-drempelwaarde voor beschikbare bestandssysteemruimte op het knooppunt. |
softEvictionThreshold.nodeFsInodesFree |
Zachte ontruiming: nodefs.inodesFree |
Zachte ontruimingsdrempel voor vrije inodes van het bestandssysteem van het knooppunt. |
softEvictionGracePeriod.memoryAvailable |
Zachte ontruiming: memory.available respijtperiode |
Hoe lang beschikbaar geheugen moet blijven onder de zachte drempelwaarde voordat de kubelet pods verwijdert. |
softEvictionGracePeriod.nodeFsAvailable |
Zachte uitzetting: nodefs.available respijtperiode |
Hoe lang de beschikbare ruimte van het bestandssysteem van het knooppunt onder de zachte drempelwaarde moet blijven voordat de kubelet pods verwijdert. |
softEvictionGracePeriod.nodeFsInodesFree |
Zachte uitzetting: nodefs.inodesFree respijtperiode |
Hoelang vrije inode's van het bestandssysteem van het knooppunt onder de zachte drempelwaarde moeten blijven voordat de kubelet pods verwijdert. |
evictionMaxPodGracePeriodInSeconds |
Maximale beëindigingstermijn van pods tijdens soft eviction | Maximum aantal seconden dat de kubelet toestaat dat pods worden beëindigd tijdens een soft eviction. |
- Zie Aangepaste knooppuntconfiguratieparameters voor AKS voor toegestane waarden, minimumwaarden en validatieregels voor elke instelling.
- Stel voor elk uitzettingssignaal zowel de zachte uitzettingsdrempel als de overeenkomende respijtperiode in en zorg ervoor dat elke zachte uitzettingsdrempel groter is dan de harde uitzettingsdrempel voor hetzelfde signaal.
Maak een kubelet-configuratiebestand, zoals
nodehardening-kubelet.json, met de instellingen die u wilt aanpassen. In het volgende voorbeeld wordt elke configureerbare waarde ingesteld. Het stelt kube-gereserveerd in op 200 millicores cpu en 1024 MiB aan geheugen. Er worden harde ontruimingsdrempels ingesteld voor512Mivan beschikbaar geheugen,10%van beschikbare bestandssysteemruimte en5%van vrije inodes. Hiermee worden zachte verwijderingsdrempels van1Gi,12%en7%met respijtperioden van 30 seconden, 2 minuten en 2 minuten ingesteld. Er wordt ook een respijtperiode van maximaal 60 seconden ingesteld voor beëindiging van pods.{ "kubeReserved": { "cpuMillicores": 200, "memoryMB": 1024 }, "hardEvictionThreshold": { "memoryAvailable": "512Mi", "nodeFsAvailable": "10%", "nodeFsInodesFree": "5%" }, "softEvictionThreshold": { "memoryAvailable": "1Gi", "nodeFsAvailable": "12%", "nodeFsInodesFree": "7%" }, "softEvictionGracePeriod": { "memoryAvailable": "30s", "nodeFsAvailable": "2m", "nodeFsInodesFree": "2m" }, "evictionMaxPodGracePeriodInSeconds": 60 }Maak een Linux-knooppuntgroep die gebruikmaakt van het configuratiebestand met behulp van de
az aks nodepool addopdracht met de--kubelet-configparameter.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./nodehardening-kubelet.jsonU kunt de
--kubelet-configparameter ook gebruiken met deaz aks createopdracht om de configuratie toe te passen op de initiële nodepool van het cluster.
Knooppuntbeveiliging uitschakelen
Schakel Node Hardening uit met behulp van de az aks update opdracht met de --disable-node-hardening parameter.
Voor deze opdracht zijn de aks-preview extensie en de CustomNodeConfigPreview functievlag vereist. Zie Vereisten voor meer informatie.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--disable-node-hardening
Het uitschakelen van Knooppuntbeveiliging schakelt de instelling op clusterniveau uit, maar bestaande knooppunten worden niet onmiddellijk gewijzigd. Bestaande knooppunten behouden alle beveiligde instellingen totdat ze opnieuw van een installatiekopie worden voorzien, bijvoorbeeld tijdens een upgrade van de knooppuntafbeelding. Nadat een knooppunt opnieuw van een image is voorzien, zijn de volgende wijzigingen van toepassing:
- Teruggezet naar de standaard AKS-standaardwaarden: Door Kube gereserveerde en door het systeem gereserveerde resources, harde ontruimingsdrempels en cgroup-handhaving. De toe te wijzen capaciteit van het knooppunt neemt dienovereenkomstig toe.
- Behouden: De drempelwaarden voor soft eviction, de respijtperioden voor soft eviction en de maximale respijtperiode voor podbeëindiging tijdens soft eviction.
U kunt alleen een aangepaste kubelet-configuratie instellen wanneer u een cluster of knooppuntgroep maakt, zodat u de behouden soft-evictie-instellingen niet kunt verwijderen uit een bestaande knooppuntgroep. Als u ze wilt verwijderen, maakt u een nieuwe knooppuntgroep waarin deze expliciet worden verwijderd, verplaatst u uw workloads naar de nieuwe knooppuntgroep en verwijdert u vervolgens de oude knooppuntgroep.
Maak een kubelet-configuratiebestand, zoals
remove-soft-eviction.json. In het volgende voorbeeld wordt elke drempelwaarde voor soft eviction en graceperiode ingesteld op een lege tekenreeks, waardoor soft eviction voor dat signaal wordt uitgeschakeld. Hiermee wordt ook de maximale uitloopperiode0voor podbeëindiging ingesteld, wat de standaardinstelling van AKS is.{ "softEvictionThreshold": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "softEvictionGracePeriod": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "evictionMaxPodGracePeriodInSeconds": 0 }Maak een Linux-knooppuntgroep die gebruikmaakt van het configuratiebestand met behulp van de
az aks nodepool addopdracht met de--kubelet-configparameter.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./remove-soft-eviction.jsonVerplaats uw workloads naar de nieuwe knooppuntgroep en verwijder vervolgens de oude knooppuntgroep. Zie Grootte van nodepools wijzigen in AKS voor meer informatie.
Zie Instellingen voor knooppuntbeveiliging controleren om de instellingen op een knooppunt te bevestigen. Op knooppunten in de nieuwe knooppuntgroep is evictionSoft leeg.