Csomópont-pöttyök használata az Azure Kubernetes Szolgáltatás (AKS) fürtben

Ez a cikk azt ismerteti, hogyan használhat csomópont-szennyezettségeket egy Azure Kubernetes Service (AKS)-fürtön.

Áttekintés

Az AKS ütemezési mechanizmusa felelős a podok csomópontokra való elhelyezéséért, és a felsőbb rétegbeli Kubernetes-ütemezőn, a kube-scheduleren alapul. A podok adott csomópontokon való futtatását korlátozhatja úgy, hogy a podokat csomópont-affinitással egy csomópontkészlethez csatolja, vagy utasítja a csomópontot, hogy taszítsa el a podok egy csoportját csomópont-szennyeződések használatával, amelyek az AKS-ütemezővel kommunikálnak.

A csomópontok foltjai megjelölnek egy csomópontot, hogy az ütemező rendszer ne helyezzen el bizonyos podokat a megjelölt csomópontokon. Elnézéseket helyezhet el egy podon, hogy az ütemező egy hozzáillő jelöléssel rendelkező csomóponton ütemezhesse azt. A taints és a tolerations együtt segít szabályozni, hogy az ütemező hogyan helyezi el a podokat a csomópontokra. További információkért lásd a taintok és a toleranciák példahasználati eseteit.

A taints kulcs-érték párok effektussal. Az effektusmezőnek három értéke van a csomóponthálózatok használatakor: NoExecute, NoScheduleés PreferNoSchedule.

  • NoExecute: A csomóponton már futó podok azonnal törlődnek, ha nem rendelkeznek megfelelő tűréssel. Ha egy pod rendelkezik megfelelő tűréssel, előfordulhat, hogy kizárásra kerül, ha tolerationSeconds meg van adva.
  • NoSchedule: Ezen a csomóponton csak a megfelelő tűrésű podok vannak elhelyezve. A meglévő podok nem lesznek kiürítve.
  • PreferNoSchedule: Az ütemező nem helyez el olyan podokat, amelyek nem rendelkeznek megfelelő tűréssel.

Csomópont-fertőzöttség beállításai

Az AKS csomópontokhoz kétféle csomópont-taint alkalmazható: csomópont-taint és csomópont-inicializálási taint.

  • A csomópont szennyezések állandóan a csomóponton maradnak a csomópont affinitással rendelkező podok ütemezéséhez. A csomópontok szennyezései csak az AKS API használatával adhatók hozzá, frissíthetők vagy távolíthatók el teljesen.
  • A csomóponti inicializálási foltok a rendszerindításkor kerülnek a csomópontra, és ideiglenesen alkalmazandók, például olyan helyzetekben, amikor a csomópontok beállításához további időre lehet szükség. A Kubernetes API-val eltávolíthatja a csomópontinicializálási szennyezettséget, és ezek nem garantáltak a csomópont életciklusa során. Ezek a csomópont új replikáin jelennek meg, amikor felskálázzák, vagy az összes replikán, amikor a csomópontot frissítik. Ha teljesen el szeretné távolítani az inicializálási hibákat, az AKS API-val eltávolíthatja őket, miután a Kubernetes API-val megszüntette a csomópontok felkenését. Miután az AKS API-val eltávolítja az inicializálási jelöléseket a fürt specifikációjából, az újonnan létrehozott csomópontok már nem tartalmazzák ezeket az inicializálási jelöléseket. Ha az inicializálási fertőzöttség továbbra is jelen van a meglévő csomópontokon, véglegesen eltávolíthatja azt egy csomópontrendszerkép-frissítési művelet végrehajtásával.

Feljegyzés

Az AKS-csomópontkészlet API-val alkalmazott csomópontok és címkék nem módosíthatók a Kubernetes API-ból, és fordítva. A rendszerfoltok módosítása nem engedélyezett.

Ez nem vonatkozik a csomópont inicializálási taintjeire.

Csomópont korlátok használata

Előfeltételek

Ez a cikk feltételezi, hogy van egy meglévő AKS klasztere. Ha AKS-fürtre van szüksége, létrehozhat egyet Azure CLI, Azure PowerShell vagy a Azure portál használatával.

Csomópontkészlet létrehozása csomópont-fertőzöttséggel

  1. Hozzon létre egy csomópontkészletet a parancs használatával az aks nodepool add , és használja a --node-taints paramétert a fertőzöttség megadásához sku=gpu:NoSchedule .

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-count 1 \
        --node-taints "sku=gpu:NoSchedule" \
        --no-wait
    
  2. Ellenőrizze a csomópontkészlet állapotát.

  3. Ellenőrizze, hogy a taint be van-e állítva a csomóponton.

