Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Posílení zabezpečení uzlů je volitelná funkce pro fondy uzlů s Linuxem, která chrání stabilitu uzlů, když úlohy zatěžují uzly z hlediska CPU, paměti nebo disku. Když povolíte posílení zabezpečení uzlů v clusteru, AKS změní způsob, jakým každý uzel rezervuje a vynucuje prostředky pro komponenty a hostitelské služby Kubernetes a jak kubelet vyřazuje pody, když je prostředků nedostatek.
Tento článek vysvětluje, jaké změny přináší posílení zabezpečení uzlů, porovnává výchozí nastavení se zvýšeným zabezpečením se standardními výchozími nastaveními AKS a ukazuje, jak tuto funkci povolit, ověřit, přizpůsobit a zakázat.
Important
Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "tak, jak jsou" a "dle dostupnosti" a jsou vyloučeny ze smluv o úrovni služeb a z omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Výhody posílení zabezpečení uzlů
Na zaneprázdněných uzlech nebo uzlech se špičkovým zatížením můžou úlohy využívat prostředky, které potřebují kubelet, modul runtime kontejneru a hostitelské služby. V takovém případě se uzly můžou stát nereagujícími, nahlásit NotReady stav nebo ukončit pody náhle. Posílení zabezpečení uzlů snižuje tato rizika následujícími způsoby:
-
Vynucené rezervace: AKS ve výchozím nastavení používá hodnoty kube-reserved pouze k výpočtu kapacity, kterou může plánovač přidělit podům. Pomocí posílení zabezpečení uzlu kubelet také vynucuje kapacitu kube-reserved a system-reserved prostřednictvím skupin řízení Linuxu (cgroups). Kubelet a containerd běží ve vyhrazené
kubereserved.sliceskupině cgroup, takže si zachovají rezervovaný podíl CPU a paměť i v případě, že pody plně vytíží uzel. -
Vyhrazená kapacita pro hostitelské služby: Node Hardening přidává přidělení rezervované systémem pro služby hostitelského operačního systému, které běží v
system.slice. - Větší paměťová rezerva: Prahová hodnota vyřazení pro dostupnou paměť se škáluje s pamětí uzlu, takže kubelet vyřadí pody před kritickým nedostatkem paměti uzlu.
- Šetrné vypuzení: Prahové hodnoty pro mírné vypuzení umožňují kubeletu šetrně vypuzovat pody s dobou odkladu ukončení, když na uzlu dochází paměť nebo místo na disku. Tvrdé vypuzení, které okamžitě ukončí pody, pak funguje jako poslední možnost.
- Rezervace, které se škálují s hustotou podů: Výpočet paměti kube-reserved se zvyšuje s maximálním počtem podů na uzel, což zohledňuje režii kubeletu a containerd při běhu většího počtu podů.
Co se změní, když povolíte posílení zabezpečení uzlu
Následující tabulky porovnávají standardní výchozí hodnoty pro uzly s Linuxem, na kterých běží Kubernetes 1.29 nebo novější, s výchozími nastaveními, které AKS použije při povolení posílení zabezpečení uzlů.
Rezervace prostředků
| Setting | Bez hardeningu uzlu | Posílení zabezpečení uzlů |
|---|---|---|
| CPU rezervované pro kube | Na základě počtu jader procesoru. Další informace najdete v tématu Rezervace procesoru. | Nezměněný |
| Rezervovaná paměť pro Kubernetes |
min(20 × maxPods + 50, 25% of node memory) MiB |
min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB |
| ID procesů (PID) vyhrazené pro Kube | 1000 |
Nerezervováno |
| CPU vyhrazené systémem | None | 100m |
| Systémově rezervovaná paměť | None | 200 MiB plus 100 MiB pro každou plnou 32 GiB paměti uzlu a 100 MiB pro clustery, které používají Azure CNI |
| Dočasné úložiště vyhrazené systémem | None | 1Gi |
Prahové hodnoty evikce
| Setting | Bez zpevnění uzlu | Posílení zabezpečení uzlů |
|---|---|---|
Vynucené vyřazení: memory.available |
100Mi |
250Mi pro uzly s 8 GiB paměti nebo méně, 375Mi pro uzly s více než 8 GiB a méně než 32 GiB a 512Mi pro uzly s 32 GiB nebo více |
Nucené vytěsnění: nodefs.available a nodefs.inodesFree |
10% a 5% |
Nezměněný |
Tvrdé vypuzení: pid.available |
2000 |
Nenastaví se |
Měkké vyřazení: memory.available |
None |
500Mi, 750Mi, nebo 1Gi, pomocí stejných úrovní paměti uzlu jako při tvrdém vypuzení, s 30sekundovou ochrannou lhůtou |
Měkké vyřazení: nodefs.available a nodefs.inodesFree |
None |
12% a 7%, oba s 2minutovým obdobím odkladu |
| Maximální doba odkladu před ukončením podu během měkkého vytěsnění | Nenastaví se | 60 sekund |
Vynucení cgroup
| Setting | Bez hardeningu uzlu | S posílením uzlů |
|---|---|---|
| Vynuceně alokovatelné prostředky uzlu | pods |
pods, kube-reserved a system-reserved |
| Kubelet a containerd cgroup |
system.slice, bez omezení |
kubereserved.slice, s pamětí omezenou na paměť rezervovanou pro kube a s podílem CPU úměrným CPU rezervovanému pro kube |
| cgroup hostitelských služeb |
system.slice, bez omezení |
system.slice, s pamětí omezenou na paměť vyhrazenou systémem a s podílem CPU úměrným procesoru vyhrazenému systémem |
Vzhledem k tomu, že posílení zabezpečení uzlu si vyhrazuje větší kapacitu, hlásí uzly menší alokovatelnou kapacitu pro pody. Například na uzlu se 4 virtuálními procesory a 16 GiB paměti, který používá Azure CNI, povolení Node Hardening snižuje allocatable kapacitu následujícím způsobem:
- Při výchozím maximálním počtu 250 podů na uzel se zvýší přibližně o 570 MiB paměti, 100 milijader CPU a 1 GiB dočasného úložiště.
- Při maximálně 30 podech na uzel přibližně 1,3 GiB paměti, 100 milijader CPU a 1 GiB efemérního úložiště.
Prahy měkkého vystěhování nesnižují přidělitelnou kapacitu. Změní se jenom v případech, kdy kubelet začne vypuzovat pody.
Considerations
Než povolíte posílení zabezpečení uzlů, mějte na paměti následující skutečnosti:
- Posílení zabezpečení uzlů povolíte na úrovni clusteru a vztahuje se na všechny fondy uzlů Linuxu v clusteru. Nemůžete ho povolit pro jednotlivé fondy uzlů a nemá vliv na Windows fondy uzlů.
- Uzly hlásí méně alokovatelné kapacity, takže pody, které se vejdou do uzlu předtím, než povolíte posílení zabezpečení uzlu, se pak nemusí vejít. Zkontrolujte požadavky na prostředky podu a velikosti fondů uzlů.
- Služby hostitele v
system.slicesdílejí pevný limit paměti, který se rovná systémem rezervované paměti. Pokud na uzlech spouštíte vlastní agenty jako služby systemd, jako jsou bezpečnostní a monitorovací agenti nebo agenti pro předávání protokolů, započítávají se tito agenti do tohoto limitu. Před použitím Node Hardening v produkčním prostředí ověřte využití paměti a stabilitu. - Hodnoty, které jste nastavili ve vlastní konfiguraci kubeletu ve fondu uzlů, mají přednost před odpovídajícím výchozím nastavením posílení zabezpečení uzlu. Další informace najdete v tématu Přizpůsobení nastavení posílení zabezpečení uzlu.
- Pokud posílení zabezpečení uzlů zakážete později, stávající fondy uzlů zachovávají posílená nastavení měkkého vyřazení i po opětovném vytvoření image jejich uzlů. Pokud chcete tato nastavení odebrat, musíte vytvořit nové pooly uzlů. Další informace najdete v tématu Zakázání posílení zabezpečení uzlu.
- Výchozí hodnoty se můžou změnit, když je funkce ve verzi Preview. Začněte s neprodukčním clusterem a ověřte úlohy za reprezentativních podmínek zatížení uzlů.
Prerequisites
- Předplatné služby Azure. Pokud žádné nemáte, vytvořte si bezplatný účet.
- Cluster služby AKS s fondy uzlů se systémem Linux nebo oprávněním k jeho vytvoření.
- Rozšíření Azure CLI
aks-previewa příznak funkceCustomNodeConfigPreview, jak je popsáno v následujících částech.
aks-preview Instalace rozšíření Azure CLI
Nainstalujte
aks-previewrozšíření pomocí příkazuaz extension add.az extension add --name aks-previewPomocí příkazu
az extension updateaktualizujte rozšíření na nejnovější verzi.az extension update --name aks-preview
Zaregistruj příznak funkce CustomNodeConfigPreview
CustomNodeConfigPreviewPomocí příkazu zaregistrujte příznakaz feature registerfunkce.az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Zobrazení stavu Zaregistrované trvá několik minut.
Pomocí příkazu ověřte stav
az feature showregistrace.az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Když se zobrazí stav Registered, obnovte registraci poskytovatele prostředků Microsoft.ContainerService pomocí příkazu
az provider register.az provider register --namespace "Microsoft.ContainerService"
Povolit zabezpečení uzlů
Ve verzi Preview není Node Hardening ve výchozím nastavení povolen.
Povolit hardening uzlů v novém clusteru
Vytvořte cluster s povoleným posílením zabezpečení uzlu pomocí az aks create příkazu s parametrem --enable-node-hardening .
Tento příkaz vyžaduje aks-preview rozšíření a CustomNodeConfigPreview příznak funkce. Další informace najdete v části Předpoklady.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening \
--generate-ssh-keys
Chcete-li změnu potvrdit, viz Ověřte nastavení posílení zabezpečení uzlu.
Povolte posílení zabezpečení uzlů v existujícím clusteru
Povolte posílení zabezpečení uzlu v existujícím clusteru pomocí az aks update příkazu s parametrem --enable-node-hardening .
Tento příkaz vyžaduje rozšíření aks-preview a příznak funkce CustomNodeConfigPreview. Další informace najdete v části Předpoklady.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening
Pokud chcete změnu potvrdit, přečtěte si téma Ověření nastavení posílení zabezpečení uzlu.
Ověřit nastavení posílení zabezpečení uzlu
Pomocí příkazu
az aks get-credentialszískejte přihlašovací údaje pro váš cluster.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Zkontrolujte efektivní nastavení rezervace kubeletu a evikce na uzlu dotazováním koncového bodu konfigurace kubeletu.
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'Na posíleném uzlu
systemReservedaevictionSoftobsahují hodnoty aenforceNodeAllocatablezahrnujekube-reservedasystem-reserved.Porovnejte kapacitu uzlu s alokovatelnými prostředky.
kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'Na zabezpečených uzlech jsou alokovatelné prostředky procesoru, paměti a dočasného úložiště nižší než kapacita. Rozdíl se rovná hodnotám kube-reserved a system-reserved v rezervacích prostředků plus pevným prahovým hodnotám vyřazení v prahových hodnotách vyřazení. Například na uzlu se 4 virtuálními procesory a 16 GiB paměti, který používá Azure CNI, je alokovatelný procesor o 240 millicores nižší než kapacita: 140 millicores CPU rezervovaného pro kube a 100 millicores CPU rezervovaného pro systém.
Přizpůsobte nastavení posílení zabezpečení Node
Výchozí nastavení kube-reserved a evikce pro fond uzlů s Linuxem můžete přepsat pomocí vlastní konfigurace kubeletu. Tato nastavení vyžadují CustomNodeConfigPreview feature flag. Můžete je použít bez ohledu na to, ať už je v clusteru povolené posílení zabezpečení uzlu, nebo ne. AKS spravuje hodnoty rezervované systémem a vynucení cgroup a nemůžete je přizpůsobit.
Každé nastavení přepíše řádek v tabulkách rezervací prostředků nebo prahových hodnot vyřazení. Řádky vyhrazené pro Kube odpovídají nastavení kubeReserved. Řádky pevného vytěsnění odpovídají nastavení hardEvictionThreshold. Řádky měkkého vytěsnění odpovídají nastavením softEvictionThreshold a softEvictionGracePeriod. Maximální ochranná lhůta ukončení podu odpovídá evictionMaxPodGracePeriodInSeconds.
Můžete nakonfigurovat následující nastavení:
| Setting | Overrides | Description |
|---|---|---|
kubeReserved.cpuMillicores |
CPU rezervované pro kube | CPU vyhrazené pro systémové démony Kubernetes, v milijádrech. |
kubeReserved.memoryMB |
Paměť rezervovaná pro kube | Paměť vyhrazená pro démony systému Kubernetes v MiB. |
hardEvictionThreshold.memoryAvailable |
Tvrdé vytěsnění: memory.available |
Prahová hodnota tvrdého uvolnění pro dostupnou paměť. |
hardEvictionThreshold.nodeFsAvailable |
Tvrdé vytěsnění: nodefs.available |
Prahová hodnota vystěhování pro dostupný prostor systému souborů uzlu |
hardEvictionThreshold.nodeFsInodesFree |
Vynucené vypuzení: nodefs.inodesFree |
Prahová hodnota tvrdého vyřazení pro volné inody souborového systému uzlu. |
softEvictionThreshold.memoryAvailable |
Měkké vyřazení: memory.available |
Prahová hodnota měkkého vytěsnění pro dostupnou paměť |
softEvictionThreshold.nodeFsAvailable |
Měkké vyřazení: nodefs.available |
Prahová hodnota měkkého vytěsnění pro dostupný prostor souborového systému uzlu |
softEvictionThreshold.nodeFsInodesFree |
Měkké vyřazení: nodefs.inodesFree |
Prahová hodnota měkkého vyřazení pro volné inody systému souborů uzlu |
softEvictionGracePeriod.memoryAvailable |
Měkké vyřazení: memory.available ochranná lhůta |
Jak dlouho musí dostupná paměť zůstat pod svou měkkou prahovou hodnotou, než kubelet vypudí pody. |
softEvictionGracePeriod.nodeFsAvailable |
Měkké vyřazení: nodefs.available období odkladu |
Jak dlouho musí dostupné místo v systému souborů uzlu zůstat pod svým měkkým prahem, předtím než kubelet vypudí pody. |
softEvictionGracePeriod.nodeFsInodesFree |
Měkké vyřazení: nodefs.inodesFree období odkladu |
Jak dlouho musí volné inody souborového systému na uzlu zůstat pod svým měkkým prahem, než kubelet vyřadí pody. |
evictionMaxPodGracePeriodInSeconds |
Maximální lhůta pro ukončení podu během měkkého vytěsnění | Maximální počet sekund, po které kubelet umožňuje ukončení podů během měkkého vytěsnění. |
- Povolené hodnoty, minimum a ověřovací pravidla pro každé nastavení najdete v tématu Vlastní konfigurační parametry uzlu pro AKS.
- Pro každý signál vyřazení nastavte měkký práh vyřazení i odpovídající období odkladu a zajistěte, aby každý měkký práh vyřazení byl větší než tvrdý práh vyřazení pro stejný signál.
Vytvořte konfigurační soubor kubeletu, například
nodehardening-kubelet.json, s nastaveními, která chcete přizpůsobit. Následující příklad nastaví každou konfigurovatelnou hodnotu. Nastaví kube-reserved na 200 milicores procesoru a 1 024 MiB paměti. Nastaví pevné prahové hodnoty pro vyřazení při512Midostupné paměti,10%dostupného prostoru systému souborů a5%volných inodech. Nastaví prahové hodnoty1Gi,12%a7%pro měkké vystěhování s obdobími odkladu 30 sekund, 2 minuty a 2 minuty. Nastaví také maximální 60sekundové období odkladu ukončení podu.{ "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 }Pomocí příkazu
--kubelet-configs parametremaz aks nodepool addvytvořte fond uzlů s Linuxem, který používá konfigurační soubor.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./nodehardening-kubelet.jsonPomocí parametru
--kubelet-configs příkazemaz aks createmůžete také použít konfiguraci pro počáteční fond uzlů clusteru.
Zakázat posílení zabezpečení uzlů
Zakažte posílení zabezpečení uzlů pomocí az aks update příkazu s parametrem --disable-node-hardening .
Tento příkaz vyžaduje rozšíření aks-preview a feature flag CustomNodeConfigPreview. Další informace najdete v části Předpoklady.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--disable-node-hardening
Vypnutí posílení zabezpečení uzlu vypne nastavení na úrovni clusteru, ale okamžitě nezmění stávající uzly. Stávající uzly zachovávají všechna posílená nastavení, dokud nebudou znovu vytvořeny z image, například během upgradu image uzlu. Po přeinstalaci uzlu se použijí následující změny:
- Vrácení standardních výchozích hodnot AKS: Rezervované prostředky Kube a rezervované systémem, pevné prahové hodnoty vyřazování a vynucení cgroup Kapacita pro přidělení uzlu se odpovídajícím způsobem zvyšuje.
- Zachováno: Prahové hodnoty měkkého vytěsnění, doba hájení měkkého vytěsnění a maximální doba hájení ukončení podu během měkkého vytěsnění.
Vlastní konfiguraci kubeletu můžete nastavit jenom při vytváření clusteru nebo fondu uzlů, takže z existujícího fondu uzlů nemůžete odebrat zachovaná nastavení měkké evikce. Pokud je chcete odebrat, vytvořte nový fond uzlů, u kterého je explicitně nenastavíte, přesuňte úlohy do nového fondu uzlů a potom odstraňte starý fond uzlů.
Vytvořte konfigurační soubor kubeletu, například
remove-soft-eviction.json. Následující příklad nastaví každou prahovou hodnotu měkkého vystěhování a ochrannou lhůtu na prázdný řetězec, který vypne měkké vystěhování pro tento signál. Také nastaví maximální dobu odkladu před ukončením podu na0, což je standardní výchozí hodnota AKS.{ "softEvictionThreshold": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "softEvictionGracePeriod": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "evictionMaxPodGracePeriodInSeconds": 0 }Pomocí příkazu
--kubelet-configs parametremaz aks nodepool addvytvořte fond uzlů s Linuxem, který používá konfigurační soubor.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./remove-soft-eviction.jsonPřesuňte úlohy do nového fondu uzlů a odstraňte starý fond uzlů. Další informace najdete v tématu Změna velikosti fondů uzlů v AKS.
Informace o potvrzení nastavení uzlu najdete v tématu Ověření nastavení posílení zabezpečení uzlu. Na uzlech v novém poolu uzlů je evictionSoft prázdné.