Formaat van knooppuntgroepen wijzigen in Azure Kubernetes Service (AKS)

Vanwege een toenemend aantal implementaties of om een grotere workload uit te voeren, kunt u het plan voor de virtuele-machineschaalset wijzigen of het formaat van AKS-exemplaren wijzigen. Volgens het ondersteuningsbeleid voor AKS:

AKS-agentknooppunten worden in Azure Portal weergegeven als gewone Azure IaaS-resources. Deze virtuele machines worden echter geïmplementeerd in een aangepaste Azure-resourcegroep (meestal voorafgegaan door MC_*). U kunt geen directe aanpassingen aan deze knooppunten uitvoeren met behulp van de IaaS-API's of -resources. Aangepaste wijzigingen die niet via de AKS-API worden uitgevoerd, blijven niet behouden via een upgrade, schaal, update of opnieuw opstarten.

Dit gebrek aan persistentie is ook van toepassing op de bewerking voor het wijzigen van het formaat, waardoor het wijzigen van het formaat van AKS-exemplaren op deze manier niet wordt ondersteund. In deze handleiding leert u de aanbevolen methode om dit scenario aan te pakken.

Belangrijk

Deze methode is specifiek voor AKS-clusters op basis van virtuele-machineschaalsets. Wanneer u beschikbaarheidssets voor virtuele machines gebruikt, bent u beperkt tot slechts één knooppuntgroep per cluster.

Voorbeeldbronnen

Stel dat u het formaat van een bestaande knooppuntgroep, genaamd nodepool1, wilt wijzigen van de SKU-grootte Standard_DS2_v2 naar Standard_DS3_v2. Als u deze taak wilt uitvoeren, moet u een nieuwe knooppuntgroep maken met behulp van Standard_DS3_v2, workloads verplaatsen van nodepool1 naar de nieuwe knooppuntgroep en verwijderen nodepool1. In dit voorbeeld noemen we deze nieuwe knooppuntgroep mynodepool.

Screenshot of the Azure portal page for the cluster, navigated to Settings > Node pools. One node pool, named node pool 1, is shown.

kubectl get nodes

NAME                                STATUS   ROLES   AGE   VERSION
aks-nodepool1-31721111-vmss000000   Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000001   Ready    agent   10d   v1.21.9
aks-nodepool1-31721111-vmss000002   Ready    agent   10d   v1.21.9
kubectl get pods -o wide -A

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE                                NOMINATED NODE   READINESS GATES
default       sampleapp2-74b4b974ff-676sz           1/1     Running   0          93m     10.244.1.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
default       sampleapp2-76b6c4c59b-pfgbh           1/1     Running   0          94m     10.244.1.5   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-4n66k             1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-9p4c8             1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   azure-ip-masq-agent-nb7mx             1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   coredns-845757d86-dtvvs               1/1     Running   0          10d     10.244.0.2   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   coredns-845757d86-x27pp               1/1     Running   0          10d     10.244.2.3   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-5f85dc856b-nfrmh   1/1     Running   0          10d     10.244.2.4   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-9nfzt              3/3     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   csi-azuredisk-node-bblsb              3/3     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-tjhj4              3/3     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-9pcr8              3/3     Running   0          3d10h   10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-bh2pc              3/3     Running   0          3d10h   10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   csi-azurefile-node-h75gq              3/3     Running   0          3d10h   10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-ngdlb   1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-rvvqt   1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   kube-proxy-4wzx7                      1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000   <none>           <none>
kube-system   kube-proxy-g5tvr                      1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002   <none>           <none>
kube-system   kube-proxy-mrv54                      1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001   <none>           <none>
kube-system   metrics-server-774f99dbf4-h52hn       1/1     Running   1          3d10h   10.244.1.3   aks-nodepool1-31721111-vmss000002   <none>           <none>

Een nieuwe knooppuntgroep maken met de gewenste SKU

Gebruik de opdracht az aks nodepool add om een nieuwe knooppuntgroep mynodepool te maken met drie knooppunten met behulp van de Standard_DS3_v2 VM-SKU:

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

