Csomópontkészletek átméretezése az Azure Kubernetes Service-ben (AKS)

Előfordulhat, hogy módosítani szeretné a virtuális gépek (virtuális gépek) méretét, hogy egyre több üzembe helyezést fogadjon el, vagy nagyobb számítási feladatot futtasson. Az AKS-példányok közvetlen átméretezése nem támogatott , ha virtuálisgép-méretezési csoportokat használ az AKS-ben az AKS támogatási szabályzataiban leírtak szerint:

Az AKS-ügynökcsomópontok normál Azure IaaS-erőforrásként jelennek meg az Azure Portalon. Ezek a virtuális gépek azonban egy egyéni Azure-erőforráscsoportba vannak üzembe helyezve (általában MC_*előtaggal). Az IaaS API-k vagy -erőforrások használatával nem végezhet közvetlen testreszabásokat ezeken a csomópontokon. Bármilyen egyéni módosítás, amelyet nem az AKS API-val hajtanak végre, nem marad meg frissítés, méretezés, változtatás vagy újraindítás során.

Ebben a cikkben megismerheti a csomópontkészlet átméretezésének ajánlott módszerét egy új csomópontkészlet kívánt termékváltozat-mérettel történő létrehozásával, a meglévő csomópontok kordonozásával és ürítésével, majd a meglévő csomópontkészlet eltávolításával.

Fontos

Ez a módszer az AKS fürtökre vonatkozik, amelyek Virtual Machine Scale Sets-en alapulnak. Virtuális gépeken alapuló csomópontkészletek használata esetén egyetlen Azure CLI-paranccsal egyszerűen frissítheti a virtuálisgép-méreteket egy meglévő csomópontkészletben, és több virtuálisgép-mérettel rendelkezhet ugyanabban a csomópontkészletben. További információkért tekintse meg a Virtuális gépek csomópontkészletek dokumentációját.

Új csomópontkészlet létrehozása a kívánt termékváltozattal

Feljegyzés

Minden AKS-fürtnek legalább egy, legalább egy csomóponttal rendelkező rendszercsomópontkészletet kell tartalmaznia. Ebben a példában egy --modeSystem alkalmazásával adunk hozzá egy rendszercsomópontkészletet, hogy kicseréljük az átméretezni kívánt rendszercsomópontkészletet. A csomópontkészletek üzemmódját bármikor frissítheti . A felhasználói csomópontkészletet úgy is hozzáadhatja, hogy a következőt állítja be: --modeUser.

Az átméretezés során ügyeljen arra, hogy figyelembe vegye az összes számítási feladatra vonatkozó követelményt, például a rendelkezésre állási zónákat, és ennek megfelelően konfigurálja a VMSS-csomópontkészletet. Előfordulhat, hogy az igényeinek leginkább megfelelő módon módosítania kell a következő parancsot. A konfigurációs beállítások teljes listáját a az aks nodepool add referenciaoldalon találja.

  1. Hozzon létre egy új csomópontkészletet a az aks nodepool add paranccsal. Ebben a példában létrehozunk egy új csomópontkészletet, mynodepoolhárom csomóponttal és a Standard_DS3_v2 virtuálisgép-termékváltozattal egy meglévő csomópontkészlet lecseréléséhez, nodepool1amely rendelkezik a Standard_DS2_v2 virtuálisgép-termékváltozattal.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --node-vm-size Standard_DS3_v2 \
        --mode System \
        --no-wait
    

    Az új csomópontkészlet létrehozása néhány percet vesz igénybe.

  2. Kérje le az új csomópontkészlet állapotát a kubectl get nodes parancs használatával.

    kubectl get nodes
    

    A kimenetnek az alábbi példakimenethez kell hasonlítania, amely az új csomópontkészletet mynodepool és a meglévő csomópontkészletet nodepool1is megjeleníti:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   23m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   23m   v1.21.9
    aks-nodepool1-12345678-vmss000000    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000001    Ready    agent   10d   v1.21.9
    aks-nodepool1-12345678-vmss000002    Ready    agent   10d   v1.21.9
    

A meglévő csomópontok kordonozása

