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.yaml
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 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:
- Először egy kétcsomópontos fürttel kell kezdenie: csomópont1 és csomópont2.
- Frissítse a csomópontkészletet.
- Két másik csomópont jön létre: node3 és node4.
- A fertőzötteket a rendszer átadja.
- 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:
- Kétcsomópontos fürtje van: node1 és node2.
- Frissítse a csomópontkészletet.
- Létrejön egy további csomópont: node3.
- A csomópont1-ből származó fertőzöttek a csomópont3-ra lesznek alkalmazva.
- a csomópont1 törlődik.
- Létrejön egy új csomópont1 az eredeti csomópont1 helyett.
- A csomópont2-fertőzöttek az új csomópontra lesznek alkalmazva1.
- 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:
Azure Kubernetes Service