Notitie

Elk AKS-cluster moet ten minste één systeemknooppuntgroep met ten minste één knooppunt bevatten. In het bovenstaande voorbeeld gebruiken we een --mode van System, omdat wordt aangenomen dat het cluster slechts één knooppuntgroep heeft, waardoor een System knooppuntgroep deze moet vervangen. De modus van een knooppuntgroep kan op elk gewenst moment worden bijgewerkt.

Houd bij het wijzigen van het formaat rekening met andere vereisten en configureer de knooppuntgroep dienovereenkomstig. Mogelijk moet u de bovenstaande opdracht wijzigen. Zie de referentiepagina az aks nodepool add reference voor een volledige lijst met configuratieopties.

Na enkele minuten is de nieuwe knooppuntgroep gemaakt:

Screenshot of the Azure portal page for the cluster, navigated to Settings > Node pools. Two node pools, named node pool 1 and my node pool are shown.

kubectl get nodes

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

Cordon de bestaande knooppunten

Cordoning markeert opgegeven knooppunten als niet-gepland en voorkomt dat er meer pods aan de knooppunten worden toegevoegd.

Haal eerst de namen op van de knooppunten waarmee kubectl get nodesu wilt cordonen. Uw uitvoer moet er ongeveer als volgt uitzien:

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-31721111-vmss000000   Ready    agent   7d21h   v1.21.9
aks-nodepool1-31721111-vmss000001   Ready    agent   7d21h   v1.21.9
aks-nodepool1-31721111-vmss000002   Ready    agent   7d21h   v1.21.9

kubectl cordon <node-names>Geef vervolgens de gewenste knooppunten op in een door spaties gescheiden lijst:

kubectl cordon aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002
node/aks-nodepool1-31721111-vmss000000 cordoned
node/aks-nodepool1-31721111-vmss000001 cordoned
node/aks-nodepool1-31721111-vmss000002 cordoned

De bestaande knooppunten leegmaken

Belangrijk

Als u knooppunten wilt verwijderen en actieve pods wilt verwijderen, moet u ervoor zorgen dat podDisruptionBudgets (PDBs) ervoor zorgen dat ten minste één podreplica tegelijk kan worden verplaatst. Anders mislukt de afvoer-/verwijderingsbewerking. U kunt dit controleren door ten minste één of hoger uit te voeren kubectl get pdb -A en te controleren ALLOWED DISRUPTIONS .

Het leegmaken van knooppunten zorgt ervoor dat pods die erop worden uitgevoerd, worden verwijderd en opnieuw worden gemaakt op de andere, schedulbare knooppunten.

Als u knooppunten wilt leegmaken, gebruikt kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-datau opnieuw een door spaties gescheiden lijst met knooppuntnamen:

Belangrijk

Het gebruik --delete-emptydir-data is vereist om de door AKS gemaakte coredns pods te metrics-server verwijderen. Als deze vlag niet wordt gebruikt, wordt een fout verwacht. Zie de documentatie over emptydir voor meer informatie.

kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data

Nadat de afvoerbewerking is voltooid, worden alle andere pods dan die beheerd door daemon-sets uitgevoerd op de nieuwe knooppuntgroep:

kubectl get pods -o wide -A

NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE                                 NOMINATED NODE   READINESS GATES
default       sampleapp2-74b4b974ff-676sz           1/1     Running   0          15m     10.244.4.5   aks-mynodepool-20823458-vmss000002   <none>           <none>
default       sampleapp2-76b6c4c59b-rhmzq           1/1     Running   0          16m     10.244.4.3   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-4n66k             1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   azure-ip-masq-agent-9p4c8             1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   azure-ip-masq-agent-nb7mx             1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   azure-ip-masq-agent-sxn96             1/1     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   azure-ip-masq-agent-tsq98             1/1     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   azure-ip-masq-agent-xzrdl             1/1     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   coredns-845757d86-d2pkc               1/1     Running   0          17m     10.244.3.2   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   coredns-845757d86-f8g9s               1/1     Running   0          17m     10.244.5.2   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   coredns-autoscaler-5f85dc856b-f8xh2   1/1     Running   0          17m     10.244.4.2   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azuredisk-node-7md2w              3/3     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   csi-azuredisk-node-9nfzt              3/3     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   csi-azuredisk-node-bblsb              3/3     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   csi-azuredisk-node-lcmtz              3/3     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azuredisk-node-mmncr              3/3     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   csi-azuredisk-node-tjhj4              3/3     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   csi-azurefile-node-29w6z              3/3     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   csi-azurefile-node-4nrx7              3/3     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   csi-azurefile-node-9pcr8              3/3     Running   0          3d11h   10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   csi-azurefile-node-bh2pc              3/3     Running   0          3d11h   10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   csi-azurefile-node-gqqnv              3/3     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   csi-azurefile-node-h75gq              3/3     Running   0          3d11h   10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-2bbp5   1/1     Running   0          17m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   konnectivity-agent-6cd55c69cf-7xzxj   1/1     Running   0          16m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   kube-proxy-4wzx7                      1/1     Running   0          10d     10.240.0.4   aks-nodepool1-31721111-vmss000000    <none>           <none>
kube-system   kube-proxy-7h8r5                      1/1     Running   0          49m     10.240.0.7   aks-mynodepool-20823458-vmss000000   <none>           <none>
kube-system   kube-proxy-g5tvr                      1/1     Running   0          10d     10.240.0.6   aks-nodepool1-31721111-vmss000002    <none>           <none>
kube-system   kube-proxy-mrv54                      1/1     Running   0          10d     10.240.0.5   aks-nodepool1-31721111-vmss000001    <none>           <none>
kube-system   kube-proxy-nqmnj                      1/1     Running   0          49m     10.240.0.9   aks-mynodepool-20823458-vmss000002   <none>           <none>
kube-system   kube-proxy-zn77s                      1/1     Running   0          49m     10.240.0.8   aks-mynodepool-20823458-vmss000001   <none>           <none>
kube-system   metrics-server-774f99dbf4-2x6x8       1/1     Running   0          16m     10.244.4.4   aks-mynodepool-20823458-vmss000002   <none>           <none>

Problemen oplossen

Mogelijk ziet u een foutbericht als volgt:

Fout bij het uitzetten van pods/[podname] -n [naamruimte] (probeert het opnieuw na 5s): Pod kan niet worden verwijderd omdat deze het onderbrekingsbudget van de pod zou schenden.

Uw cluster heeft standaard AKS_managed budgetten voor podonderbreking (zoals coredns-pdb of konnectivity-agent) met een MinAvailable van 1. Als er bijvoorbeeld twee coredns pods worden uitgevoerd terwijl een van deze pods opnieuw wordt gemaakt en niet beschikbaar is, kan de andere niet worden beïnvloed vanwege het budget voor podonderbreking. Dit lost zichzelf op nadat de eerste coredns pod is gepland en wordt uitgevoerd, zodat de tweede pod correct kan worden verwijderd en opnieuw kan worden gemaakt.

Tip

Overweeg om knooppunten één voor één leeg te maken voor een soepelere verwijderingservaring en om beperking te voorkomen. Zie voor meer informatie:

De bestaande knooppuntgroep verwijderen

Als u de bestaande knooppuntgroep wilt verwijderen, gebruikt u Azure Portal of de opdracht az aks nodepool delete :

az aks nodepool delete \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name nodepool1

Na voltooiing is het uiteindelijke resultaat het AKS-cluster met één nieuwe knooppuntgroep met de nieuwe, gewenste SKU-grootte en alle toepassingen en pods die correct worden uitgevoerd:

Screenshot of the Azure portal page for the cluster, navigated to Settings > Node pools. One node pool, named my node pool, is shown.

kubectl get nodes

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

Volgende stappen

Na het wijzigen van het formaat van een knooppuntgroep door cordoning en leegmaken, vindt u meer informatie over het gebruik van meerdere knooppuntgroepen.