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.yaml
helyezi ü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:
- Először egy kétcsomópontos fürttel kell kezdenie: node1 és node2.
- Frissíti a csomópontkészletet.
- Két másik csomópont jön létre: node3 és node4.
- A fertőzöttek a megfelelő módon lesznek átadva.
- 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:
- Kétcsomópontos fürtje van: node1 és node2.
- Frissíti a csomópontkészletet.
- Létrejön egy további csomópont: node3.
- A node1-ből származó fertőzöttség a node3-ra lesz alkalmazva.
- node1 törölve.
- A rendszer létrehoz egy új csomópont1-et az eredeti csomópont1 helyére.
- A csomópont2-fertőzöttek az új csomópontra lesznek alkalmazva1.
- 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: