Detener automáticamente las actualizaciones del clúster de Azure Kubernetes Service (AKS) cuando se produzcan cambios incompatibles en la API

Se aplica a: ✔️ AKS Automatic ✔️ AKS Standard

En este artículo se muestra cómo Azure Kubernetes Service (AKS) puede bloquear automáticamente las actualizaciones de clúster cuando detecta el uso de la API de Kubernetes en desuso.

Para la mayoría de las cargas de trabajo de producción, AKS Automatic es la experiencia predeterminada recomendada lista para producción para AKS. La detección de cambios que rompen la compatibilidad de la API de Kubernetes viene preconfigurada tanto en los clústeres AKS Automatic como en los AKS Estándar.

Comportamiento en AKS Automatic y AKS Standard

Ambos modos de clúster incluyen esta protección:

  • AKS Automatic: se incluye de forma predeterminada como parte de las medidas de seguridad de la plataforma preparadas para producción automática de AKS.
  • AKS Estándar: se incluye de forma predeterminada en clústeres estándar de AKS.

En ambos modos, AKS puede bloquear las operaciones de actualización de versiones secundarias cuando detecta el uso reciente de las API en desuso o quitadas en la versión de Kubernetes de destino.

Información general

Para mantenerse dentro de una versión de Kubernetes compatible, debe actualizar el clúster al menos una vez al año y prepararse para posibles interrupciones. Estas interrupciones pueden incluir cambios que rompen la compatibilidad de la API, elementos obsoletos y dependencias como Helm y Container Storage Interface (CSI). Puede ser difícil prever estas interrupciones y migrar cargas de trabajo críticas sin tiempo de inactividad.

Cuando AKS detecta el uso de la API en desuso para la versión de destino, puede bloquear automáticamente las operaciones de actualización de versiones secundarias y avisarle del problema. Este comportamiento le ayuda a evitar interrupciones inesperadas y le da tiempo para corregir el uso de la API en desuso antes de continuar con la actualización.

Prerequisites

Asegúrese de cumplir los siguientes requisitos previos:

  • La operación de actualización es un cambio de versión menor de Kubernetes para el plano de control del clúster.
  • La versión de destino de Kubernetes es 1.26 o posterior.
  • El último uso visto de las API en desuso para la versión de destino se produjo en un plazo de 12 horas antes de la operación de actualización. AKS registra el uso cada hora, por lo que no se garantiza que el uso dentro de la hora más reciente aparezca en la detección.

Nota:

No es necesario habilitar manualmente esta característica de detección. Los clústeres de AKS Automatic y AKS Standard lo preconfiguran.

Mitigación de las operaciones de actualización detenidas

Si cumple los requisitos previos, intente realizar una actualización y reciba un error similar al siguiente mensaje de error:

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

Use una de las siguientes opciones:

  1. En Azure Portal, vaya a su recurso de clúster y seleccione Diagnosticar y solucionar problemas

  2. Seleccione Crear, actualizar, eliminar y escalar>obsolescencias de la API de Kubernetes.

    Captura de pantalla del portal de Azure que muestra la sección

  3. Espere 12 horas desde la última vez que se detectó el uso de una API obsoleta. Los verbos de solo lectura quedan excluidos del uso de la API obsoleta, concretamente Get/List/Watch. También puede comprobar el uso de la API pasada habilitando Container Insights y explorando los registros de auditoría de Kube.

  4. Vuelva a intentar la actualización del clúster.

Omitir la validación para omitir los cambios de API

Nota:

Este método requiere CLI de Azure versión 2.57 o posterior. Si tiene instalada la extensión de la CLI en versión preliminar, actualice a la versión 3.0.0b10 o posterior. Este método no se recomienda para las operaciones de producción normales, ya que las API en desuso de la versión de Kubernetes de destino pueden producir errores a largo plazo. Quite el uso de la API en desuso lo antes posible después de la actualización.

Ejecute la actualización con omisión de la validación mediante el comando az aks upgrade con --enable-force-upgrade y establezca --upgrade-override-until para indicar cuándo finaliza la ventana de omisión. Si no establece un valor, la ventana tiene como valor predeterminado tres días a partir de la hora actual. La fecha y hora proporcionadas deben estar en el futuro.

# Set environment variables
RESOURCE_GROUP_NAME=<your-resource-group-name>
CLUSTER_NAME=<your-cluster-name>
KUBERNETES_VERSION=<target-kubernetes-version>

# Run the upgrade command with validation bypass
az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z

Nota:

Z es el indicador de zona para el desfase UTC/GMT cero, también conocido como hora "Zulu". En este ejemplo se establece el final de la ventana en 13:00:00 GMT. Para obtener información, consulte Representaciones de fecha y hora combinadas.

Consideraciones de producción

Para cargas de trabajo de producción, siga estos procedimientos:

  • Tratar el bloqueo de actualizaciones como un mecanismo de seguridad, no un estado de error.
  • Es preferible realizar la migración a la API en lugar de forzar el bypass.
  • Use ventanas de mantenimiento planeado y comprobaciones previas a la actualización.
  • Monitoriza de forma continua el uso de API en desuso para evitar bloqueos de actualización de última hora.

En este artículo se te mostró cómo detener automáticamente las actualizaciones del clúster de AKS ante cambios incompatibles en la API. Para obtener más información sobre más opciones de actualización para clústeres de AKS, consulte Opciones de actualización para clústeres de Azure Kubernetes Service (AKS).

Para más información sobre AKS Automatic, consulte los artículos siguientes: