Ajánlott eljárások a Scheduler speciális funkcióihoz az Azure Kubernetes Service (AKS) szolgáltatásban

A fürtök Azure Kubernetes Service (AKS) használatával történő kezelése során gyakran el kell különítenie a csoportokat és a számítási feladatokat. A Kubernetes-ütemező speciális funkcióival szabályozhatja a következőket:

  • Mely podok ütemezhetők bizonyos csomópontokon.
  • A több podos alkalmazások megfelelő elosztása a fürtön.

Ez az ajánlott eljárásokat ismertető cikk a fürtüzemeltetők speciális Kubernetes-ütemezési funkcióival foglalkozik. Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • A fertőzöttség és a toleranciák használatával korlátozhatja, hogy mely podok ütemezhetők a csomópontokon.
  • Előnyben részesítheti a podokat, hogy bizonyos csomópontokon fussanak csomópontválasztókkal vagy csomópont-affinitással.
  • A podok szétosztása vagy csoportosítása podok között affinitással vagy anti affinitással.
  • Korlátozza az olyan számítási feladatok ütemezését, amelyek gpu-kat igényelnek csak az átütemezhető GPU-kkal rendelkező csomópontokon.

Dedikált csomópontokat biztosít a fertőzöttség és tolerancia alapján

Ajánlott eljárások útmutatója:

Az erőforrás-igényes alkalmazások, például a bejövőforgalom-vezérlők hozzáférésének korlátozása adott csomópontokra. Tartsa elérhetővé a csomópont-erőforrásokat az őket igénylő számítási feladatokhoz, és ne engedélyezze a csomópontokon lévő egyéb számítási feladatok ütemezését.

Az AKS-fürt létrehozásakor GPU-támogatással vagy nagy teljesítményű PROCESSZORokkal helyezhet üzembe csomópontokat. További információ: GPU-k használata az AKS-en. Ezeket a csomópontokat nagy adatfeldolgozási számítási feladatokhoz, például gépi tanuláshoz (ML) vagy mesterséges intelligenciához (AI) használhatja.

Mivel ez a csomóponti erőforráshardver üzembe helyezése általában költséges, korlátozza az ezeken a csomópontokon ütemezhető számítási feladatokat. Ehelyett dedikáljon néhány csomópontot a fürtben a bejövő szolgáltatások futtatásához és más számítási feladatok megelőzéséhez.

A különböző csomópontok támogatása több csomópontkészlet használatával érhető el. Az AKS-fürtök egy vagy több csomópontkészletet támogatnak.

A Kubernetes-ütemező fertőzöttségeket és toleranciákat használ a csomópontokon futtatható számítási feladatok korlátozásához.

  • Alkalmazzon fertőzöttet egy csomópontra annak jelzésére, hogy csak bizonyos podok ütemezhetők rajtuk.
  • Ezután alkalmazzon egy toleranciát egy podra, amely lehetővé teszi számukra, hogy tolerálják a csomópontok fertőzöttségét.

Amikor podot helyez üzembe egy AKS-fürtön, a Kubernetes csak azokra a csomópontokra ütemez podokat, amelyek fertőzöttségéhez igazodik a toleranciához. A fertőzöttség és a toleranciák együtt gondoskodnak arról, hogy a podok ne legyenek nem megfelelő csomópontokra ütemezve. A rendszer egy vagy több fertőzöttet alkalmaz egy csomópontra, és megjelöli a csomópontot, hogy ne fogadjon el olyan podokat, amelyek nem tolerálják a fertőzöttségeket.

Tegyük fel például, hogy hozzáadott egy csomópontkészletet az AKS-fürtben GPU-támogatással rendelkező csomópontokhoz. Meg kell adnia a nevet, például a GPU-t, majd egy értéket az ütemezéshez. Ha ezt az értéket NoSchedule értékre állítja , azzal korlátozza a Kubernetes-ütemezőt a csomóponton nem definiált tűrésű podok ütemezésében.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name taintnp \
    --node-taints sku=gpu:NoSchedule \
    --no-wait

