Actualización de un clúster de Azure Kubernetes Service (AKS)
Parte del ciclo de vida del clúster de AKS implica efectuar actualizaciones periódicas a la versión más reciente de Kubernetes. Es importante que aplique las versiones de seguridad más recientes o que actualice el software para obtener las últimas características. En este artículo se muestra cómo actualizar los componentes principales o un único grupo de nodos predeterminado en un clúster de AKS.
Para los clústeres de AKS que usan varios grupos de nodos o nodos de Windows Server, consulte Actualización de un grupo de nodos en AKS.
Antes de empezar
Para este artículo es preciso usar la versión 2.0.65 de la CLI de Azure, o cualquier versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Advertencia
Una actualización del clúster de AKS desencadena un acordonamiento y purga de los nodos. Si tiene una cuota de proceso baja disponible, se puede producir un error en la actualización. Para más información, consulte Solicitudes de aumento de cuota.
Compruebe las actualizaciones disponibles del clúster de AKS
Para comprobar qué versiones de Kubernetes están disponibles para su clúster, use el comando az aks get-upgrades. En el siguiente ejemplo se comprueban las actualizaciones disponibles para myAKSCluster en myResourceGroup:
az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table
Nota
Cuando se actualiza un clúster de AKS compatible, no pueden omitirse las versiones secundarias de Kubernetes. Todas las actualizaciones deben realizarse secuencialmente con arreglo al número de versión principal. Por ejemplo, las actualizaciones comprendidas entre 1.14.x -> 1.15.x o 1.15.x -> 1.16.x están permitidas, pero las comprendidas entre 1.14.x -> 1.16.x no lo están.
Solo se pueden omitir varias versiones al actualizar de una versión que no es compatible a una versión compatible. Por ejemplo, se puede efectuar una actualización de una versión 1.10.x no compatible a una versión 1.15.x compatible.
La siguiente salida de ejemplo muestra que el clúster se puede actualizar a las versiones 1.19.1 y 1.19.3:
Name ResourceGroup MasterVersion Upgrades
------- --------------- --------------- --------------
default myResourceGroup 1.18.10 1.19.1, 1.19.3
Si no hay ninguna actualización disponible, verá el mensaje:
ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.
Personalización de la actualización de sobrecargas de nodo
Importante
Los sobrecargas de nodo requieren la cuota de suscripción para el recuento máximo de sobrecargas solicitado para cada operación de actualización. Por ejemplo, un clúster con 5 grupos de nodos, cada uno con un recuento de 4 nodos, tiene un total de 20 nodos. Si cada grupo de nodos tiene un valor de sobrecarga máxima del 50 %, se requiere un proceso adicional y una cuota de IP de 10 nodos (2 nodos x 5 grupos) para completar la actualización.
Si usa Azure CNI, compruebe que haya direcciones IP disponibles en la subred, además de cumplir los requisitos de direcciones IP de Azure CNI.
De forma predeterminada, AKS configura las actualizaciones para la sobrecarga con un nodo adicional. Un valor predeterminado de uno para la configuración de sobrecarga máxima permitirá a AKS minimizar la interrupción de la carga de trabajo mediante la creación de un nodo adicional antes de acordonar o purgar las aplicaciones existentes para reemplazar un nodo de una versión anterior. El valor de sobrecarga máxima se puede personalizar por grupo de nodos para permitir un equilibrio entre la velocidad de actualización y la interrupción de la actualización. Al aumentar el valor de sobrecarga máxima, el proceso de actualización se completa más rápido, pero si se establece un valor alto para la sobrecarga máxima, pueden producirse interrupciones durante el proceso de actualización.
Por ejemplo, un valor de sobrecarga máxima del 100 % proporciona el proceso de actualización más rápido posible (se duplica el número de nodos), pero también hace que todos los nodos del grupo de nodos se purguen simultáneamente. Es posible que desee usar un valor más alto, como este, para los entornos de prueba. En el caso de los grupos de nodos de producción, se recomienda un valor de sobrecarga máxima del 33 %.
AKS acepta valores enteros y un valor de porcentaje para la sobrecarga máxima. Un entero como "5" indica cinco nodos adicionales para la sobrecarga. Un valor de "50 %" indica un valor de sobrecarga de la mitad del número de nodos actual del grupo. Los valores de porcentaje de sobrecarga máxima pueden ser de 1 % como mínimo y 100 % como máximo. Un valor de porcentaje se redondea al número de nodos más próximo. Si el valor de sobrecarga máxima es inferior al número de nodos actual en el momento de la actualización, el número de nodos actual se usa para el valor de sobrecarga máxima.
Durante una actualización, el valor de sobrecarga máxima puede ser 1 como mínimo y un valor igual al número de nodos del grupo de nodos como máximo. Puede establecer valores mayores, pero el número máximo de nodos que se usan para la sobrecarga máxima no será mayor que el número de nodos del grupo en el momento de la actualización.
Importante
El valor de sobrecarga máxima en un grupo de nodos es permanente. Las actualizaciones posteriores de Kubernetes o las actualizaciones de la versión de nodo usarán esta configuración. Puede cambiar el valor de sobrecarga máxima para los grupos de nodos en cualquier momento. En el caso de los grupos de nodos de producción, se recomienda un valor de sobrecarga máxima del 33 %.
Use los siguientes comandos para establecer los valores de sobrecarga máxima para los grupos de nodos nuevos o existentes.
# Set max surge for a new node pool
az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33%
# Update max surge for an existing node pool
az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 5
Actualización de un clúster de AKS
Con una lista de las versiones disponibles para el clúster de AKS, use el comando az aks upgrade para realizar la actualización. Durante el proceso de actualización, AKS se ocupará de lo siguiente:
- Agregar un nuevo nodo de búfer (o tantos nodos como se hayan configurado en sobrecarga máxima) al clúster que ejecuta la versión especificada de Kubernetes.
- Acordonar y purgar uno de los nodos antiguos para minimizar la interrupción de las aplicaciones en ejecución. Si se usa la sobrecarga máxima, acordonará y purgará tantos nodos al mismo tiempo como el número de nodos de búfer que se haya especificado.
- Cuando el nodo anterior se ha purgado por completo, se restablecerá la imagen inicial para recibir la nueva versión y se convertirá en el nodo de búfer para el siguiente nodo que se va a actualizar.
- Este proceso se repite hasta que se hayan actualizado todos los nodos del clúster.
- Al final del proceso, se eliminará el último nodo del búfer, manteniendo el número de nodos de agente existentes, así como el equilibrio de zona.
az aks upgrade \
--resource-group myResourceGroup \
--name myAKSCluster \
--kubernetes-version KUBERNETES_VERSION
Dicha actualización tarda varios minutos. El tiempo exacto dependerá del número de nodos que tenga.
Importante
Asegúrese de que cualquier PodDisruptionBudgets (PDB) permita que se mueva al menos una réplica de pod a la vez; en caso contrario, se producirá un error en la operación de purga o expulsión.
Si se produce un error en la operación de purga, se producirá un error por diseño en la operación de actualización para garantizar que no se interrumpan las aplicaciones. Corrija lo que hizo que se detuviese la operación (PDB incorrectos, falta de cuota, etc.) y vuelva a intentar la operación.
Para confirmar que la actualización se ha realizado correctamente, use el comando az aks show:
az aks show --resource-group myResourceGroup --name myAKSCluster --output table
En la salida de ejemplo siguiente se muestra que el clúster ahora ejecuta la versión 1.18.10:
Name Location ResourceGroup KubernetesVersion ProvisioningState Fqdn
------------ ---------- --------------- ------------------- ------------------- ----------------------------------------------
myAKSCluster eastus myResourceGroup 1.18.10 Succeeded myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io
Establecimiento de un canal de actualización automática
Además de actualizar manualmente un clúster, puede establecer un canal de actualización automática en el clúster. Están disponibles los siguientes canales de actualización:
| Canal | Acción | Ejemplo |
|---|---|---|
none |
Deshabilita las actualizaciones automáticas y mantiene la versión actual del clúster de Kubernetes. | Si no se hacen cambios, se usa la configuración predeterminada. |
patch |
Actualiza automáticamente el clúster a la última versión de revisión compatible cuando esté disponible, mientras se mantiene la misma versión secundaria. | Por ejemplo, si un clúster ejecuta la versión 1.17.7 y las versiones 1.17.9, 1.18.4, 1.17.9 y 1.19.1 están disponibles, se actualizará a la 1.18.6. |
stable |
Actualiza automáticamente el clúster a la última versión de revisión compatible en la versión secundaria N-1, donde N es la última versión secundaria compatible. | Por ejemplo, si un clúster ejecuta la versión 1.17.7 y las versiones 1.17.9, 1.18.4, 1.18.6 y 1.19.1 están disponibles, el clúster se actualiza a 1.18.6. |
rapid |
Actualiza automáticamente el clúster a la última versión de revisión compatible en la última versión secundaria compatible. | En los casos en los que el clúster está en una versión de Kubernetes que se encuentra en una versión secundaria N-2 donde N es la última versión secundaria, el clúster se actualiza primero a la última versión de revisión compatible en la versión secundaria N-1. Por ejemplo, si un clúster ejecuta la versión 1.17.7 y las versiones 1.17.9, 1.18.4, 1.18.6 y 1.19.1 están disponibles, el clúster se actualiza primero a 1.18.6 y, a continuación, se actualiza a 1.19.1. |
node-image |
Actualiza automáticamente la imagen de nodo a la última versión disponible. | Microsoft proporciona revisiones e imágenes nuevas para los nodos de imagen con frecuencia (normalmente, semanalmente), pero los nodos en ejecución no obtienen las nuevas imágenes, a menos que realice una actualización de la imagen de nodo. Al activar el canal node-image, se actualizarán automáticamente las imágenes de nodo cada vez que haya disponible una nueva versión. |
Nota
La actualización automática del clúster solo se actualiza a las versiones de disponibilidad general de Kubernetes y no se actualizará a las versiones preliminares.
La actualización automática de un clúster sigue el mismo proceso que la manual. Para obtener más detalles, consulte Actualización de un clúster de AKS.
Para establecer el canal de actualización automática al crear un clúster, use el parámetro auto-upgrade-channel, similar al ejemplo siguiente.
az aks create --resource-group myResourceGroup --name myAKSCluster --auto-upgrade-channel stable --generate-ssh-keys
Para establecer el canal de actualización automática en el clúster existente, actualice el parámetro auto-upgrade-channel, similar al ejemplo siguiente.
az aks update --resource-group myResourceGroup --name myAKSCluster --auto-upgrade-channel stable
Uso de la actualización automática del clúster con mantenimiento planeado
Si usa el mantenimiento planeado, así como la actualización automática, la actualización se iniciará durante la ventana de mantenimiento especificada. Para más información sobre el mantenimiento planeado, consulte Uso del mantenimiento planeado a fin de programar ventanas de mantenimiento para el clúster de Azure Kubernetes Service (AKS) (versión preliminar).
Consideraciones especiales para los grupos de nodos que abarcan varias zonas de disponibilidad
AKS usa el equilibrio de zona de mejor esfuerzo en grupos de nodos. Durante una sobrecarga de actualización, las zonas de los nodos de sobrecarga en conjuntos de escalado de máquinas virtuales se desconocen con antelación. Esto puede provocar temporalmente una configuración de zona desequilibrada durante una actualización. Sin embargo, AKS elimina los nodos de sobrecarga una vez completada la actualización y conserva el equilibrio de zona original. Si desea mantener las zonas equilibradas durante la actualización, aumente la sobrecarga a un múltiplo de tres nodos. Después, los conjuntos de escalado de máquinas virtuales equilibrarán los nodos entre las zonas de disponibilidad con la mejor opción de equilibrio de zona.
Si tiene PVC con el respaldo de discos LRS de Azure, se enlazarán a una zona determinada y es posible que no se recuperen inmediatamente si el nodo de sobrecarga no coincide con la zona de PVC. Esto podría provocar un tiempo de inactividad en la aplicación cuando la operación de actualización continúa purgando nodos, pero los PC están enlazados a una zona. Para controlar este caso y mantener la alta disponibilidad, configure un presupuesto de interrupciones de pods en la aplicación. Esto permite a Kubernetes respetar los requisitos de disponibilidad durante la operación de purga de la actualización.
Pasos siguientes
En este artículo se ha mostrado cómo actualizar un clúster de AKS existente. Para más información acerca de la implementación y administración de clústeres de AKS, consulte el conjunto de tutoriales.