Definición de estrategias de actualización reutilizables mediante Fleet Manager de Azure Kubernetes

Se aplica a: ✔️ Administrador de flota ✔️ Administrador de flota con clúster de concentrador

Los administradores pueden controlar la secuencia de actualizaciones de los clústeres administrados por Flota mediante la definición de una serie de fases y grupos. Pueden configurar cuándo deben producirse aprobaciones y pausas dentro de esas fases y grupos. Toda la configuración se puede guardar como una estrategia de actualización que se puede administrar independientemente de las ejecuciones de actualizaciones o las actualizaciones automáticas, lo que permite reutilizar las estrategias según sea necesario.

En este artículo se explica cómo definir estrategias de actualización mediante grupos y fases.

Diagrama que muestra una estrategia de actualización de ejemplo que contiene dos fases de actualización. Cada fase de actualización contiene dos grupos de actualizaciones. Cada grupo de actualizaciones contiene dos clústeres de miembros.

Requisitos previos

  • Lea la Introducción conceptual de las actualizaciones de Flota, que proporciona una explicación de las ejecuciones de actualizaciones, las fases, los grupos y las estrategias a las que se hace referencia en esta guía.

  • Debe tener un recurso Fleet con uno o varios clústeres miembro. Si no es así, siga el inicio rápido para crear un recurso Fleet y combinar clústeres de Azure Kubernetes Service (AKS) como miembros.

  • Establezca estas variables de entorno:

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export CLUSTERID=<aks-cluster-resource-id>
    export STRATEGY=<strategy-name>
    
  • Si sigue las instrucciones de CLI de Azure de este artículo, instale la versión más reciente del CLI de Azure. Para la instalación o la actualización, consulte Instalación de la CLI de Azure.

  • También necesitas la fleet extensión de CLI de Azure. Para instalarlo, ejecute el siguiente comando:

    az extension add --name fleet
    

    Ejecute el comando az extension update para actualizar a la versión más reciente de la extensión publicada:

    az extension update --name fleet
    

Selección de clústeres para la estrategia

Hay dos maneras de seleccionar qué clústeres se incluyen en cada fase y grupo de la estrategia de actualización para controlar la secuencia de actualizaciones:

  • Etiquetas de miembro (recomendadas): asigne etiquetas a cada miembro de flota y úselas memberSelector para seleccionar miembros por esas etiquetas. Cada miembro puede tener varias etiquetas.
  • Grupos de actualización: asigne un grupo de actualizaciones a cada miembro de flota y, a continuación, defina grupos en la estrategia que coincidan con esos nombres de grupo. Cada miembro solo puede pertenecer a un grupo.

Creación de una estrategia de actualización mediante selectores de miembros (versión preliminar)

Use etiquetas de miembro para seleccionar clústeres en las estrategias de actualización. Proporcionan más flexibilidad. Para obtener detalles conceptuales, consulte Agrupación de clústeres mediante etiquetas de miembro.

Importante

Las características en vista previa de Azure Kubernetes Fleet Manager están disponibles en autoservicio y de manera opcional. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de Azure Kubernetes Fleet Manager reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción.

Aplicación de etiquetas en clústeres de miembros

Aplicar etiquetas al agregar un clúster miembro a la flota

Use el az fleet member create comando para aplicar etiquetas a los miembros de la flota. En el ejemplo siguiente se aplican dos etiquetas al clúster miembro: env=staging y tier=frontend:

az fleet member create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name member1 \
    --member-cluster-id $CLUSTERID \
    --labels "env=staging tier=frontend"

Aplicar etiquetas a un miembro de flota existente

Use el az fleet member update comando para aplicar etiquetas a los miembros de la flota.

az fleet member update \
 --resource-group $GROUP \
 --fleet-name $FLEET \
 --name member1 \
 --labels "env=staging tier=frontend"

Creación de una estrategia de actualización

Una estrategia de actualización consta de una o varias fases, donde una fase puede contener uno o varios grupos de actualizaciones.

Nota:

Una experiencia de Azure portal estará disponible antes de la disponibilidad general de esta funcionalidad.

  1. Cree un archivo JSON para definir las fases y grupos de la ejecución de la actualización. Las fases se ejecutan secuencialmente en el orden en que aparecen en el archivo JSON. Los grupos se ejecutan en paralelo dentro de cada fase. El siguiente archivo de ejemplo (example-labels-strategy.json) define una estrategia con dos fases mediante memberSelector para seleccionar clústeres por sus etiquetas e incluye la configuración opcional maxConcurrency :

    • La staging etapa utiliza un memberSelector a nivel de etapa para seleccionar todos los clústeres con la etiqueta env=staging y crear un grupo implícito.
    • La production fase utiliza un memberSelector a nivel de fase para filtrar previamente todos los clústeres con la etiqueta env=production y, a continuación, define dos grupos, cada uno con su propio memberSelector para seleccionar clústeres por la etiqueta tier.

    Cuando memberSelector se establece en un grupo, el campo name del grupo solo se utiliza como identificador de visualización para los informes de estado y el registro de eventos, y ya no se usa para la selección de miembros de la flota basada en la actualización del grupo.

    {
        "stages": [
            {
                "name": "staging",
                "memberSelector": { "byLabel": "env=staging" },
                "maxConcurrency": "1",
                "afterStageWaitInSeconds": 600
            },
            {
                "name": "production",
                "memberSelector": { "byLabel": "env=production" },
                "maxConcurrency": "4",
                "groups": [
                    {
                        "name": "frontend",
                        "memberSelector": { "byLabel": "tier=frontend" },
                        "maxConcurrency": "3"
                    },
                    {
                        "name": "backend",
                        "memberSelector": { "byLabel": "tier=backend" },
                        "maxConcurrency": "3"
                    }
                ]
            }
        ]
    }
    

Nota:

El maxConcurrency campo es opcional y controla el número de clústeres que se pueden actualizar simultáneamente en el nivel de fase o grupo. Use un valor mayor para actualizar clústeres más rápido a través de la flota o un valor menor para un lanzamiento más controlado que limite el radio de explosión si surgen problemas.

Cuando una fase aplica un memberSelector sin grupos (como staging), todos los miembros correspondientes forman un único grupo implícito y la simultaneidad se controla directamente a través del parámetro maxConcurrency de la fase. Cuando se definen grupos (como production), el nivel maxConcurrency de fase actúa como un límite máximo general en todos los grupos.

En este ejemplo, la staging fase establece maxConcurrency en "1", por lo que los clústeres de pruebas se actualizan de uno en uno. La production fase permite hasta "4" clústeres simultáneamente, con frontend y backend grupos, cada uno limitado a "3".

Los valores pueden ser un entero fijo (por ejemplo, "3") o un porcentaje (por ejemplo, "50%"). Si se omite, el sistema aplica valores predeterminados. Para más información sobre cómo se resuelven estos valores y sus límites superiores, consulte Simultaneidad máxima (versión preliminar).

  1. Cree una nueva estrategia de actualización con el comando az fleet updatestrategy create con la marca --stages establecida en el nombre del archivo JSON.

    az fleet updatestrategy create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name $STRATEGY \
     --stages example-labels-strategy.json
    

Creación de una estrategia de actualización mediante grupos de actualizaciones

Puede seleccionar clústeres en estrategias de actualización asignandolos a un único grupo de actualizaciones. Defina una estrategia de actualización que asigne estos grupos de actualizaciones a fases. Dentro de una fase de actualización, las actualizaciones se aplican a cada grupo de actualizaciones en paralelo. Dentro de un grupo de actualizaciones, los clústeres miembro se actualizan secuencialmente.

Nota:

Un miembro de flota solo puede formar parte de un grupo de actualizaciones, pero un grupo de actualizaciones puede tener varios miembros de la flota asignados. Un grupo de actualizaciones no es un tipo de recurso independiente. Los grupos de actualización son solo cadenas que representan referencias de los miembros de la flota. Por lo tanto, si todos los miembros de la flota con referencias a un grupo de actualizaciones común se eliminan, ese grupo de actualizaciones específico deja de existir también.

Asignación de clústeres para actualizar grupos

Asigne al grupo al agregar un clúster miembro a la flota

  1. En Azure Portal, vaya al recurso de Azure Kubernetes Fleet Manager.

  2. En el menú del servicio, en Configuración, seleccione Clústeres de miembros>Agregar.

    Recorte de pantalla de la página de Azure Portal para Azure Kubernetes Fleet Manager para agregar clústeres miembros.

  3. Seleccione el clúster que desea agregar y, a continuación, seleccione Siguiente: revisar y agregar.

  4. Escriba el nombre del grupo de actualizaciones al que desea asignar el clúster y, a continuación, seleccione Agregar.

    Recorte de pantalla de la página de Azure Portal para revisión de Azure Kubernetes Fleet Manager y adición de pasos para los clústeres miembros.

Asigne un clúster miembro a un grupo de actualización al agregar el clúster miembro a la flota mediante el comando az fleet member create con el parámetro --update-group establecido en el nombre del grupo de actualización.

az fleet member create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name member1 \
    --member-cluster-id $CLUSTERID \
    --update-group group-1a

Asignar un miembro de flota existente a un grupo de actualizaciones

  1. En Azure Portal, vaya al recurso de Azure Kubernetes Fleet Manager.

  2. En el menú del servicio, en Configuración, seleccione Clústeres de miembros.

  3. Seleccione los clústeres que desea asignar a un grupo de actualización y luego seleccione Asignar grupo de actualización

    Captura de pantalla de la página de Azure Portal para asignar clústeres de miembros existentes a un grupo.

  4. Escriba el nombre del grupo de actualizaciones al que desea asignar el clúster y, a continuación, seleccione Asignar.

    Captura de pantalla de la página de Azure Portal para los clústeres de miembros que muestra el formulario para actualizar el grupo de un clúster miembro.

Asigne un miembro de flota existente a un grupo de actualizaciones mediante el comando az fleet member update con la marca --update-group establecida en el nombre del grupo de actualizaciones.

az fleet member update \
 --resource-group $GROUP \
 --fleet-name $FLEET \
 --name member1 \
 --update-group group-1

Creación de una estrategia de actualización

Una estrategia de actualización consta de una o varias fases, donde una fase puede contener uno o varios grupos de actualizaciones.

  1. En Azure Portal, vaya al recurso de Azure Kubernetes Fleet Manager.

  2. En el menú de servicios, en Configuración, seleccione Actualización de varios clústeres>Estrategias, y a continuación, Crear.

  3. Escriba un nombre para la estrategia.

  4. La primera vez que vea la página, se muestra un diagrama de explicación de la estrategia de actualización que puede ayudar a visualizar cómo funcionan las estrategias.

    Captura de pantalla de Azure Portal en la que se muestra la creación de una estrategia de actualización.

  5. Seleccione Crear fase y escriba:

    • Nombre de la fase: asigne un nombre a la fase; debe ser único en todos los nombres de fase de la estrategia.
    • (Opcional) Aprobaciones de fase: seleccione esta opción si desea esperar una aprobación antes de que se inicie esta fase o después de que se complete. Para obtener más información, consulte Agregar aprobaciones para actualizar grupos y fases.
    • (Opcional) Pausar después de la fase: seleccione esta opción si desea definir una pausa antes de pasar a la siguiente fase.
    • (Opcional) Pausar duración: seleccione una duración predefinida o escriba un valor personalizado en segundos.

    Recorte de pantalla de Azure Portal en la que se muestra la creación de la fase de estrategia de actualización de Azure Kubernetes Fleet Manager.

  6. Asigne uno o varios grupos de actualización a la fase y, a continuación, seleccione Crear.

    Nota:

    El número máximo de grupos de actualizaciones en cada fase de actualización es 50.

    Recorte de pantalla de Azure Portal en la que se muestra la creación de la fase de estrategia de actualización de Azure Kubernetes Fleet Manager, seleccionando grupos de actualizaciones que se van a incluir.

En este escenario, creamos fases y grupos para que coincidan con los detalles usados para el proceso de Azure Portal.

  1. Cree un archivo JSON para definir las fases y grupos de la ejecución de la actualización. Las fases se ejecutan secuencialmente en el orden en que aparecen en el archivo JSON. Los grupos se ejecutan en paralelo dentro de cada fase, por lo que la ordenación no es importante. El siguiente archivo de ejemplo (example-stages.json) define una estrategia con dos fases e incluye maxConcurrency opciones y maxAllowedFailures opciones:

    {
        "stages": [
            {
                "name": "stage-1",
                "maxConcurrency": "7",
                "maxAllowedFailures": "2",
                "groups": [
                    {
                        "name": "group-1",
                        "maxConcurrency": "3",
                        "maxAllowedFailures": "1"
                    },
                    {
                        "name": "group-2",
                        "maxConcurrency": "50%",
                        "maxAllowedFailures": "25%"
                    }
                ],
                "afterStageWaitInSeconds": 300
            },
            {
                "name": "stage-2",
                "maxConcurrency": "100%",
                "maxAllowedFailures": "0",
                "groups": [
                    {
                        "name": "group-3",
                        "maxConcurrency": "2",
                        "maxAllowedFailures": "0"
                    }
                ]
            }
        ]
    }
    

    maxConcurrency

    El maxConcurrency campo es opcional y controla el número de clústeres que se pueden actualizar simultáneamente en el nivel de fase o grupo. Use un valor mayor para actualizar clústeres más rápido a través de la flota o un valor menor para un lanzamiento más controlado que limite el radio de explosión si surgen problemas.

    En este ejemplo, stage-1 asigna maxConcurrency a "7", lo que permite que hasta "7" clústeres en esta etapa se actualicen simultáneamente. Dentro de stage-1, group-1 limita la simultaneidad a los clústeres "3", lo que significa que hasta "3" en este grupo se pueden actualizar simultáneamente. group-2 permite que los "50%" clústeres se actualicen simultáneamente (por ejemplo, si el grupo contiene 4 clústeres, hasta 2 pueden actualizarse al mismo tiempo).

    Los valores pueden ser un entero fijo (por ejemplo, "3") o un porcentaje (por ejemplo, "100%"). Si se omite, el sistema aplica valores predeterminados. Para más información sobre cómo se resuelven estos valores y sus límites superiores, consulte Simultaneidad máxima (versión preliminar).

    maxAllowedFailures

    El campo maxAllowedFailures es opcional y controla cuántos errores en la actualización de clústeres miembros se toleran antes de que el grupo o la fase se marque como fallido. De forma predeterminada (cuando no se establece o "0"), un único error detiene toda la ejecución de la actualización.

    Esta configuración solo evalúa el recuento de errores. No aplica una tasa de éxito mínima. Por lo tanto, un grupo o una fase pueden, por tanto, finalizar en Completed incluso si algunos o todos sus miembros hayan fallado, siempre que no se hubiera superado el umbral de fallos cuando Fleet tomó sus decisiones de planificación.

    En este ejemplo, stage-1 configura maxAllowedFailures en "2", tolerando hasta dos fallos de miembros en toda la fase. Dentro de stage-1, group-1 tolera el fallo de "1" y group-2 tolera el fallo de "25%" de sus miembros (por ejemplo, si el grupo contiene 4 clústeres, se tolera hasta 1 fallo). stage-2 establece maxAllowedFailures a "0", lo que significa que cualquier fallo detiene inmediatamente la ejecución y suele ser útil en fases de producción.

    Para la mayoría de los despliegues, es preferible usar valores porcentuales porque se adaptan mejor a distintos tamaños de grupo. Evite establecer el valor igual al recuento total de miembros, a menos que desee de forma intencionada un comportamiento de "nunca falla" para ese segmento.

    Los valores pueden ser un entero fijo (por ejemplo, "3") o un porcentaje (por ejemplo, "25%"). Para más información sobre cómo se resuelven estos valores, consulte Errores máximos permitidos (versión preliminar).

  2. Cree una nueva estrategia de actualización con el comando az fleet updatestrategy create con la marca --stages establecida en el nombre del archivo JSON.

    az fleet updatestrategy create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name $STRATEGY \
     --stages example-stages.json
    

Pasos siguientes

Puede usar una estrategia de actualización como parte de una ejecución de actualización manual o un perfil de actualización automática. Vea: