Az AKSNodeClass erőforrások konfigurálása a csomópontok automatikus kiépítéséhez (NAP) az Azure Kubernetes Service-ben (AKS)

Ez a cikk azt ismerteti, hogyan konfigurálhatja az erőforrásokat az Azure-specifikus csomópont-automatikus kiépítés (NAP) beállításaihoz az Azure Kubernetes Service (AKS)-ben a Karpenter használatával. AKSNodeClass Lehetővé teszi a Karpenter által kiosztott csomópontok különböző aspektusainak testreszabását, például a virtuális gép (VM) lemezképét, az operációs rendszer lemezméretét, a csomópontonkénti podok maximális számát és a kubelet-konfigurációkat.

Fontos

2025. november 30-tól kezdve az Azure Kubernetes Service (AKS) már nem támogatja és nem biztosít biztonsági frissítéseket az Azure Linux 2.0-s verziójához. A linuxos Azure 2.0-s csomópont lemezképe a 202512.06.0 kiadáskor le van fagyasztva. 2026. október 31-től a rendszer eltávolítja a csomópontrendszerképeket, és nem tudja skálázni a csomópontkészleteket. Migráljon támogatott Azure Linux-verzióra azáltal, hogy frissíti a csomópontkészleteket egy támogatott Kubernetes-verzióra vagy migrál az osSku AzureLinux3 verzióra. További információkért lásd a GitHub nyugdíjazási issue-t és az Azure frissítések nyugdíjazási bejelentését. Ha értesülni szeretne a bejelentésekről és frissítésekről, kövesse a AKS kibocsátási megjegyzéseit.

Az AKSNodeClass-erőforrások áttekintése

AKSNodeClass erőforrások lehetővé teszik a NAP Azure-specifikus beállításainak konfigurálását. Minden NodePool erőforrásnak egy AKSNodeClass-ra kell hivatkoznia spec.template.spec.nodeClassRef. Lehet több NodePools, amelyek ugyanarra a AKSNodeClass mutatnak, így megoszthatja a közös Azure-konfigurációkat a különböző csomópontkészletek között.

Fontos

Egy meglévő AKSNodeClass beállítás módosítása nem konfigurálja újra helyben a futó csomópontokat. A NAP az előző konfigurációból kiépített csomópontokat eltértként jelöli meg, és lecseréli őket, a hivatkozott NodePool erőforrások megszakítási szabályozói szerint. A tags mező az egyetlen kivétel, mivel a címkemódosításokat a meglévő Azure-erőforrásokra alkalmazzák a csomópont cseréje nélkül. További információ: Drift és megszakítási költségkeretek. Mielőtt módosítaná az éles számítási feladatok által használt AKSNodeClass elemet, tekintse át ezt az útmutatót.

Képcsalád konfigurációja

A imageFamily mező állítja be az alapértelmezett VM-rendszerképet és a bootstrap-logikát a AKSNodeClass használatával kiépített csomópontok számára. Ha nem ad meg képcsaládot, a rendszer a Kubernetes-verziónak megfelelő alapértelmezett operációsrendszer-verziót használja. A GPU-kat mindkét képcsalád támogatja kompatibilis virtuálisgép-méretekben. Az operációs rendszer Kubernetes-verziónkénti alapértelmezett verziójával kapcsolatos további információkért tekintse meg az AKS os verzió dokumentációját.

Támogatott képcsaládok

  • Ubuntu: Az Ubuntu az AKS-csomópontok alapértelmezett Linux-disztribúciója.
    • Az operációs rendszer alapértelmezett verziója a Kubernetes-verziótól függően változik. Az Ubuntu 22.04 alapértelmezés szerint a Kubernetes 1.25-1.33-ás verzióihoz készült. Az Ubuntu 24.04 a Kubernetes 1.34-s és újabb verzióinak alapértelmezett verziója.
  • AzureLinux: Azure Linux Microsoft alternatív Linux-disztribúciója az AKS-számítási feladatokhoz. További információ: Azure Linux-dokumentáció.
  • AzureContainerLinux: Az Azure Container Linux az AKS 1.34-ben és újabb verzióiban támogatott. Használjon 2. generációs virtuális gépet, és explicit módon engedélyezze mindkét megbízható indítási beállítást, még akkor is, ha egyébként nincs szükség rájuk:
    • Állítsa be security.trustedLaunch.vtpm-t true-re.
    • Állítsa be security.trustedLaunch.secureBoot-t true-re.
    • Ha beállítja a(z) osDiskSizeGB elemet, legalább 60-as értéket használjon.
    • Ne egyesítse ezt a képcsaládot olyan beállításokkal, amelyeket a képe nem támogat. A részletekért lásd Azure Container Linux on AKS-t.
  • Windows2022: Windows Server 2022 előzetes verzióban érhető el. AMD64 architektúrát igényel, és a Cilium adatsíkkal nem támogatott. A Windows2022 nem támogatja a FIPS-t vagy a Trusted Launchot. Ne konfigurálja linuxOSConfig, ne engedélyezze az artifact streaminget, és ne állítsa a LocalDNS beállítást a(z) Disabled-tól eltérő módra.
  • Windows2025: Windows Server 2025 előzetes verzióban érhető el. AMD64 architektúrát igényel, és nem támogatott a Cilium adatsíkkal. A FIPS szükséges, és akkor is ténylegesen engedélyezve van, ha fipsMode nincs megadva. Ne konfigurálja linuxOSConfig, ne engedélyezze az artefaktumstreamelést, és ne állítsa a LocalDNS beállítást más Disabled módra.

Példa képcsalád konfigurációja

Az alábbi példa a AKSNodeClass konfigurálását mutatja be a AzureLinux képcsalád használatára:

spec:
  imageFamily: AzureLinux

Azure Container Linux konfigurációja

Az alábbi példa Azure Container Linuxot használ a szükséges Trusted Launch beállításokkal. Kihagyja osDiskSizeGB , hogy a platform egy támogatott lemezméretet válasszon.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: azure-container-linux
spec:
  imageFamily: AzureContainerLinux
  security:
    trustedLaunch:
      vtpm: true
      secureBoot: true

Windows operációs rendszer támogatása (előzetes verzió)

Note

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 NAP támogatja a Windows2022 és Windows2025 képeket.

  • Windows2022: Windows Server 2022 előzetes verzióban érhető el. AMD64 architektúrát igényel, és a Cilium adatsíkkal nem támogatott. A Windows2022 nem támogatja a FIPS-t vagy a Trusted Launch funkciót. Ne konfigurálja linuxOSConfig, ne engedélyezze az összetevőstreamelést, és ne állítsa a LocalDNS beállítást más Disabled módra.
  • Windows2025: Windows Server 2025 előzetes verzióban érhető el. AMD64 architektúrát igényel, és a Cilium adatsíkkal nem támogatott. A FIPS szükséges, és akkor is ténylegesen engedélyezve van, ha fipsMode nincs megadva. Ne konfigurálja linuxOSConfig, ne engedélyezze az artifact streaminget, és ne állítsa a LocalDNS beállítást a(z) Disabled-től eltérő módra.

Windows2022 konfiguráció

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: windows-2025
spec:
  imageFamily: Windows2025

Windows2025-konfiguráció

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: windows-2025
spec:
  imageFamily: Windows2025
  security:
    trustedLaunch:
      vtpm: true
      secureBoot: true

Fontos

A Windows rendszerképcsaládok előzetes funkciónak minősülnek. Használjon egy Windows-csomópontkészletet NodePool, amely kiválasztja a(z) kubernetes.io/os: windows és kubernetes.io/arch: amd64 elemeket, és győződjön meg arról, hogy a számítási feladatok Windows-csomópontokat is kiválasztanak. További információ: Csomópontkészletek konfigurálása a csomópontok automatikus kiépítéséhez az AKS-en.

FIPS-kompatibilis csomópont lemezképének konfigurálása

A szövetségi információfeldolgozási szabványoknak (FIPS) megfelelő csomópontrendszerképeket is engedélyezheti. Az AKS FIPS-sel kapcsolatos további információkért tekintse meg a FIPS dokumentációját.

A fipsMode mező alapértelmezés szerint Letiltva értékre van állítva, és a következő beállításokra állítható be:

  • FIPS – FIPS-kompatibilis csomópontrendszerképek kiválasztása
  • Letiltva – ne használjon FIPS-kompatibilis csomópontrendszerképeket

Az alábbi példa úgy konfigurálja az "AKSNodeClass"-t, hogy a FIPS-kompatibilis csomópontrendszerképeket a következő beállítással fipsModeFIPSválassza ki:

spec:
  fipsMode: FIPS

Példányszintű nyilvános IP-konfiguráció

Nyilvános IPv4-címet rendelhet az egyes NAP-kiosztott csomópontokhoz, ha a true értékét nodePublicIP.enabled értékre állítja. Opcionálisan megadható a ipTags vagy a prefixIDs. Használja az egyiket vagy a másikat, nem mindkettőt.

Példányszintű nyilvános IP-cím használata előtagokkal

Igény szerint adjon meg egy IPv4 nyilvános IP-előtagot a prefixIDs használatával. Az előtagnak ugyanabban a régióban kell lennie, mint a fürtnek. Zonális előtag esetén korlátozza a megfelelő NodePool elemet ugyanarra a rendelkezésre állási zónára. Nem adhatja meg együtt a(z) ipTags és prefixIDs elemet – csak az egyiket használja.

A klaszteridentitásnak engedélyre van szüksége a nyilvános IP-előtag használatához, ha meg van adva, valamint a csomópont nyilvános IP-erőforrásainak létrehozásához és kezeléséhez. A teljes beállítási, hálózati biztonsági és ellenőrzési útmutatásért tekintse meg a csomópont nyilvános IP-címeinek használatát ismertető témakört.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: public-ip-nodes
spec:
  nodePublicIP:
    enabled: true
    # Optional. Specify at most one IPv4 public IP prefix resource ID.
    prefixIDs:
      - /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name>

