Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es posible que desee cambiar el tamaño de las máquinas virtuales (VM) para dar cabida a un número cada vez mayor de implementaciones o para ejecutar una carga de trabajo mayor. No se admite el cambio de tamaño de las instancias de AKS directamente al usar virtual Machine Scale Sets en AKS, como se describe en las directivas de soporte técnico para AKS:
Los nodos de agente de AKS aparecen en Azure Portal como recursos de Azure IaaS normales. No obstante, estas máquinas virtuales se implementan en un grupo de recursos de Azure personalizado (normalmente, con el prefijo MC_*). No puede realizar personalizaciones directas en estos nodos mediante las API o recursos de IaaS. Los cambios personalizados que no se realicen a través de la API de AKS no se conservarán durante una mejora, escalado, actualización o reinicio.
En este artículo, aprenderá el método recomendado para cambiar el tamaño de un grupo de nodos mediante la creación de un nuevo grupo de nodos con el tamaño de SKU deseado, acordonar y purgar los nodos existentes y, a continuación, quitar el grupo de nodos existente.
Importante
Este método es específico de los clústeres de AKS basados en Conjuntos de Escalado de Máquinas Virtuales. Al usar grupos de nodos basados en máquinas virtuales, puede actualizar fácilmente los tamaños de máquina virtual en un grupo de nodos existente mediante un único comando de la CLI de Azure y tener varios tamaños de máquina virtual en el mismo grupo de nodos. Para más información, consulte la documentación sobre grupos de nodos de Virtual Machines.
Creación de un grupo de nodos con el SKU deseado
Nota:
Cada clúster de AKS debe contener al menos un grupo de nodos del sistema con al menos un nodo. En este ejemplo, usamos un --mode de System para agregar un grupo de nodos del sistema y reemplazar el grupo de nodos del sistema que queremos redimensionar. Puede actualizar el modo de un grupo de nodos en cualquier momento. También puede agregar un grupo de nodos de usuario estableciendo --mode en User.
Al cambiar el tamaño, asegúrese de tener en cuenta todos los requisitos de carga de trabajo, como las zonas de disponibilidad, y configure el grupo de nodos de VMSS en consecuencia. Es posible que tenga que modificar el siguiente comando para adaptarse mejor a sus necesidades. Para obtener una lista completa de las opciones de configuración, consulte la az aks nodepool add página de referencia.
Cree un nuevo grupo de nodos mediante el
az aks nodepool addcomando . En este ejemplo, creamos un nuevo grupo de nodos, ,mynodepoolcon tres nodos y la SKU de máquinaStandard_DS3_v2virtual para reemplazar un grupo de nodos existente,nodepool1, que tiene la SKU de máquinaStandard_DS2_v2virtual.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name mynodepool \ --node-count 3 \ --node-vm-size Standard_DS3_v2 \ --mode System \ --no-waitEl nuevo grupo de nodos tarda unos minutos en crearse.
Obtenga el estado del nuevo grupo de nodos mediante el
kubectl get nodescomando .kubectl get nodesLa salida debe ser similar a la siguiente salida de ejemplo, que muestra el nuevo grupo
mynodepoolde nodos y el grupo de nodosnodepool1existente: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
Acordonamiento de los nodos existentes
El acordonamiento marca los nodos especificados como no programables e impide que se agregan más pods a los nodos.
Obtenga los nombres de los nodos a los que desea acordonar mediante el
kubectl get nodescomando .kubectl get nodesLa salida debe ser similar a la siguiente salida de ejemplo, en la que se muestran los nodos del grupo
nodepool1de nodos existente que desea acordonar: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.9Acordone los nodos existentes mediante el comando
kubectl cordon, especificando los nodos deseados en una lista separada por espacios. Por ejemplo:kubectl cordon aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002La salida debe ser similar a la siguiente salida de ejemplo, en la que se muestra que los nodos están acordonados:
node/aks-nodepool1-12345678-vmss000000 cordoned node/aks-nodepool1-12345678-vmss000001 cordoned node/aks-nodepool1-12345678-vmss000002 cordoned
Purga de los nodos existentes
Importante
Para purgar correctamente los nodos y quitar los nodos en ejecución, asegúrese de que los PodDisruptionBudgets (PDB) permitan que se mueva al menos una réplica de pod simultáneamente. De lo contrario, se produce un error en la operación de purga o desalojado. Para comprobarlo, puede ejecutar kubectl get pdb -A y asegurarse de que ALLOWED DISRUPTIONS sea 1 o superior.
Al drenar nodos, los pods que se ejecutan en ellos se desalojan y se vuelven a crear en los otros nodos programables.
Drenar los nodos existentes mediante el comando
kubectl draincon las marcas--ignore-daemonsetsy--delete-emptydir-data, especificando los nodos deseados en una lista separada por espacios. Por ejemplo:Importante
Se requiere el uso de
--delete-emptydir-datapara quitar los podscorednsymetrics-servercreados por AKS. Si no usa esta marca, obtendrá un error. Para obtener más información, consulte la documentación sobre emptydir.kubectl drain aks-nodepool1-12345678-vmss000000 aks-nodepool1-12345678-vmss000001 aks-nodepool1-12345678-vmss000002 --ignore-daemonsets --delete-emptydir-dataUna vez finalizada la operación de drenaje, todos los pods (excepto los controlados por conjuntos de demonios) deben ejecutarse en el nuevo grupo de nodos. Puede comprobarlo mediante el comando
kubectl get pods.kubectl get pods -o wide -A
Solución de problemas de expulsión de pods
Es posible que encuentre el siguiente error al purgar nodos:
Error when evicting pods/[podname] -n [namespace] (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
De manera predeterminada, el clúster tiene presupuestos de interrupción de pods administrados por AKS (como coredns-pdb o konnectivity-agent) con un MinAvailable de 1. Por ejemplo, si hay dos pods coredns en ejecución, solo se puede interrumpir uno a la vez. Mientras uno de ellos se está volviendo a crear y no está disponible, el otro pod coredns no se puede expulsar debido al presupuesto de interrupción del pod. Esto se resuelve solo, después de que el pod coredns inicial esté programado y en ejecución, lo que permite que el segundo pod se expulse y se vuelva a crear correctamente.
Sugerencia
Considere la posibilidad de drenar los nodos uno por uno para que la eliminación sea más fluida y evitar la limitación. Para más información, consulte:
Eliminación del grupo de nodos existente
Importante
Al eliminar un grupo de nodos, AKS no realiza acordonar ni purgar. Para minimizar la interrupción de los pods que se están ejecutando actualmente en el grupo de nodos que planea eliminar, realice un cable y desagüe en todos los nodos del grupo de nodos antes de eliminarlos.
Elimine el grupo de nodos original mediante el
az aks nodepool deletecomando .az aks nodepool delete \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name nodepool1Compruebe que el clúster de AKS solo tiene el nuevo grupo de nodos con las aplicaciones y los pods que se ejecutan correctamente mediante el comando
kubectl get nodes.kubectl get nodesLa salida debe ser similar a la siguiente salida de ejemplo, que muestra solo el nuevo grupo de nodos
mynodepool: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
Pasos siguientes
Después de cambiar el tamaño de un grupo de nodos mediante acordonamiento y purga, obtenga más información sobre el uso de varios grupos de nodos.