A kordonálás nem ütemezhetőként jelöli meg a megadott csomópontokat, és megakadályozza, hogy további podok legyenek hozzáadva a csomópontokhoz.

  1. Kérje le a parancs használatával kubectl get nodes a kordonolni kívánt csomópontok nevét.

    kubectl get nodes
    

    A kimenetnek a következő példakimenethez kell hasonlítania, amely a meglévő csomópontkészletben nodepool1 lévő csomópontokat jeleníti meg, amelyeket kordonolni szeretne:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000001   Ready    agent   7d21h   v1.21.9
    aks-nodepool1-12345678-vmss000002   Ready    agent   7d21h   v1.21.9
    
  2. A parancs használatával kubectl cordon kordonozza a meglévő csomópontokat, és adja meg a kívánt csomópontokat egy szóközzel elválasztott listában. Például:

    kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002
    

    A kimenetnek a következő példakimenethez kell hasonlítania, amely azt mutatja, hogy a csomópontok kordonozottak:

    node/aks-nodepool1-12345678-vmss000000 cordoned
    node/aks-nodepool1-12345678-vmss000001 cordoned
    node/aks-nodepool1-12345678-vmss000002 cordoned
    

A meglévő csomópontok kiürítése

Fontos

A csomópontok kiürítéséhez és a futó podok kiürítéséhez győződjön meg arról, hogy minden PodDisruptionBudgets (PDB) lehetővé teszi, hogy egyszerre legalább egy podreplika áthelyezhető legyen. Ellenkező esetben a kiürítési/kilakoltatási művelet meghiúsul. Ennek ellenőrzéséhez futtathatja kubectl get pdb -A és ellenőrizheti ALLOWED DISRUPTIONS , hogy legalább 1 vagy magasabb-e.

Csomópontok ürítésekor a rajtuk futó podok kiürítve lesznek, és újjáépülnek a többi ütemezhető csomópontokon.

  1. Ürítse le a meglévő csomópontokat a kubectl drain parancs és a --ignore-daemonsets--delete-emptydir-data jelzők használatával, és adja meg a kívánt csomópontokat egy szóközzel elválasztott listában. Például:

    Fontos

    A használat --delete-emptydir-data szükséges az AKS által létrehozott coredns és metrics-server podok kiürítéséhez. Ha nem használja ezt a jelzőt, hibaüzenet jelenik meg. További információkért tekintse meg az emptydir dokumentációját.

    kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-data
    
  2. A lefolyóművelet befejezése után az összes podnak (a démonkészletek által vezérelt podok kivételével) az új csomópontkészleten kell futnia. Ezt a kubectl get pods parancs használatával ellenőrizheti.

    kubectl get pods -o wide -A
    

Podok kiürítési problémáinak elhárítása

Csomópontok ürítésekor a következő hibaüzenet jelenhet meg:

Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.

Alapértelmezés szerint a fürt AKS által kezelt pod megszakítási költségvetésekkel rendelkezik (például coredns-pdb vagy konnectivity-agent) MinAvailable értékkel 1. Ha például két coredns pod fut, egyszerre csak egy zavarható meg. Miközben az egyik újraalkotás alatt van és nem érhető el, a másik coredns podot nem lehet kiüríteni a pod megszakítási költségvetés miatt. Ez a probléma megoldódik, miután az első coredns pod ütemezve és futtatva van, lehetővé téve a második pod megfelelő kilakoltatását és újbóli létrehozását.

Tipp.

Érdemes egyenként üríteni a csomópontokat a zökkenőmentesebb kilakoltatás érdekében, és elkerülni a szabályozást. További információk:

A meglévő csomópontkészlet eltávolítása

Fontos

Csomópontkészlet törlésekor az AKS nem végez kordont és ürítési műveletet. A törölni tervezett csomópontcsoportban jelenleg futó podok átütemezésének minimalizálása érdekében, törlés előtt kordonozzon le és ürítsen ki minden csomópontot a csomópontcsoportban.

  1. Törölje az eredeti csomópontkészletet a az aks nodepool delete paranccsal.

    az aks nodepool delete \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name nodepool1
    
  2. Ellenőrizze, hogy az AKS-fürt csak az új csomópontkészlettel rendelkezik-e, és hogy az alkalmazások és podok megfelelően futnak-e a kubectl get nodes parancs használatával.

    kubectl get nodes
    

    A kimenetnek a következő példakimenethez kell hasonlítania, csak az új csomópontkészletet mynodepooljeleníti meg:

    NAME                                 STATUS   ROLES   AGE   VERSION
    aks-mynodepool-98765432-vmss000000   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000001   Ready    agent   63m   v1.21.9
    aks-mynodepool-98765432-vmss000002   Ready    agent   63m   v1.21.9
    

Következő lépések

A csomópontkészlet kordonozással és vízelvezetéssel történő átméretezése után további információ a több csomópontkészlet használatáról.