Megosztás a következőn keresztül:


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

Amikor fürtöket kezel az Azure Kubernetes Service-ben (AKS), gyakran el kell különítenie a csapatokat és a számítási feladatokat. A Kubernetes-ütemező által biztosított speciális funkciók lehetővé teszik az alábbiak vezérlését:

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

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

  • A csomópontokon ütemezhető podok korlátozásához használjon elrekesztéseket és tűréseket.
  • Előnyben részesítheti a podokat, ha bizonyos csomópontokon csomópontválasztókkal vagy csomópont-affinitással futnak.
  • Szétválaszthatja vagy csoportosíthatja a podokat a podok közötti affinitással vagy anti affinitással.
  • Korlátozza az olyan számítási feladatok ütemezését, amelyekhez GPU-kra van szükség csak olyan csomópontokon, amelyeken a gpu-k átütemezhetők.

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

Ajánlott eljárásokkal kapcsolatos útmutató:

Erőforrás-igényes alkalmazások, például bejövőforgalom-vezérlők hozzáférésének korlátozása adott csomópontokra. A csomópont erőforrásainak rendelkezésre állása az őket igénylő számítási feladatokhoz, és nem teszi lehetővé a csomópontokon lévő egyéb számítási feladatok ütemezését.

Az AKS-fürt létrehozásakor a csomópontok GPU-támogatással vagy nagy számú nagy teljesítményű CPU-val telepíthetők. 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óponterőforrás-hardver telepítése általában költséges, korlátozza az ezeken a csomópontokon ütemezhető számítási feladatokat. Ehelyett a fürt egyes csomópontjait arra szánja, hogy bejövő szolgáltatásokat futtasson, és megakadályozza a többi számítási feladatot.

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ője aints és tolerations használatával korlátozza, hogy mely számítási feladatok futtathatók a csomópontokon.

  • Alkalmazzon egy fertőzöttet egy csomópontra, amely azt jelzi, hogy csak bizonyos podok ütemezhetők rajtuk.
  • Ezután alkalmazzon egy toleranciát egy podra, amely lehetővé teszi számukra, hogy elviseljék a csomópontok szennyezettségét.

Amikor podot helyez üzembe egy AKS-fürtön, a Kubernetes csak azokra a csomópontokra ütemez podokat, amelyek szennyezettségéhez igazodik a tűrés. A fertőzöttségek és 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, megjelölve a csomópontot, hogy ne fogadjon el olyan podokat, amelyek nem tolerálják a fertőzötteket.

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

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 eltűnéssel 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 előző lépésben a sku: gpu csomópontkészletre alkalmazott szennyezettség meghatározására és effect: NoSchedule tolerálására szolgál:

kind: Pod
apiVersion: v1
metadata:
  name: app
spec:
  containers:
  - name: app
    image: <your-workload>:gpu
    resources:
      requests:
        cpu: 0.5
        memory: 2Gi
      limits:
        cpu: 4.0
        memory: 16Gi
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

A pod üzembe helyezésekor kubectl apply -f gpu-toleration.yamla 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 erőforrásaihoz való hozzáférést.

Ha fertőzötteket alkalmaz, 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 taints és a tolerations viselkedése az AKS-ben

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

Az Azure-beli virtuálisgép-méretezési csoportokat használó alapértelmezett fürtök

Az AKS API-ból beszennyezhet egy csomópontkészletet , 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: csomópont1 és csomópont2.
  2. Frissítse a csomópontkészletet.
  3. Két másik csomópont jön létre: node3 és node4.
  4. A fertőzötteket a rendszer átadja.
  5. Az eredeti csomópont1 és a csomópont2 törlődik.

Virtuálisgép-méretezési csoportok nélküli fürtök támogatása

Tegyük fel ismét, hogy:

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

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

Ha az AKS-ben skáláz egy csomópontkészletet, a fertőzöttség és a tűrések nem a terv szerint lesznek átadva.

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ókkal, csomópont-affinitással vagy podközi affinitással. 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 taints és a tolerations logikailag elkülöníti az erőforrásokat egy szigorú leválasztással. Ha a pod nem tolerálja a csomópontok szennyezettségét, az nincs ütemezve a csomóponton.

Másik lehetőségként csomópontválasztókat is használhat. Felcímkézze például a csomópontokat a helyileg csatlakoztatott SSD-tároló vagy nagy mennyiségű memória jelzésére, majd a pod specifikációjában definiáljon egy csomópontválasztót. A Kubernetes ütemezi ezeket a podokat egy megfelelő csomóponton.

A tűrésekkel ellentétben a megfelelő csomópontválasztó nélküli 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.

Tekintsünk meg 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 egy hardver=highmem címkével rendelkező csomópontkészletet ad hozzá a myAKSClusterhez a myResourceGroupban. 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: app
spec:
  containers:
  - name: app
    image: <your-workload>: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, együttműködjön az alkalmazásfejlesztőkkel és a tulajdonosokkal, hogy lehetővé tegyék 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:

  • Követelje meg , hogy a Kubernetes ütemezője egyezik egy pod és egy címkézett gazdagép között. Vagy
  • Válasszon egyezést, de ha nem érhető el egyezés, engedélyezze a pod ütemezését egy másik gazdagépen.

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ése 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é a pod ütemezését egy másik csomóponton, beállíthatja az értéket előnyben részesítettDuringSchedulingIgnoreDuringExecution értékre:

kind: Pod
apiVersion: v1
metadata:
  name: app
spec:
  containers:
  - name: app
    image: <your-workload>: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 a frissített csomópontcímkéket használja az ütemezett új podokhoz, a csomópontokon már ütemezett podokat nem.

További információ: Affinitás és 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ére a podok közötti affinitás vagy az affinitás-ellenesség használata. Ezek a beállítások azt határozzák meg, hogy a podokat nem szabad vagy ütemezni egy meglévő podot tartalmazó csomóponton. Alapértelmezés szerint a Kubernetes ütemezője 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 Redist is használ.

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

A podok csomópontok közötti eloszlása a következő 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 ütemezi a podokat a csomópontokon.

Az Azure Cache for Redis-példával ellátott webalkalmazás teljes példáját az ugyanazon a csomóponton található podok együttes megkeresése című témakörben találja.

Következő lépések

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