A csomópontkészlet csomópontjaira alkalmazott fertőzöttség esetén a pod specifikációjában meghatározhat egy tűrést, amely lehetővé teszi a csomópontok ütemezését. Az alábbi példa az sku: gpu előző effect: NoSchedule lépésben a csomópontkészletre alkalmazott és a tűrést határozza meg:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Ha ezt a podot a használatával kubectl apply -f gpu-toleration.yamlhelyezi üzembe, a Kubernetes sikeresen ütemezheti a podot a csomópontokon a fertőzöttség alkalmazásával. Ezzel a logikai elkülönítéssel szabályozhatja a fürtön belüli erőforrásokhoz való hozzáférést.

A fertőzöttség alkalmazásakor az alkalmazásfejlesztőkkel és a tulajdonosokkal együttműködve határozza meg a szükséges tűréseket az üzemelő példányokban.

További információ a több csomópontkészlet AKS-ben való használatáról: Több csomópontkészlet létrehozása fürthöz az AKS-ben.

A fertőzöttek és a toleranciák viselkedése az AKS-ben

Amikor az AKS-ben frissít egy csomópontkészletet, a fertőzöttség és a tűrések egy beállított mintát követnek az új csomópontokra való alkalmazásukkor:

Az Azure Virtual Machine Scale Sets-t használó alapértelmezett fürtök

A csomópontkészletet az AKS API-ból is beszennyezheti , hogy az újonnan felskálázott csomópontok megkapják az API által megadott csomópont-fertőzöttségeket.

Tegyük fel, hogy:

  1. Először egy kétcsomópontos fürttel kell kezdenie: node1 és node2.
  2. Frissíti a csomópontkészletet.
  3. Két másik csomópont jön létre: node3 és node4.
  4. A fertőzöttek a megfelelő módon lesznek átadva.
  5. Az eredeti csomópont1 és csomópont2 törlődik.

Virtual Machine Scale Sets támogatás nélküli fürtök

Tegyük fel ismét, hogy:

  1. Kétcsomópontos fürtje van: node1 és node2.
  2. Frissíti a csomópontkészletet.
  3. Létrejön egy további csomópont: node3.
  4. A node1-ből származó fertőzöttség a node3-ra lesz alkalmazva.
  5. node1 törölve.
  6. A rendszer létrehoz egy új csomópont1-et az eredeti csomópont1 helyére.
  7. A csomópont2-fertőzöttek az új csomópontra lesznek alkalmazva1.
  8. a node2 törlődik.

Lényegében a node1csomópont3, a node2 pedig az új csomópont1 lesz.

Amikor skáláz egy csomópontkészletet az AKS-ben, a fertőzöttség és a tűrések nem lesznek szándékosak.

Csomópontválasztók és affinitás alapján szabályozza a podok ütemezését

Ajánlott eljárások útmutatója

A csomópontokon lévő podok ütemezésének szabályozása csomópontválasztók, csomópont-affinitás vagy podok közötti affinitás használatával. Ezek a beállítások lehetővé teszik, hogy a Kubernetes-ütemező logikailag elkülönítse a számítási feladatokat, például a csomópont hardvere alapján.

A fertőzöttség és a toleranciák logikailag elkülönítik az erőforrásokat egy szigorú leválasztással. Ha a pod nem tolerálja a csomópontok fertőzését, akkor nincs ütemezve a csomóponton.

Másik lehetőségként csomópontválasztókat is használhat. A csomópontokat például úgy címkézheti meg, hogy helyileg csatlakoztatott SSD-tárolót vagy nagy mennyiségű memóriát jeleznek, majd a pod specifikációjában definiáljon egy csomópontválasztót. A Kubernetes ütemezi ezeket a podokat egyező csomóponton.

A toleranciától eltérően a megfelelő csomópontválasztóval nem rendelkező podok továbbra is ütemezhetők a címkézett csomópontokon. Ez a viselkedés lehetővé teszi a csomópontok nem használt erőforrásainak felhasználását, de rangsorolja az egyező csomópontválasztót meghatározó podokat.

Lássunk egy példát a nagy mennyiségű memóriával rendelkező csomópontokra. Ezek a csomópontok rangsorolják a nagy mennyiségű memóriát igénylő podokat. Annak érdekében, hogy az erőforrások ne üljenek tétlenül, más podok futtatását is lehetővé teszik. Az alábbi példaparancs hozzáad egy hardware=highmem címkével rendelkező csomópontkészletet a myResourceGroupmyAKSCluster eleméhez. A csomópontkészlet összes csomópontja rendelkezik ezzel a címkével.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name labelnp \
    --node-count 1 \
    --labels hardware=highmem \
    --no-wait

A pod specifikációja ezután hozzáadja a tulajdonságot egy nodeSelector csomópontválasztó definiálásához, amely megfelel a csomóponton beállított címkekészletnek:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  nodeSelector:
      hardware: highmem

Ha ezeket az ütemezőbeállításokat használja, az alkalmazásfejlesztőkkel és a tulajdonosokkal együttműködve engedélyezze számukra a pod specifikációinak helyes meghatározását.

További információ a csomópontválasztók használatáról: Podok hozzárendelése csomópontokhoz.

Csomópont-affinitás

A csomópontválasztó egy alapvető megoldás podok adott csomóponthoz való hozzárendeléséhez. A csomópont-affinitás nagyobb rugalmasságot biztosít, így meghatározhatja, hogy mi történik, ha a pod nem felel meg egy csomópontnak. A következőket teheti:

  • Megkövetelheti , hogy a Kubernetes-ütemező megegyezzen egy címkézett gazdagéppel rendelkező podtal. Vagy
  • Válasszon egyezést, de engedélyezze a pod ütemezését egy másik gazdagépen, ha nem áll rendelkezésre egyezés.

Az alábbi példa a csomópont affinitását a requiredDuringSchedulingIgnoredDuringExecution értékre állítja. Ez az affinitás megköveteli, hogy a Kubernetes-ütemezés egy megfelelő címkével rendelkező csomópontot használjon. Ha nincs elérhető csomópont, a podnak várnia kell az ütemezés folytatására. Ha engedélyezni szeretné, hogy a pod egy másik csomóponton legyen ütemezve, beállíthatja az értéket előnyben részesítettDuringSchedulingIgnoreDuringExecution értékre:

kind: Pod
apiVersion: v1
metadata:
  name: tf-mnist
spec:
  containers:
  - name: tf-mnist
    image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: hardware
            operator: In
            values:
            - highmem

A beállítás IgnoredDuringExecution része azt jelzi, hogy a podot nem szabad kizárni a csomópontból, ha a csomópontfeliratok megváltoznak. A Kubernetes-ütemező csak az ütemezett új podok frissített csomópontcímkéit használja, a csomópontokon már ütemezett podokat nem.

További információ: Affinitás és anti affinitás.

Podok közötti affinitás és anti-affinitás

A Kubernetes-ütemező egyik végső megközelítése a számítási feladatok logikai elkülönítéséhez a podok közötti affinitás vagy az affinitás-ellenes kapcsolat használata. Ezek a beállítások azt határozzák meg, hogy a podokat vagy nem szabadvagy ütemezni egy meglévő egyező podot tartalmazó csomóponton. Alapértelmezés szerint a Kubernetes-ütemező több podot próbál ütemezni egy csomópontok közötti replikakészletben. Ennél a viselkedésnél konkrétabb szabályokat is meghatározhat.

Van például egy webalkalmazása, amely egy Azure Cache for Redis is használ.

  • Pod-affinitás-ellenes szabályokkal kérheti, hogy a Kubernetes-ütemező ossza el a replikákat a csomópontok között.
  • Affinitási szabályokkal biztosíthatja, hogy minden webalkalmazás-összetevő ugyanarra a gazdagépre legyen ütemezve, mint egy megfelelő gyorsítótár.

A podok csomópontok közötti eloszlása az alábbi példához hasonlóan néz ki:

1. csomópont 2. csomópont 3. csomópont
webapp-1 webapp-2 webapp-3
cache-1 cache-2 cache-3

A podok közötti affinitás és az affinitás-ellenesség összetettebb üzembe helyezést biztosít, mint a csomópontválasztók vagy csomópont-affinitás. Az üzembe helyezéssel logikailag elkülönítheti az erőforrásokat, és szabályozhatja, hogy a Kubernetes hogyan ütemezze a podokat a csomópontokon.

Ennek a webalkalmazásnak a teljes példájáért Azure Cache for Redis példa: Podok közös megkeresése ugyanazon a csomóponton.

Következő lépések

Ez a cikk a Kubernetes scheduler speciális funkcióira összpontosított. Az AKS-ben végzett fürtműveletekkel kapcsolatos további információkért tekintse meg az alábbi ajánlott eljárásokat: