Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben a cikkben egy másodlagos Spot csomópontkészletet ad hozzá egy meglévő Azure Kubernetes Service-fürthöz.
Egy Spot típusú csomópontkészlet egy Azure Spot virtuális gép skálázási csoport által támogatott csomópontkészlet. Az AKS-fürtben található Spot VM-ekkel jelentős költségmegtakarítást érhet el az Azure kihasználatlan kapacitásának kihasználásával. A rendelkezésre álló kihasználatlan kapacitás mennyisége számos tényezőtől függ, például csomópontmérettől, régiótól és napközbentól.
Amikor egy Spot csomópontkészletet helyez üzembe, az Azure lefoglalja a Spot csomópontokat, ha van elérhető kapacitás, és üzembe helyez egy Spot méretezési csoportot, amely egyetlen alapértelmezett tartományban támogatja a Spot csomópontkészletet. Nincs SLA a Spot csomópontokhoz. Nincsenek magas rendelkezésre állási garanciák. Ha az Azure-nak vissza kell igényelnie a kapacitást, az Azure-infrastruktúra kiüríti a kihasználatlan csomópontokat.
A "spot csomópontok" nagyszerűek olyan számítási feladatokhoz, amelyek képesek kezelni a megszakításokat, a korai leállásokat vagy az eltávolításokat. Például az olyan számítási munkaterhelések, mint a kötegelt feldolgozási feladatok, fejlesztési és tesztelési környezetek, valamint a nagy számítási feladatok jó jelöltek lehetnek egy Spot csomópontkészlet ütemezésére.
Mielőtt elkezdené
- Ez a cikk a Kubernetes és az Azure Load Balancer fogalmainak alapszintű megértését feltételezi. További információkért tekintse meg az Azure Kubernetes Service (AKS) Kubernetes alapfogalmait.
- Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
- Amikor létrehoz egy fürtöt, hogy Spot csomópontkészletet használjon, a fürtnek virtuális gép skálakészleteket kell használnia a csomópontkészletekhez és a Standard SKU terheléselosztóhoz. A fürt létrehozása után egy másik csomópontkészletet is fel kell vennie, amelyet ebben az oktatóanyagban tárgyalunk.
- Ehhez a cikkhez az Azure CLI 2.14-es vagy újabb verzióját kell futtatnia. A verzió azonosításához futtassa a következőt:
az --version. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.
Korlátozások
A Spot csomópontkészlettel rendelkező AKS fürtök létrehozásakor és kezelésekor a következő korlátozások érvényesek:
- A Spot csomópontkészlet nem lehet alapértelmezett csomópontkészlet, csak másodlagos készletként használható.
- Egyszerre nem frissítheti a vezérlősíkot és a csomópontkészleteket. Ezeket külön kell frissítenie, vagy el kell távolítania a Spot csomópontkészletet, hogy a vezérlősíkot és a fennmaradó csomópontkészleteket egyszerre frissíthesse.
- A Spot csomópontkészletnek a virtuális gép-méretezési csoportokat kell használnia.
- A létrehozás után sem
ScaleSetPriority, semSpotMaxPricenem módosítható. - Beállításkor
SpotMaxPriceaz értéknek -1 vagy legfeljebb öt tizedesjegyet tartalmazó pozitív értéknek kell lennie. - A Spot csomópontkészletnek
kubernetes.azure.com/scalesetpriority:spotcímkéje éskubernetes.azure.com/scalesetpriority=spot:NoScheduletaintje van, a rendszer podjai pedig anti-affinitással rendelkeznek. - A Spot csomópontkészlet számítási feladatainak ütemezéséhez hozzá kell adnia egy megfelelő toleranciát és affinitást.
Spot csomópontkészlet hozzáadása egy AKS-fürthöz
Ha Spot csomópontkészletet ad hozzá egy meglévő fürthöz, annak olyan fürtnek kell lennie, amelynél engedélyezve van több csomópontkészlet. Amikor több csomópontkészlettel rendelkező AKS-fürtöt hoz létre, alapértelmezés szerint készít egy csomópontkészletet, amelynek priority értéke Regular. Spot csomópontkészlet hozzáadásához meg kell adnia a Spot értékként a priority. További részletek a több csomópontkészletet tartalmazó AKS-fürt létrehozásáról: több csomópontkészlet használata.
- Hozzon létre egy csomópontkészletet
prioritySpotaaz aks nodepool addparancs használatával.
export SPOT_NODEPOOL="spotnodepool"
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER \
--name $SPOT_NODEPOOL \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--no-wait
Az előző parancsban a priority és a Spot egy Spot csomópontkészletté alakítja a csomópontkészletet. A eviction-policy paraméter értéke Deleteaz alapértelmezett érték. Amikor a kiürítési szabályzatot úgy állítja be, hogy Deletea csomópontkészlet mögöttes méretezési csoportjában lévő csomópontok törlődnek a kiürítéskor.
A kiürítési szabályzatot beállíthatja Deallocate-ra is, ami azt jelenti, hogy a mögöttes méretezési készletben lévő csomópontok kiürítéskor a leállított-felszabadított állapotra vannak állítva. A leállított-felszabadított állapotú csomópontok beleszámítanak a számítási kvótába, és problémákat okozhatnak a fürt skálázásával vagy frissítésével. Az priority és eviction-policy az értékek csak a csomópontkészlet létrehozásakor állíthatók be. Ezek az értékek később nem frissíthetők.
Az előző parancs a fürt automatikus skálázóját is engedélyezi, amelynek használatát javasoljuk a Spot csomópontkészletekkel. A fürtben futó számítási feladatok alapján a fürt automatikus skálázója igény szerint növeli vagy csökkenti a csomópontok számát. A Spot csomópontkészletek esetében a fürt automatikus skálázója megnöveli a csomópontok számát a kivonás után, ha további csomópontokra van szükség. Ha módosítja a csomópontkészletben található csomópontok maximális számát, akkor a fürt autoskalálójához társított maxCount értéket is módosítania kell. Ha nem használ automatikus fürtméretezőt, a kilakoltatáskor a Spot készlet végül 0-ra csökken, és manuális beavatkozást igényel, hogy bármilyen további Spot csomópontot fogadjon.
Fontos
Csak olyan Spot csomópontkészleteken ütemezzen számítási feladatokat, amelyek képesek kezelni a megszakításokat, például kötegelt feldolgozási feladatok vagy tesztkörnyezetek esetén. Javasoljuk, hogy a spot csomópontkészleten állítson be taint-eket és toleranciákat, hogy csak olyan számítási feladatok legyenek ütemezve a spot csomópontkészleten, amelyek képesek kezelni a csomópont kizárásait. A fenti parancs például egy taintet kubernetes.azure.com/scalesetpriority=spot:NoSchedule ad hozzá, így csak a megfelelő toleranciával rendelkező podok vannak ütemezve ezen a csomóponton.
A Spot csomópontkészlet ellenőrzése
- Ellenőrizze, hogy a csomópontkészlet hozzáadva lett-e a
az aks nodepool showparanccsal, és hogy ascaleSetPrioritySpot.
az aks nodepool show --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER --name $SPOT_NODEPOOL
Eredmények:
{
"artifactStreamingProfile": null,
"availabilityZones": null,
"capacityReservationGroupId": null,
"count": 3,
"creationData": null,
"currentOrchestratorVersion": "1.30.10",
"eTag": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"enableAutoScaling": true,
"enableCustomCaTrust": false,
"enableEncryptionAtHost": false,
"enableFips": false,
"enableNodePublicIp": false,
"enableUltraSsd": false,
"gatewayProfile": null,
"gpuInstanceProfile": null,
"gpuProfile": null,
"hostGroupId": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/xxxxxxxxxxxxxxxx/providers/Microsoft.ContainerService/managedClusters/xxxxxxxxxxxxxxxx/agentPools/xxxxxxxxxxxx",
"kubeletConfig": null,
"kubeletDiskType": "OS",
"linuxOsConfig": null,
"maxCount": 3,
"maxPods": 30,
"messageOfTheDay": null,
"minCount": 1,
"mode": "User",
"name": "xxxxxxxxxxxx",
"networkProfile": {
"allowedHostPorts": null,
"applicationSecurityGroups": null,
"nodePublicIpTags": null
},
"nodeImageVersion": "AKSUbuntu-2204gen2containerd-xxxxxxxx.xx.x",
"nodeInitializationTaints": null,
"nodeLabels": {
"kubernetes.azure.com/scalesetpriority": "spot"
},
"nodePublicIpPrefixId": null,
"nodeTaints": [
"kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
],
"orchestratorVersion": "x.xx.xx",
"osDiskSizeGb": 128,
"osDiskType": "Managed",
"osSku": "Ubuntu",
"osType": "Linux",
"podIpAllocationMode": null,
"podSubnetId": null,
"powerState": {
"code": "Running"
},
"provisioningState": "Creating",
"proximityPlacementGroupId": null,
"resourceGroup": "xxxxxxxxxxxxxxxx",
"scaleDownMode": "Delete",
"scaleSetEvictionPolicy": "Delete",
"scaleSetPriority": "Spot",
"securityProfile": {
"enableSecureBoot": false,
"enableVtpm": false,
"sshAccess": "LocalUser"
},
"spotMaxPrice": -1.0,
"status": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"typePropertiesType": "VirtualMachineScaleSets",
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": null,
"maxUnavailable": null,
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": null
},
"virtualMachineNodesStatus": null,
"virtualMachinesProfile": null,
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null,
"windowsProfile": null,
"workloadRuntime": "OCIContainer"
}
Pod ütemezése a Spot csomóponton való futtatáshoz
Ha egy podot úgy szeretne ütemezni, hogy egy Spot csomóponton fusson, hozzáadhat egy olyan tűrést és csomópont-affinitást, amely megfelel a Spot csomópontra alkalmazott taintnek.
Az alábbi példa egy YAML-fájl egy részét mutatja be, amely meghatározza a kubernetes.azure.com/scalesetpriority=spot:NoSchedule fertőzöttségnek megfelelő tűrést, valamint az előző lépésben kubernetes.azure.com/scalesetpriority=spot használt címkének requiredDuringSchedulingIgnoredDuringExecution megfelelő csomópont-affinitást és preferredDuringSchedulingIgnoredDuringExecution csomópont-affinitási szabályokat:
spec:
containers:
- name: spot-example
tolerations:
- key: "kubernetes.azure.com/scalesetpriority"
operator: "Equal"
value: "spot"
effect: "NoSchedule"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.azure.com/scalesetpriority"
operator: In
values:
- "spot"
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
Ha ezzel a tűréssel és csomópont-affinitással helyez üzembe egy podot, a Kubernetes sikeresen ütemezi a podot azokon a csomópontokon, ahol az alkalmazott tüskével és címkével rendelkeznek. Ebben a példában a következő szabályok érvényesek:
- A csomópontnak rendelkeznie kell egy címkével, amelynek kulcsa
kubernetes.azure.com/scalesetpriority, és ennek a címkének az értékénekspotkell lennie. - A csomópontnak lehetőleg van egy címkéje a kulccsal
another-node-label-key, és a címke értékének meg kell lennieanother-node-label-value.
További információ: Podok hozzárendelése csomópontokhoz.
Spot típusú csomópontkészlet frissítése
Amikor egy Spot csomópontkészletet frissítesz, az AKS belsőlegesen korlátozást és kiürítési értesítést ad ki, de a terhelést nem távolítják el a csomópontokról. A Spot csomópontkészlet frissítéséhez nem állnak rendelkezésre bővítésre használt csomópontok. Ezeken a módosításokon kívül a Spot csomópontkészletek frissítésének viselkedése megegyezik más csomópontkészlet-típusok viselkedésével.
A frissítéssel kapcsolatos további információkért lásd : AKS-fürt frissítése.
Spot pool maximális ára
A Spot példányok díjszabása régió és termékváltozat alapján változó. További információt a Linux és a Windows díjszabási információiban talál.
Az amerikai dollárban (USD) kifejezett változó díjszabással lehetősége van legfeljebb öt tizedesjegy használatával megadni a maximális árat. A 0,98765 érték például egy maximum ár 0,98765 USD óránként. Ha a maximális árat -1 értékre állítja, a példány nem lesz kiszorítva ár szerint. Mindaddig, amíg rendelkezésre áll kapacitás és kvóta, a példány ára a Spot példány vagy a standard példány aktuális árának alacsonyabbika lesz.
Következő lépések
Ebből a cikkből megtanulta, hogyan adhat hozzá egy Spot csomópontkészletet egy AKS-fürthöz. További információ a podok csomópontkészletek közötti szabályozásáról: Ajánlott eljárások az AKS speciális ütemezőfunkcióihoz.