Csomópontkészlet frissítése csomópont-fertőzöttség hozzáadásához

  1. Frissítsen egy csomópontkészletet a csomópont-fertőzöttség hozzáadásához a az aks nodepool update parancs használatával, és használja a --node-taints paramétert a fertőzöttség megadásához sku=gpu:NoSchedule .

    az aks nodepool update \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-taints "sku=gpu:NoSchedule" \
        --no-wait
    
  2. Ellenőrizze a csomópontkészlet állapotát.

  3. Ellenőrizze, hogy a fertőzöttség be van-e állítva a csomóponton.

Csomópont-inicializálási szennyezések használata (előzetes verzió)

Fontos

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óit részben az ügyfélszolgálat támogatja a tőlük 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:

Előfeltételek és korlátozások

  • Telepítenie és konfigurálnia kell a Azure CLI 3.0.0b3 vagy újabb verzióját. A verzió azonosításához futtassa a következőt: az --version. Ha telepítenie vagy frissítenie kell, tekintse meg a Install Azure CLI című témakört.
  • Az inicializálási taint-eket csak a fürt létrehozásakor vagy frissítésekor alkalmazhatja, amikor az AKS API-t használja. Ha olyan ARM-sablont használ, amely egy felügyelt fürtszintű műveletet eredményez, megadhatja a csomópont inicializálási szennyezettségeit a csomópontkészlet létrehozása és frissítése során. Az ügynökkészletszintű műveletek blokkolva vannak, ha NodeInitializationTaints megtalálhatók a kérelem törzsében.
  • Az inicializálási bélyegek nem alkalmazhatók Windows csomópontkészletekre az Azure CLI használatával.

A fürt hitelesítő adatainak lekérése

  • Kérje le az AKS-fürt hitelesítő adatait a az aks get-credentials paranccsal.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

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

  • Regisztrálja vagy frissítse az aks-preview bővítményt a az extension add vagy az extension update parancs használatával.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

Regisztrálja a NodeInitializationTaintsPreview funkciójelzőt

  1. Regisztrálja a NodeInitializationTaintsPreview funkciójelzőt a az feature register paranccsal.

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

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

  2. Ellenőrizze a regisztrációs állapotot a az feature show paranccsal.

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

    az provider register --namespace Microsoft.ContainerService
    

Klaszter létrehozása csomópont inicializálási toleranciával

  1. Hozzon létre egy fürtöt egy csomópont inicializálási akadályával a az aks create parancs és a --node-init-taints paraméter segítségével, hogy meghatározza a sku=gpu:NoSchedule akadályt.

    Fontos

    Az Ön által megadott csomópont-inicializálási szennyezések a fürt összes csomópontcsoportjára vonatkoznak. Ha egy adott csomópontra szeretné alkalmazni az inicializálási hibát, a parancssori felület helyett ARM-sablont használhat.

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --node-count 1 \
        --node-init-taints "sku=gpu:NoSchedule" \
        --generate-ssh-keys
    
  2. Ellenőrizze a csomópontkészlet állapotát.

  3. Ellenőrizze, hogy a taint be van-e állítva a csomóponton.

Fürt frissítése csomópont inicializálási fertőzöttség hozzáadásához

  1. Frissítsen egy fürtöt, hogy hozzáadjon egy csomópont inicializálási fertőzöttet a az aks update parancs és a --node-init-taints paraméter használatával a fertőzöttséghez.sku=gpu:NoSchedule

    Fontos

    Amikor csomópont inicializálási fertőzöttséggel frissít egy fürtöt, a hibák a fürt összes csomópontkészletére érvényesek. Ha a csomópontok VMSS-t használnak, megtekintheti a csomópont inicializálási taint-ek frissítéseit a csomópont VMSS-modelljének frissítését követően (például a csomópont képfájljának verziófrissítése után). Az inicializálási foltok nem fognak megjelenni a csomópontokon, amíg egy VMSS modellfrissítést kiváltó művelet meg nem történik.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints "sku=gpu:NoSchedule"
    
  2. Ellenőrizze a csomópontkészlet állapotát.

  3. Ellenőrizze, hogy a taint be van-e állítva a csomóponton.

A csomópontkészlet állapotának ellenőrzése

  • A csomópont- vagy inicializálási fertőzöttség alkalmazása után ellenőrizze a csomópontkészlet állapotát a az aks nodepool list paranccsal.

    az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
    

    Ha taint-eket alkalmazott a csomópontokra, az alábbi példakimenet azt mutatja, hogy a <node-pool-name> csomópontkészlet Creating csomópontokkal rendelkezik, amelyek a megadott nodeTaints-et tartalmazzák:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

    Ha csomópont inicializálási hibákat alkalmazott, az alábbi példakimenet azt mutatja, hogy a <node-pool-name> csomópontkészlet Creating a megadott nodeInitializationTaintscsomópontokkal rendelkező csomópontok:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeInitializationTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

