Csomópontkeményítés (előzetes verzió) a Azure Kubernetes Service (AKS)

A Node Hardening a Linux-csomópontkészletek egyik választható funkciója, amely védi a csomópontok stabilitását, ha a számítási feladatok a csomópontokat CPU-, memória- vagy lemezterhelés alá helyezik. Amikor engedélyezi a Node Hardeninget egy fürtben, az AKS megváltoztatja, hogy az egyes csomópontok hogyan foglalják le és hogyan tartatják be az erőforrás-foglalásokat és -korlátokat a Kubernetes-összetevők és a gazdagépszolgáltatások számára, valamint hogy a kubelet hogyan kilakoltatja a podokat, amikor szűkösek az erőforrások.

Ez a cikk bemutatja, hogy a Node Hardening milyen változásokat hajt végre, összehasonlítja a megerősített alapértelmezett beállításokat a szabványos AKS-alapértelmezett értékekkel, és bemutatja, hogyan engedélyezheti, ellenőrizheti, szabhatja testre és tilthatja le a funkciót.

Important

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióihoz részleges támogatást nyújt az ügyfélszolgálat a tőle telhető legjobb módon. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

A Node hardening előnyei

Elfoglalt vagy ingadozó terhelésű csomópontokon a számítási feladatok olyan erőforrásokat használhatnak fel, amelyekre a kubeletnek, a tároló futtatókörnyezetének és a gazdagépszolgáltatásoknak szükségük van. Ha ez történik, a csomópontok nem válaszolhatnak, NotReady állapotot jelenthetnek, vagy a podokat hirtelen leállíthatják. A Node Hardening a következő módokon csökkenti ezeket a kockázatokat:

  • Kényszerített foglalások: Az AKS alapértelmezés szerint csak a kube-reserved értékeket használja annak kiszámításához, hogy az ütemező mennyi kapacitást tud a podok számára kiosztani. A Node Hardening használatával a kubelet a kube-reserved és a rendszer által fenntartott kapacitást is érvényesíti Linux-vezérlőcsoportokon (cgroupokon) keresztül. A kubelet és a containerd egy dedikált kubereserved.slice cgroupban fut, így fenntartott CPU-megosztásukat és memóriájukat akkor is megőrzik, ha a podok telítik a csomópont erőforrásait.
  • Dedikált kapacitás a gazdagépszolgáltatásokhoz: A csomópontmegerősítés egy rendszer által fenntartott foglalást ad hozzá a gazdagép operációsrendszer-szolgáltatásaihoz, amelyek a(z) system.slice környezetben futnak.
  • Nagyobb memóriatartalék: A rendelkezésre álló memória kemény kilakoltatási küszöbértéke a csomópont memóriájával arányosan skálázódik, így a kubelet kilakoltatja a podokat, mielőtt a csomópont memóriája kritikusan alacsonyra csökken.
  • Kíméletes kiürítés: Az enyhe kiürítési küszöbértékek lehetővé teszik, hogy a kubelet kíméletesen kiürítse a podokat, leállítási türelmi idővel, ha kevés a memória vagy a lemezterület. A kemény kiürítés, amely azonnal leállítja a podokat, majd végső megoldásként szolgál.
  • Podsűrűséggel skálázható foglalások: A kube által fenntartott memória kiszámítása a csomópontonkénti podok maximális számával növekszik, ami figyelembe veszi a kubelet és a containerd többletterhelését a több pod futtatásához.

Milyen változások lépnek fel a Node Hardening engedélyezésekor?

Az alábbi táblázatok összehasonlítják a Kubernetes 1.29-et vagy újabb verziót futtató Linux-csomópontok alapértelmezett értékeit az AKS által a Node Hardening engedélyezésekor érvényes alapértelmezett értékekkel.

Erőforrás-foglalások

Setting Node megerősítés nélkül Node megerősítésével
Kube-fenntartott CPU A processzormagok száma alapján. További információ: CPU-foglalások. Változatlan
Kube-fenntartott memória min(20 × maxPods + 50, 25% of node memory) MiB min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB
Kube-fenntartott folyamatazonosítók (PID-k) 1000 Nincs lefoglalva
Rendszer által fenntartott CPU None 100m
Rendszer által fenntartott memória None 200 MiB, további 100 MiB minden teljes 32 GiB csomópontmemória után, valamint 100 MiB az Azure CNI-t használó fürtökhöz
Rendszer által fenntartott ideiglenes tárhely None 1Gi

Kiszorítási küszöbértékek

Setting Csomópont megerősítése nélkül Csomópontok megerősítésével
Kényszerített eltávolítás: memory.available 100Mi 250Mi a 8 GiB vagy annál kisebb memóriával rendelkező csomópontok esetében, 375Mi a 8 GiB-nél nagyobb és 32 GiB-nél kisebb memóriával rendelkező csomópontok, valamint 512Mi a 32 GiB vagy annál nagyobb méretű csomópontok esetében
Kényszerített eltávolítás: nodefs.available és nodefs.inodesFree 10% és 5% Változatlan
Kényszerített kiürítés: pid.available 2000 Nincs beállítva
Puha kiléptetés: memory.available None 500Mi, 750Mi, vagy 1Gi, ugyanazokat a csomóponti memóriaszinteket használva, mint a kemény kiürítés, 30 másodperces türelmi idővel
Rugalmas kiürítés: nodefs.available és nodefs.inodesFree None 12% és 7%, mindegyik 2 perces türelmi idővel
A pod leállítási türelmi idejének maximális időtartama lágy kilakoltatás során Nincs beállítva 60 másodperc

cgroup kikényszerítése

Setting Node megerősítése nélkül Node megerősítése
Kikényszerített csomópont kiosztható erőforrásai pods pods, kube-reservedés system-reserved
Kubelet és containerd cgroup system.slice, korlátok nélkül kubereserved.slice, a memória a kube által fenntartott memóriára korlátozódik, és a processzormegosztás arányos a kube által fenntartott cpu-val
Gazda szolgáltatások cgroup system.slice, korlátok nélkül system.slice, a memóriája a rendszer számára fenntartott memóriára korlátozódik, és a CPU-részesedése a rendszer számára fenntartott CPU-val arányos

Mivel a Node Hardening több kapacitást foglal le, a csomópontok kevesebb kiosztható kapacitást mutatnak a podokhoz. Például egy 4 virtuális processzorral és 16 GiB memóriával rendelkező csomóponton, amely Azure CNI-t használ, a csomópont megerősítésének engedélyezése az alábbiak szerint csökkenti a lefoglalható kapacitást:

  • A csomópontonkénti alapértelmezett maximum 250 pod körülbelül 570 MiB memóriát, 100 millicore CPU-t és 1 GiB rövid élettartamú tárhelyet igényel.
  • Csomópontonként legfeljebb 30 pod, körülbelül 1,3 GiB memória, 100 millicore CPU és 1 GiB ideiglenes tárhely mellett.

A rugalmas kilakoltatási küszöbértékek nem csökkentik a lefoglalható kapacitást. Csak akkor változnak, ha a kubelet elkezdi kilakoltatni a podokat.

Considerations

A csomópontkeményítés engedélyezése előtt tartsa szem előtt az alábbi szempontokat:

  • A csomópontkeményítést a fürt szintjén engedélyezheti, és ez a fürt összes Linux-csomópontkészletére vonatkozik. Nem engedélyezhető az egyes csomópontkészletekhez, és ez nem érinti a Windows rendszerű csomópontkészleteket.
  • A csomópontok kevesebb kiosztható kapacitást jeleznek, ezért előfordulhat, hogy a csomóponton a Node Hardening engedélyezése előtt elférő podok később nem férnek el. Tekintse át a pod erőforrás-kérelmeket és a csomópontkészletek méreteit.
  • A system.slice gazdagépszolgáltatások a rendszer által fenntartott memóriával megegyező szigorú memóriakorláton osztoznak. Ha saját ügynököket futtat a csomópontokon systemd-szolgáltatásokként, például biztonsági, monitorozási vagy naplótovábbítási ügynökökként, ezek az ügynökök beleszámítanak ebbe a korlátba. Ellenőrizze a memóriahasználatot és a stabilitást, mielőtt éles környezetben használja a Node Hardeninget.
  • A csomópontkészlet egyéni kubelet-konfigurációjában megadott értékek felülbírálják a megfelelő Node Hardening-alapértelmezéseket. További információ: Csomópontmegerősítési beállítások testreszabása.
  • Ha később letiltja a Node Hardeninget, a meglévő csomópontkészletek megtartják a megerősített enyhe kiürítési beállításokat, még a csomópontok újraépítése után is. A beállítások eltávolításához új csomópontkészleteket kell létrehoznia. További információ: Node Hardening letiltása.
  • Az alapértelmezett értékek változhatnak, amíg a szolgáltatás előzetes verzióban van. Kezdje egy nem éles fürttel, és ellenőrizze a munkaterheléseket reprezentatív csomóponti erőforrás-terhelési helyzetek mellett.