Példányszintű nyilvános IP-cím használata IP-címkékkel és internetes útválasztási preferenciával

Az alábbi példa bemutatja, hogyan használhat példányszintű nyilvános IP-címet IP-címkével:

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: public-ip-nodes
spec:
  nodePublicIP:
    enabled: true
    ipTags:
      - ipTagType: RoutingPreference
        tag: Internet
    # Optional. Specify at most one IPv4 public IP prefix resource ID.
    prefixIDs:
      - /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name>

Artifaktum streamelése

Az Artifact Streaming lehetővé teszi tárolólemezképek streamelésére Azure Container Registry (ACR) és Azure Kubernetes Service (AKS) között. Az AKS csak a pod kezdeti indításához szükséges rétegeket húzza le, így kevesebb időt vesz igénybe a számítási feladatok üzembe helyezése.

Prerequisites

  • Az Artifact Streaming használatához prémium szintű ACR-t kell integrálnunk az AKS-fürtbe.
  • Az ACR-ben engedélyezve kell lennie az Artifact Streamingnek.

Az Artifact Streaming dokumentációjában talál útmutatást az Artifact Streaming ACR-ben való engedélyezéséhez.

Artefaktumok streamelésének engedélyezése a NAP-klaszterekben

Azok a fürtök, amelyekben engedélyezve van a Csomópontok automatikus kiépítése (NAP), engedélyezhetik az összetevőstreamelést az AKSNodeClass CRDspec.artifactStreaming.enabled mezőjének használatával. Állítsa ezt a mezőt erre: true, hogy engedélyezze az artefaktumok streamelését az ehhez az AKSNodeClass CRD-hez társított új vagy meglévő, NAP által felügyelt csomópontok számára.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: my-node-class
spec:
  # Enables artifact streaming; To use this feature container images must also enable artifact streaming on ACR
  # Valid values: true, false; defaults to false if not specified
  artifactStreaming:
    enabled: 
      true

Note

Ha az összetevő-streamelést az AKS NAP által felügyelt csomópontokon szeretné használni, engedélyeznie kell az összetevő-streamelést Azure Container Registry (ACR) szolgáltatásban is. Ha nem állítja be ezt a beállítást az ACR-ben, a mező alapértelmezés szerint hamis.

Virtuális hálózat (VNet) alhálózatának konfigurációja

A vnetSubnetID mező határozza meg, hogy melyik Azure virtuális hálózat alhálózatot kell használni a csomóponthálózati adapterek kiépítéséhez. Ez a mező nem kötelező. Ha nem ad meg alhálózatot, a NAP a Karpenter telepítése során konfigurált alapértelmezett alhálózatot használja. További információkért lásd a NAP alhálózati konfigurációit.

Példa alhálózat-konfigurációra

Az alhálózat-azonosítónak teljes Azure Resource Manager (ARM) formátumban kell lennie az alábbi példában látható módon:

spec:
  vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"

Operációsrendszer-lemez méretkonfigurációja

A osDiskSizeGB mező az operációsrendszer-lemez méretét adja meg gigabájtban. Az alapértelmezett érték 128 GB, a minimális érték pedig 30 GB.

Fontolja meg a nagyobb operációsrendszer-lemezméreteket olyan számítási feladatok esetében, amelyek:

  • Jelentős adatok tárolása helyileg.
  • További helyet igényel a konténerképekhez.
  • Magas lemez I/O-követelményekkel rendelkezik.

Példa operációsrendszer-lemez méretkonfigurációja

spec:
  osDiskSizeGB: 256  # 256 GB OS disk

Rövid élettartamú operációsrendszer-lemezkonfiguráció

A NAP automatikusan rövid élettartamú operációsrendszer-lemezeket használ, ha rendelkezésre állnak, és megfelelnek a kért lemezméretnek. A rövid élettartamú operációsrendszer-lemezek jobb teljesítményt és alacsonyabb költségeket biztosítanak a felügyelt lemezekhez képest.

Rövid élettartamú lemezkijelölési feltételek

A rendszer automatikusan kiválasztja a rövid élettartamú lemezeket a következő helyzetekben:

  • A virtuálisgép-példány típusa támogatja a rövid élettartamú operációsrendszer-lemezeket.
  • Az átmeneti lemez kapacitása nagyobb vagy egyenlő a kért osDiskSizeGB lemezzel.
  • A virtuális gép elegendő rövid élettartamú tárolókapacitással rendelkezik.

Ha ezek a feltételek nem teljesülnek, a rendszer visszaesik a felügyelt lemezek használatára.

Rövid élettartamú lemeztípusok és rangsorolás

Azure virtuális gépek különböző típusú rövid élettartamú tárolóval rendelkezhetnek. A rendszer a következő prioritási sorrendet használja:

  • NVMe-lemezek (legnagyobb teljesítmény)
  • Gyorsítótárlemezek (kiegyensúlyozott teljesítmény)
  • Erőforráslemezek (alapteljesítmény)

Példa rövid élettartamú lemezkonfigurációra

A csomópontkészlet követelményeinek használatával biztosíthatja, hogy a csomópontok elegendő rövid élettartamú lemezkapacitással rendelkezzenek, ahogyan az alábbi példában látható:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: ephemeral-disk-pool
spec:
  template:
    spec:
      requirements:
        - key: karpenter.azure.com/sku-storage-ephemeralos-maxsize
          operator: Gt
          values: ["128"]  # Require ephemeral disk larger than 128 GB
      nodeClassRef:
        group: karpenter.azure.com
        kind: AKSNodeClass
        name: my-node-class
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: my-node-class
spec:
  osDiskSizeGB: 128  # This will use ephemeral disk if available and large enough

Ez a konfiguráció biztosítja, hogy csak a 128 GB-nál nagyobb, rövid élettartamú lemezeket tartalmazó virtuálisgép-példányok legyenek kiválasztva, biztosítva a megadott operációsrendszer-lemezmérethez tartozó rövid élettartamú lemezhasználatot.

Podok maximális konfigurációja

A maxPods mező megadja a csomóponton ütemezhető podok maximális számát. Ez a beállítás a fürt sűrűségére és a hálózati konfigurációra is hatással van.

A minimális érték maxPods 10, a maximális érték pedig 250.

Alapértelmezett viselkedés a következőhöz: maxPods

Az alapértelmezett viselkedés a maxPods hálózati beépülő modul konfigurációjától függ. Az alábbi táblázat az alapértelmezett értékeket foglalja össze:

Hálózati beépülő modul konfigurálása Alapértelmezett érték csomópontonként maxPods
Azure CNI standard hálózatkezeléssel (v1 vagy NodeSubnet) 30
Azure CNI átfedéses hálózatkezeléssel 250
Nincs (nincs hálózati beépülő modul) 250
Egyéb konfigurációk 110 (alapértelmezett Kubernetes)

Példa a podok maximális konfigurációjának használatára

spec:
  maxPods: 50  # Allow up to 50 pods per node

LocalDNS-konfiguráció

A LocalDNS üzembe helyez egy csomópontszintű DNS-proxyt, amely a DNS-lekérdezéseket a számítási feladatokhoz közelebb oldja fel, csökkentve a lekérdezések késését, és javítja a rugalmasságot az átmeneti DNS-fennakadások során. További információkért tekintse meg a LocalDNS dokumentációját. Alapértelmezés szerint a LocalDNS le van tiltva, és a következő beállításokra konfigurálható:

  • Disabled (alapértelmezett) – Letiltja a LocalDNS szolgáltatást. A DNS-lekérdezések helyileg nem oldódnak fel a csomóponton.
  • Preferred - Az AKS a Csomópontkészlet Kubernetes-verziója alapján kezeli a LocalDNS-engedélyezést. A konfiguráció mindig érvényesítve van és szerepel benne, de a LocalDNS csak akkor engedélyezett, ha a megfelelő Kubernetes-verziót használja.
  • Required - A LocalDNS érvényesítve van a csomópontkészleten, ha minden előfeltétel teljesül. Ha a követelmények nem teljesülnek, az üzembe helyezés meghiúsul.

Példa LocalDNS-konfigurációra

Testre szabhatja a LocalDNS-konfigurációkat, például vnetDNSOverrides és kubeDNSOverrides. A támogatott beépülő modulokról további információt a LocalDNS testreszabása című témakörben talál.

spec:
  LocalDNS:
    mode: Required
    vnetDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: VnetDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
    kubeDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"

A LocalDNS konfigurációjának frissítése egy meglévő AKSNodeClasson

A localDNS beállítás a többi AKSNodeClass beállításhoz hasonlóan az eltérésészlelésben is részt vesz. Ha módosítja a(z) spec.localDNS elemet egy olyan AKSNodeClass objektumon, amelyre a meglévő csomópontok már hivatkoznak, a NAP a módosítást a standard Drift mechanizmuson keresztül alkalmazza. A NAP nem végzi el a meglévő csomópontok újratelepítését.

A következő viselkedés érvényes a LocalDNS mód vagy felülbírálások módosításakor, például a Disabledmode értékről Required értékre való módosításakor:

  • Új csomópontok: Minden csomópont, amelyet a NAP azután helyez üzembe, miután frissíti a AKSNodeClass-t, az új LocalDNS-konfigurációt használja.
  • Meglévő csomópontok: A NAP a meglévő NodeClaim objektumokat eltérőként jelöli, mert a rögzített konfigurációjuk már nem egyezik a AKSNodeClass. A NAP elindít egy cserecsomópontot, amely az új LocalDNS-konfigurációt használja, majd kordon alá helyezi, kiüríti és eltávolítja a sodródott csomópontot.
  • Nincs újratelepítés: A LocalDNS engedélyezése egy AKS által felügyelt csomópontkészleten a készlet minden csomópontját újratelepíti. A NAP ehelyett a csomópontot cseréli le. Akárhogy is, az érintett csomópontokon lévő podok kiürítésre és újraütemezésre kerülnek, ezért számoljon ugyanekkora munkaterhelési hatással.

Fontos