Ellenőrizze, hogy a fertőzöttség be van-e állítva a csomóponton

  • A kubectl describe node paranccsal ellenőrizze a csomópont taint-jeit és az inicializálási taint-eket a csomópont konfigurációjában.

    kubectl describe node $NODE_NAME
    

    Ha csomópontszennyeződéseket alkalmazott, az alábbi példakimenet azt mutatja, hogy a <node-pool-name> csomópontkészlete a megadott Taints.

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: sku=gpu:NoSchedule
        ...
        ],
        ...
     ...
    ]
    

Fontos

Ha a csomópontok VMSS-t használnak, a csomópont-inicializálási hibák nem lesznek láthatók a fürt tényleges csomópontjaikon, amíg nem történik meg a VMSS-modell frissítését kiváltó művelet (például a Kubernetes verziófrissítése vagy a csomópont képverziójának frissítése).

Csomópont szennyeződések eltávolítása

Adott csomópont-fertőzöttség eltávolítása

  • Távolítsa el a csomópont-fertőzötteket a az aks nodepool update paranccsal. Az alábbi példaparancs eltávolítja a "sku=gpu:NoSchedule" csomópont-fertőzöttet a csomópontkészletből.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --node-taints ""
    

Az összes csomópont-taint eltávolítása

  • Távolítsa el az összes csomópont-fertőzést egy csomópontkészletből a az aks nodepool update parancs használatával. Az alábbi példaparancs eltávolítja az összes csomópont-fertőzést a csomópontkészletből.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $NODE_POOL_NAME \
    --node-taints ""
    

Csomópont-inicializálási hibák eltávolítása

A csomópont inicializálási fertőzöttjeinek eltávolítására az alábbi lehetőségek állnak rendelkezésre:

  • Ideiglenesen távolítsa el a csomópont-inicializálási tainteket a Kubernetes API használatával. Ha így távolítja el őket, a fertőzöttek újra megjelennek a csomópontok skálázása vagy frissítése után. Skálázás után az új csomópontok még mindig rendelkeznek a csomópont inicializálási bélyegével. A csomópont-inicializálási hibák a frissítés után minden csomóponton megjelennek.
  • A csomópont inicializálási taintjainak végleges eltávolításához törölje a csomópontot a Kubernetes API használatával, majd távolítsa el a fertőzöttet az AKS API használatával. Miután az inicializálási taint-eket eltávolították a fürt specifikációjából az AKS API-val, az újraimázsolási műveletek után létrehozott új csomópontok már nem rendelkeznek inicializálási taint-ekkel.

Ha eltávolítja az összes inicializálási fertőzött előfordulást a csomópontkészlet replikáiból, előfordulhat, hogy a meglévő inicializálási fertőzöttség az új inicializálási hibákkal végzett frissítés után újra megjelenik.

Csomópont inicializálási fertőzöttjeinek ideiglenes eltávolítása

  • A parancs használatával ideiglenesen távolítsa el a csomópont-inicializálási kubectl taint nodes hibákat.

    Ez a parancs csak a megadott csomópontról távolítja el a fertőzöttet. Ha el szeretné távolítani a fertőzöttet a csomópontkészlet minden csomópontjáról, minden olyan csomópontra futtatnia kell a parancsot, amelyből el szeretné távolítani a fertőzöttet.

    kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
    

    Az eltávolítás után a csomópont-inicializálási beszennyeződések újra megjelennek, amikor a csomópontok skálázása vagy frissítése megtörténik.

Csomópont-inicializálási hibák végleges eltávolítása

  1. Kövesse a Csomópont inicializálási taintjeinek ideiglenes eltávolítása lépéseit a csomópont inicializálási taintjének eltávolításához a Kubernetes API használatával.

  2. Távolítsa el a fertőzöttet a csomópontról az AKS API használatával a az aks update parancs használatával. Ez a parancs eltávolítja a csomópont-inicializálási taintet a fürt minden csomópontjáról.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints ""
    

Ellenőrizze, hogy a taint el lett-e távolítva a csomópontról

  • A kubectl describe node paranccsal ellenőrizze a csomópont taint-jeit és az inicializálási taint-eket a csomópont konfigurációjában.

    kubectl describe node $NODE_NAME
    

    Ha eltávolított egy csomópont gyalázást, az alábbi példakimenet azt mutatja, hogy a <node-pool-name> csomópontkészlet nem rendelkezik az eltávolított gyalázással a Taints név alatt.

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

Következő lépések