Prerequisites

  • Azure-előfizetés. Ha még nincs előfizetése, hozzon létre egy ingyenes fiókot.
  • Linux-csomópontkészletekkel rendelkező AKS-fürt, vagy egy ilyen létrehozásához szükséges jogosultságok.
  • Az alábbi szakaszokban ismertetett aks-preview Azure CLI-bővítmény és a CustomNodeConfigPreview feature flag.

Az aks-preview Azure CLI-bővítmény telepítése

  1. Telepítse a bővítményt aks-preview a az extension add parancs használatával.

    az extension add --name aks-preview
    
  2. Frissítsen a bővítmény legújabb verziójára a az extension update parancs használatával.

    az extension update --name aks-preview
    

Regisztráld a CustomNodeConfigPreview funkciójelzőt

  1. Regisztrálja a CustomNodeConfigPreview funkciójelzőt a az feature register parancs használatával.

    az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    

    Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban.

  2. A parancs használatával ellenőrizze a regisztrációs állapotot az feature show .

    az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"
    
  3. Ha az állapot Regisztrált, frissítse a Microsoft.ContainerService erőforrás-szolgáltató regisztrációját a az provider register parancs használatával.

    az provider register --namespace "Microsoft.ContainerService"
    

Csomópont megerősítésének engedélyezése

Az előzetes időszakban a Node Hardening alapértelmezés szerint nincs engedélyezve.

Csomópontvédelem engedélyezése egy új fürtön

Hozzon létre egy fürtöt, amelyen engedélyezve van a csomópontmegerősítés a az aks create paranccsal, a --enable-node-hardening paraméterrel.

Ehhez a parancshoz a aks-preview bővítmény és a CustomNodeConfigPreview funkciójelző kapcsoló szükséges. További információ: Előfeltételek.

az aks create \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --enable-node-hardening \
    --generate-ssh-keys

A módosítás megerősítéséhez olvassa el a Csomópont-megkeményítési beállítások ellenőrzése című témakört.

Csomópont megerősítésének engedélyezése egy meglévő fürtön

A csomópontkeményítés engedélyezése meglévő fürtön a az aks update paranccsal, a --enable-node-hardening paraméterrel.

Ehhez a parancshoz a aks-preview bővítmény és a CustomNodeConfigPreview feature flag szükséges. További információ: Előfeltételek.

az aks update \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --enable-node-hardening

A módosítás megerősítéséhez olvassa el a Csomópont-megkeményítési beállítások ellenőrzése című témakört.

Csomópontmegerősítési beállítások ellenőrzése

  1. Kérje le a fürt hitelesítő adatait a az aks get-credentials parancs használatával.

    az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
    
  2. A kubelet konfigurációs végpontjának lekérdezésével tekintse át a csomópont érvényes kubelet-foglalási és kilakoltatási beállításait.

    kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'
    

    Egy megerősített csomóponton a systemReserved és a evictionSoft értékeket tartalmaznak, a enforceNodeAllocatable pedig magában foglalja a kube-reserved és a system-reserved elemet.

  3. Hasonlítsa össze a csomópont kapacitását az lefoglalható erőforrásokkal.

    kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'
    

    Egy megerősített csomóponton az allokálható CPU, a memória és az ideiglenes tároló alacsonyabb, mint a kapacitás. A különbség megegyezik az Erőforrás-foglalások kube-fenntartott és rendszer által fenntartott értékeivel, valamint a Kiürítési küszöbértékek alatti kemény küszöbértékekkel. Például egy 4 virtuális processzorral és 16 GiB memóriával rendelkező, Azure CNI-t használó csomóponton a kiosztható CPU 240 millicores értékkel alacsonyabb, mint a kapacitás: 140 millicores kube-reserved CPU és 100 millicores system-reserved CPU.

Csomópontmegerősítési beállítások testreszabása

Egyéni kubelet-konfigurációval felülbírálhatja a Linux-csomópontkészlet kube-fenntartott és kiszorítási alapértelmezett beállításait. Ezekhez a beállításokhoz a CustomNodeConfigPreview funkciójelző szükséges. Használhatja őket, függetlenül attól, hogy a csomópontmegerősítés engedélyezve van-e a fürtön. Az AKS kezeli a rendszer által fenntartott értékeket és a cgroup kényszerítését, és nem lehet testre szabni őket.

Minden beállítás felülírja az erőforrás-foglalások vagy kiürítési küszöbértékek tábláinak egy sorát. A Kube által fenntartott sorok a kubeReserved beállításhoz tartoznak. A kemény kilakoltatási sorok megfelelnek a hardEvictionThreshold beállításoknak. A puha kilakoltatási sorok a softEvictionThreshold és softEvictionGracePeriod beállításoknak felelnek meg. A pod leállítási türelmi időszaka megfelel a következőnek: evictionMaxPodGracePeriodInSeconds.

A következő beállításokat konfigurálhatja:

Setting Overrides Description
kubeReserved.cpuMillicores Kube-fenntartott CPU A Kubernetes rendszerdémonjai számára fenntartott CPU millimagokban.
kubeReserved.memoryMB Kube-fenntartott memória A Kubernetes rendszer démonjai számára fenntartott memória a MiB-ben.
hardEvictionThreshold.memoryAvailable Kényszerített kiürítés: memory.available A rendelkezésre álló memória kemény kiszorítási küszöbértéke.
hardEvictionThreshold.nodeFsAvailable Végleges kényszerített eltávolítás: nodefs.available A rendelkezésre álló csomópont fájlrendszerterületének kemény kilakoltatási küszöbértéke.
hardEvictionThreshold.nodeFsInodesFree Kényszerített kiürítés: nodefs.inodesFree A csomópont fájlrendszeri inode-jainak szigorú kilakoltatási küszöbértéke.
softEvictionThreshold.memoryAvailable Lágy kizárás: memory.available Puha kiürítési küszöbérték a rendelkezésre álló memóriához.
softEvictionThreshold.nodeFsAvailable Nem végleges kilakoltatás: nodefs.available Puha kiürítési küszöbérték a csomópont rendelkezésre álló fájlrendszerterületére.
softEvictionThreshold.nodeFsInodesFree Nem végleges kizárás: nodefs.inodesFree A csomópont fájlrendszerében lévő szabad inode-ok puha kiürítési küszöbértéke.
softEvictionGracePeriod.memoryAvailable Enyhe kiürítés: memory.available türelmi időszak Mennyi ideig kell a rendelkezésre álló memóriának a puha küszöbértéke alatt maradnia, mielőtt a kubelet eltávolítja a podokat.
softEvictionGracePeriod.nodeFsAvailable Kíméletes kiürítés: nodefs.available türelmi időszak Mennyi ideig kell a rendelkezésre álló csomópont-fájlrendszerterületnek a puha küszöbérték alatt maradnia, mielőtt a kubelet kilakoltatja a podokat.
softEvictionGracePeriod.nodeFsInodesFree Enyhe kiürítés: nodefs.inodesFree türelmi időszak Mennyi ideig kell a csomópont fájlrendszerének szabad inode-jainak a puha küszöbérték alatt maradniuk, mielőtt a kubelet eltávolítja a podokat.
evictionMaxPodGracePeriodInSeconds A pod leállítási türelmi idejének maximális időtartama lágy kiürítés során A kubelet által megengedett maximális másodpercszám, amely lehetővé teszi a podok leállítását a puha kilakoltatás során.
  • Az egyes beállítások megengedett értékeiről, minimális értékeiről és érvényesítési szabályairól lásd az AKS egyéni csomópontkonfigurációs paramétereit.
  • Minden kiürítési jelnél állítsa be a lágy kiürítési küszöbértéket és annak megfelelő türelmi időtartamát, és győződjön meg arról, hogy az egyes lágy kiürítési küszöbértékek nagyobbak ugyanahhoz a jelhez tartozó hard kiürítési küszöbértéknél.
  1. Hozzon létre egy kubelet konfigurációs fájlt, például nodehardening-kubelet.json, azokkal a beállításokkal, amelyeket testre szeretne szabni. Az alábbi példa minden konfigurálható értéket beállít. A kube-reserved értékét 200 millicore CPU-ra és 1024 MiB memóriára állítja. Beállítja a rendelkezésre álló memória 10%, a rendelkezésre álló fájlrendszerterület 5% és a szabad inódok 512Mi szigorú kiürítési küszöbértékeit. Beállítja a helyreállítható kiürítési küszöbértékeket: 7%, 1Gi és 12%, 30 másodperces, 2 perces és 2 perces türelmi időszakokkal. Emellett 60 másodperces maximális pod leállítási türelmi időszakot is beállít.

    {
      "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
    }
    
  2. Hozzon létre egy Linux-csomópontkészletet, amely a konfigurációs fájlt használja a --kubelet-config paraméterrel használt az aks nodepool add paranccsal.

    az aks nodepool add \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --kubelet-config ./nodehardening-kubelet.json
    

    A az aks create paramétert a --kubelet-config paranccsal is használhatja a fürt kezdeti csomópontkészletére való konfiguráció alkalmazásához.

Node megerősítésének letiltása

Tiltsa le a Node Hardening funkciót a --disable-node-hardening paranccsal, a az aks update paraméter használatával.

Ehhez a parancshoz a aks-preview bővítmény és a CustomNodeConfigPreview funkciókapcsoló szükséges. További információ: Előfeltételek.

az aks update \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --disable-node-hardening

A Csomópont-megerősítés letiltása kikapcsolja a fürtszintű beállítást, de nem módosítja azonnal a meglévő csomópontokat. A meglévő csomópontok mindaddig megőrzik az összes keményített beállítást, amíg újra nem telepítik rájuk a lemezképet, például egy csomópont lemezképének frissítése során. A csomópont újratelepítése után a következő módosítások lépnek életbe:

  • Visszaállítva a szabványos AKS-alapértelmezésekre: Kube-fenntartott és rendszer által fenntartott erőforrások, szigorú kiürítési küszöbértékek és cgroup-kényszerítés. A csomópont kiosztható kapacitása ennek megfelelően növekszik.
  • Megtartva: A puha kilakoltatási küszöbértékek, a puha kilakoltatási türelmi időszakok és a pod megszüntetésére vonatkozó türelmi időszak maximális időtartama puha kilakoltatás során.

Egyéni kubelet-konfigurációt csak fürt vagy csomópontkészlet létrehozásakor állíthat be, így nem távolíthatja el a megőrzött soft eviction beállításokat egy meglévő csomópontkészletből. Az eltávolításukhoz hozzon létre egy új csomópontkészletet, amely kifejezetten visszaállítja ezeket, helyezze át a számítási feladatokat az új csomópontkészletbe, majd törölje a régi csomópontkészletet.

  1. Hozzon létre egy kubelet konfigurációs fájlt, például remove-soft-eviction.json. Az alábbi példa minden puha kiürítési küszöbértéket és türelmi időszakot üres sztringre állít be, amely kikapcsolja az adott jelzéshez tartozó puha kiürítést. Emellett a podvégzítés maximális türelmi idejét is 0 értékre állítja, amely a standard AKS alapértelmezett értéke.

    {
      "softEvictionThreshold": {
        "memoryAvailable": "",
        "nodeFsAvailable": "",
        "nodeFsInodesFree": ""
      },
      "softEvictionGracePeriod": {
        "memoryAvailable": "",
        "nodeFsAvailable": "",
        "nodeFsInodesFree": ""
      },
      "evictionMaxPodGracePeriodInSeconds": 0
    }
    
  2. Hozzon létre egy Linux-csomópontkészletet, amely a konfigurációs fájlt használja a --kubelet-config paraméterrel használt az aks nodepool add paranccsal.

    az aks nodepool add \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --kubelet-config ./remove-soft-eviction.json
    
  3. Helyezze át a számítási feladatokat az új csomópontkészletbe, majd törölje a régi csomópontkészletet. További információ: Csomópontkészletek átméretezése az AKS-ben.

A csomópont beállításainak megerősítéséhez tekintse meg a Csomópontkeményítési beállítások ellenőrzése című témakört. Az új csomópontkészlet csomópontjain a evictionSoft üres.