A PreferredAKSNodeClass vagy mode értékre állítása szintén megváltoztatja a feloldott Disabled konfigurációt, és eltolódást okoz a meglévő csomópontokban. A localDNS szakaszon belüli bármilyen változás, beleértve az kubeDNSOverrides és vnetDNSOverrides értékeket is, csomópontcserét okoz.

A csere indításakor

A drift kiértékelése és cseréje amint alkalmazza a frissített AKSNodeClass-t, azonnal megkezdődik. A csere a szokásos NAP-zavar életciklusát követi, így az ütem és az időzítés azokon a megszakításvezérlőkön múlik, amelyeket a(z) AKSNodeClass elemre hivatkozó NodePool erőforrásokon konfigurál.

Hogyan vezényli a NAP a cserét

A LocalDNS-változás által okozott eltérés betartja a következő táblázatban ismertetett szabványos NAP-megszakítási vezérlőket:

Vezérlő A LocalDNS által indukált csere hatása
Zavarköltségvetések (spec.disruption.budgets) A korlát korlátozza, hogy egyszerre hány csomópontot cserél le a NAP. Ha nem határoz meg költségvetéseket, a NAP alapértelmezés szerint egy költségvetést nodes: 10%ad meg, így egyidejűleg a csomópontkészlet csomópontjainak legfeljebb 10 százalékát zavarja meg.
Költségvetés schedule és duration A csere egy karbantartási időszakra korlátozódik. Állítsa a(z) nodes: "0" elemet az ablakon kívülre a csere letiltásához.
Pod megszakítási költségvetések (PDB-k) A csomópont kiürítése során alkalmazza. A NAP a PDB-t megsértő podok kilakoltatása helyett várakozik.
karpenter.sh/do-not-disrupt széljegyzet Kizárja az annotációval ellátott podokat és node-okat az önkéntes megszakításból, beleértve a driftet is.
terminationGracePeriod A kupakok leürítési ideje. Ez a beállítás megkerüli a PDB-ket és a karpenter.sh/do-not-disrupt annotációt, amikor az időkorlát lejár.

A csere sem teljesen soros, sem teljesen párhuzamos. A NAP kiépít egy helyettesítő kapacitást, mielőtt eltávolít egy eltérő állapotú csomópontot, de több olyan csomópontot is lecserélhet, amelyek egyidejűleg ugyanarra AKSNodeClass hivatkoznak, egészen a zavarköltségkeretek által beállított korlátig.

Warning

Ha nem határoz meg megszakítási költségvetéseket a csomópontkészleteken, és nem határoz meg podmegszakítási költségvetéseket a számítási feladatokhoz, a AKSNodeClass módosítása egy terhelt localDNS-on egyszerre akár a csomópontok 10 százalékát is megzavarhatja alkalmazásszintű védelem nélkül, ami a számítási feladatok leállását okozhatja. Definiáljon PDB-ket a kritikus munkaterhelésekhez, és állítson be egy konzervatív megszakítási költségvetést, mielőtt módosítaná a(z) localDNS elemet egy éles fürtön.

Csökkentse a rendelkezésre állási kockázatot a LocalDNS engedélyezésével

  1. Győződjön meg arról, hogy az egyéni DNS-kiszolgálók a csomópont alhálózatából az UDP-n és a 53-as TCP-porton keresztül is válaszolnak a lekérdezésekre. További információ: Egyéni DNS ellenőrzése a LocalDNS engedélyezése előtt.

  2. Pod disruption budgetek meghatározása minden kritikus munkaterheléshez.

  3. Mielőtt módosítaná a(z) NodePool elemet, állítson be egy konzervatív megszakítási költségvetést az érintett AKSNodeClass erőforrásokra, ahogyan az az alábbi példában látható:

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      disruption:
        budgets:
        - nodes: "1"   # Replace one node at a time
    
  4. Először alkalmazza a localDNS módosítást egy nem éles környezetben AKSNodeClass. Másik lehetőségként hozzon létre egy AKSNodeClass elemet, amelyen engedélyezve van a LocalDNS, és migrálja a számítási feladatokat egy olyan NodePool elemre, amely arra hivatkozik.

  5. A NodeClaim-ek listázásával monitorozza a csere előrehaladását. A csere akkor fejeződik be, ha egyetlen csomópontigény sem jelzi a(z) Drifted állapotfeltételt.

    # List node claims and watch replacements appear as drifted nodes are removed
    kubectl get nodeclaims
    
    # Inspect the status conditions on a specific node claim
    kubectl describe nodeclaim <nodeclaim-name>
    
  6. Ellenőrizze, hogy a LocalDNS aktív-e a cserecsomópontokon. További információkért lásd: A LocalDNS működésének ellenőrzése.

Kubelet-konfiguráció

A kubelet szakasz lehetővé teszi különböző kubelet-paraméterek konfigurálását, amelyek befolyásolják a csomópontok viselkedését. Ezek a paraméterek tipikus kubelet-argumentumok, ezért a Azure szolgáltató egyszerűen átadja őket a csomópont kubeletjének.

Fontos

