Azure Spot csomópontkészlet hozzáadása egy Azure Kubernetes Service-fürthöz

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 , sem SpotMaxPrice nem 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:spot címkéje és kubernetes.azure.com/scalesetpriority=spot:NoSchedule taintje 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 prioritySpot a az aks nodepool add parancs 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 show paranccsal, és hogy a scaleSetPrioritySpot.
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énekspot kell 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 lennie another-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.