Konfigurálja körültekintően a kubelet beállításait, és először tesztelje a nem gyártási környezetek módosításait.

CPU-kezelés

A kubelet processzorkezelési viselkedését az alábbi beállítások szabályozzák:

spec:
  kubelet:
    cpuManagerPolicy: "static"  # or "none"
    cpuCFSQuota: true
    cpuCFSQuotaPeriod: "100ms"
  • cpuManagerPolicy: Azt szabályozza, hogy a kubelet hogyan foglalja le a CPU-erőforrásokat. Állítsa be "static" értékre a CPU-hoz kötést a késésérzékeny munkaterhelések esetén.
  • cpuCFSQuota: Engedélyezi a CPU Teljesen fair Scheduler (CFS) kvótakényszerítését a cpu-korlátokat meghatározó tárolók esetében.
  • cpuCFSQuotaPeriod: Beállítja a CPU CFS kvótaidőszakát.

Kép szemétgyűjtése

Az alábbi beállítások szabályozzák a kubelet kép szemétgyűjtési viselkedését.

spec:
  kubelet:
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

Ezek a beállítások szabályozzák, hogy a kubelet mikor hajtja végre a tárolólemezképek szemétgyűjtését:

  • imageGCHighThresholdPercent: Lemezhasználat százalékos aránya, amely elindítja a rendszerkép szemétgyűjtését.
  • imageGCLowThresholdPercent: Céllemezhasználat százalékos aránya a szemétgyűjtés után.

Topológiakezelés

Az alábbi beállítás szabályozza a kubelet topológiakezelő házirendjét:

spec:
  kubelet:
    topologyManagerPolicy: "best-effort"  # none, restricted, best-effort, single-numa-node

A topológiakezelő segít koordinálni a késésre érzékeny számítási feladatok erőforrás-lefoglalását a processzor- és eszközerőforrások (például GPU)-erőforrások között.

Rendszerkonfiguráció

Az alábbi beállítások lehetővé teszik további rendszerparaméterek konfigurálását a kubelethez:

spec:
  kubelet:
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"
    containerLogMaxSize: "50Mi"
    containerLogMaxFiles: 5
    podPidsLimit: 4096
  • allowedUnsafeSysctls: A podok számára használható engedélyezett nem biztonságos sysctls-ek listája.
  • containerLogMaxSize: A tároló naplófájljainak maximális mérete forgatás előtt.
  • containerLogMaxFiles: A megőrzendő tároló naplófájljainak maximális száma.
  • podPidsLimit: A podokban engedélyezett folyamatok maximális száma.

Egyéni Linux operációsrendszer-konfigurációs beállítások

A LinuxOSConfig szakasz lehetővé teszi különböző kubelet-paraméterek konfigurálását, amelyek befolyásolják a csomópontok viselkedését. Ezek a paraméterek általában egyéni operációsrendszer-argumentumok, ezért a NAP egyszerűen átadja őket a csomópont kubeletjének.

Az egyéni Linux operációsrendszer-konfigurációs beállításokról, az alapértelmezett értékekről és szempontokról az egyéni csomópontkonfigurációs paraméterekkel kapcsolatos referenciában talál további információt.

Fontos

Konfigurálja körültekintően a Linux operációsrendszer-beállításokat, és először tesztelje a nem gyártási környezetek módosításait.

Linux-fájlkezelő korlátainak beállításai

A fájlrendszer beállításainak beállításához használja az alábbi beállításokat.

spec:
  linuxOSConfig: 
    # Sysctl Settings  
    sysctls:  
      # File System Settings  
      fsFileMax: 2000000               # Range: 8192-12000500  Default: Max of available range
      fsInotifyMaxUserWatches: 1000000 # Range: 781250-2097152 Default: 1048576
      fsAioMaxNr: 1000000              # Range: 65536-6553500  Default: 65536
      fsNrOpen: 1000000                # Range: 8192-20000500  Default: 1048576

Linux-szoftvercsatorna- és hálózathangolási beállítások

A TCP és a hálózati beállítás beállításához használja az alábbi beállításokat.

spec:
  linuxOSConfig:
      # Network Settings  
      netCoreSomaxconn: 65535          # Range: 4096-3240000  Default: 16384
      netCoreNetdevMaxBacklog: 5000    # Range: 1000-3240000  Default: 1000
      netCoreRmemMax: 134217728        # Range: 212992-134217728  Default: 1048576
      netCoreOptmemMax: 102400         # Range: 20480-4194304     Default: 131072 
      netCoreWmemMax: 134217728        # Range: 212992-134217728  Default: 212992
      netCoreRmemDefault: 212992       # Range: 212992-134217728  
      netCoreWmemDefault: 212992       # Range: 212992-134217728  
      netIPv4IPLocalPortRange: "1024 65535" # Format: "first last", first: 1024-60999, last: 32768-65535  

      # Neighbor Table GC Thresholds  
      netIPv4NeighDefaultGcThresh1: 1024   # Range: 128-80000  Default: 4096
      netIPv4NeighDefaultGcThresh2: 2048   # Range: 512-80000  Default: 8192
      netIPv4NeighDefaultGcThresh3: 4096   # Range: 1024-80000  Default: 16384
      # Note: thresh1 <= thresh2 <= thresh3  

      # Connection Tracking  
      netNetfilterNfConntrackBuckets: 131072  # Range: 65536-524288   Default: dynamically calculated 
      netNetfilterNfConntrackMax: 262144       # Range: 131072-2097152 Default: dynamically calculated 

Linux-munkafolyamatok korlátbeállításai

A kernelbeállítás beállításához használja az alábbi beállításokat.

spec:
  linuxOSConfig:
      # Kernel Settings  
      kernelThreadsMax: 100000         # Range: 20-513785  Default: Dynamically calculated

Linux rendszerű virtuális memória beállításai

Az alábbi beállításokkal hangolhatja a Linux kernel Linux rendszerű virtuális memória alrendszerének működését és a piszkos adatok lemezre való írását.

spec:
  linuxOSConfig:
      # Memory Management  
      vmMaxMapCount: 262144          # Range: 65530-262144 Default: Max of available range
      vmVfsCachePressure: 100        # Range: 0-100  Default: 100
      vmSwappiness: 60               # Range: 0-100  Default: 60

      # Swap File Configuration  
      swapFileSize: "2Gi"             # Default: (not set) | Pattern: quantity with units Note: Requires kubelet.failSwapOn: false  

      # Transparent Huge Pages  
      transparentHugePageEnabled: "madvise"    # Values: [always, madvise, never]  Default: always
      transparentHugePageDefrag: "defer+madvise" # Values: [always, defer, defer+madvise, madvise, never]  Default: madvise

GPU-beállítások

Az alábbi mezőben engedélyezheti az egyéni GPU-illesztőprogramok telepítését, például az NVIDIA GPU-operátorral.

spec:
  gpu:
    mode: 
      # acceptable values: [driver, none] default(or if not specified): driver
      # none skips gpu driver installation, driver has NAP manage the GPU driver installation  
      none

Felügyelt GPU

A gpu.mode mező szabályozza a GPU-illesztő telepítését. Elfogadja a(z) Driver vagy None értéket, és alapértelmezés szerint Driver. Állítsa be None , hogy kihagyja az illesztőprogram telepítését, például az NVIDIA GPU-operátor használatakor.

A felügyelt NVIDIA GPU-élmény bekapcsolásához használja a(z) mode: Driver elemet, és állítsa be a(z) nvidia.managementMode: Managed elemet. A felügyelt GPU támogatott az AKS Machine API kiépítési módját használó linuxos NVIDIA GPU-csomópontok esetén. Az alapértelmezett NVIDIA felügyeleti mód a Unmanaged.

spec:
  gpu:
    mode: Driver
    nvidia:
      managementMode: Managed

A teljes, NAP által felügyelt GPU-példáért és az ellenőrzési lépésekért tekintse meg az AKS által felügyelt GPU-csomópontokat.

Biztonsági beállítások

Titkosítás a gazdagépen

Az alábbi mező azt határozza meg, hogy a gazdagépszintű titkosítás engedélyezve van-e a kiépített csomópontokhoz. Ha ezt a mezőt true értékre állítja, a NAP csak olyan példánybeállításokat tartalmaz, amelyek támogatják a gazdagépszintű titkosítást.

spec:
  security:
    encryptionatHost: 
      # acceptable values: [true, false] default(or if not specified): false  
      false

A gazdagépen alapuló titkosítással kapcsolatos további információkért lásd: A gazdagépen alapuló titkosítás dokumentációja.

Egyénileg felügyelt kulcsok és lemeztitkosítási csoportok

A NAP támogatja az ügyfél által kezelt kulcsokat és lemeztitkosítási készleteket használó fürtöket. Engedélyezze ezeket a beállításokat fürtszinten. AKSNodeClass Nincsenek olyan mezők, amelyeket be kell állítania. Győződjön meg arról, hogy a fürtidentitás rendelkezik a megfelelő szerepköralapú hozzáférésvezérléssel (RBAC):

  • A fürt identitása Reader hozzáféréssel rendelkezik a lemeztitkosítási készlethez.
  • A lemeztitkosítási készlet erőforrása Key Vault Crypto Service Encryption User hozzáfér az Azure Key Vaulthoz.

A fürt létrehozásakor engedélyezett ügyfél által felügyelt kulcsokkal és lemeztitkosítási készletekkel kapcsolatos információkért lásd a Ügyfél által felügyelt kulcsok dokumentációját.

Megbízható indítás engedélyezése NAP-fürtökben

A csomópontok automatikus kiépítésével (NAP) rendelkező fürtök a AKSNodeClass CRDspec.security.trustedLaunch mezőjének használatával engedélyezhetik a megbízható indítást. Állítsa a vTPM és secureBoot mezőket true értékre, hogy engedélyezze a megbízható indítást az ehhez az AKSNodeClass CRD-hez társított új vagy meglévő, NAP által felügyelt csomópontokhoz.

spec:
  security:
  # Enables trusted lunch
  # Valid values: true, false; defaults to false if not specified
     trustedLaunch:
       secureBoot: true
       vTPM: true   

Azure erőforráscímkék konfigurációja

Megadhat Azure erőforráscímkéket, amelyek egy adott AKSNodeClass erőforrás használatával létrehozott összes virtuálisgép-példányra vonatkoznak. A címkék hasznosak a költségkövetéshez, az erőforrás-szervezéshez és a megfelelőségi követelményekhez.

Címkék korlátozásai

  • Azure erőforráscímkék erőforrásonként 50 címkét tartalmaznak.
  • A címkenevek nem érzékenyek a kis- és nagybetűkre, de a címke értékei megkülönböztetik a kis- és nagybetűket.
  • Azure nem használható címkeneveket foglal le. További információkért tekintse meg a címke útmutatását és korlátait.

Példacímkék konfigurációja

spec:
  tags:
    Environment: "production"
    Team: "platform"
    Application: "web-service"
    CostCenter: "engineering"

Átfogó AKSNodeClass konfigurációs példa

Az alábbi példa egy átfogó AKSNodeClass konfigurációt mutat be, amely a cikkben tárgyalt összes beállítást tartalmazza:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      nodeClassRef:
        group: karpenter.azure.com
        kind: AKSNodeClass
        name: comprehensive-example
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: comprehensive-example
spec:
  # Image family configuration
  # Default: Ubuntu
  # Valid values: Ubuntu, AzureLinux, AzureContainerLinux
  imageFamily: Ubuntu

  # FIPS compliant mode - allows support for FIPS-compliant node images
  # Default: Disabled
  # Valid values: FIPS, Disabled
  fipsMode: Disabled

  # Artifact Streaming- allows use of artifact streaming feature; To use this feature container images must also enable artifact streaming on ACR
  # Valid values: true, false; defaults to false if not specified
  artifactStreaming:
    enabled: true

  # LocalDNS mode - allows use of LocalDNS feature
  # Default: Disabled
  # Valid values: Preferred, Required, Disabled
  # vnetDNSOverrides and kubeDNSOverrides are both required, even when mode is Disabled
  # Each list must include the "." and "cluster.local" zones, and each zone must set all nine fields
  localDNS:
    mode: Disabled
    # vnetDNSOverrides apply to DNS traffic from pods with dnsPolicy:default and from kubelet
    vnetDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: VnetDNS   # the "." zone can't forward to ClusterCoreDNS in vnetDNSOverrides
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS   # cluster.local can't forward to VnetDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
    # kubeDNSOverrides apply to DNS traffic from pods with dnsPolicy:ClusterFirst
    kubeDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"

  # Virtual network subnet configuration (optional)
  # If not specified, uses the default --vnet-subnet-id from Karpenter installation
  vnetSubnetID: "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"

  # OS disk size configuration
  # Default: 128 GB
  # Minimum: 30 GB
  osDiskSizeGB: 128

  # Maximum pods per node configuration
  # Default behavior depends on network plugin:
  # - Azure CNI with standard networking: 30 pods
  # - Azure CNI with overlay networking: 250 pods
  # - Other configurations: 110 pods
  # Range: 10-250
  maxPods: 30

  # GPU driver installation (optional)
  # Default: driver - NAP manages gpu driver installation
  # none skips gpu driver installation
  # Valid values: driver, none
  gpu:
    mode: 
      driver

  # Azure resource tags (optional)
  # Applied to all VM instances created with this AKSNodeClass
  tags:
    Environment: "production"
    Team: "platform-team"
    Application: "web-service"
    CostCenter: "engineering"

  # Kubelet configuration (optional)
  # All fields are optional with sensible defaults
  kubelet:
    # CPU management policy
    # Default: "none"
    # Valid values: none, static
    cpuManagerPolicy: "static"

    # CPU CFS quota enforcement
    # Default: true
    cpuCFSQuota: true

    # CPU CFS quota period
    # Default: "100ms"
    cpuCFSQuotaPeriod: "100ms"

    # Image garbage collection thresholds
    # imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent
    # Range: 0-100
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

    # Topology manager policy
    # Default: "none"
    # Valid values: none, restricted, best-effort, single-numa-node
    topologyManagerPolicy: "best-effort"

    # Allowed unsafe sysctls (optional)
    # Comma-separated list of unsafe sysctls or patterns
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"

    # Container log configuration
    # containerLogMaxSize default: "50Mi"
    containerLogMaxSize: "50Mi"
    
    # containerLogMaxFiles default: 5, minimum: 2
    containerLogMaxFiles: 5

    # Pod process limits
    # Default: -1 (unlimited)
    podPidsLimit: 4096

  security:
  # Enables trusted lunch
  # Valid values: true, false; default(or if not specified): false  
     trustedLaunch:
      secureBoot: true
      vTPM: true
  # Encryption at host
     encryptionatHost: 
      # acceptable values: [true, false] default(or if not specified): false  
      false

Következő lépések

Az AKS-ben a csomópontok automatikus kiépítésével kapcsolatos további információkért tekintse meg az alábbi cikkeket: