Configura períodos de mantenimiento y exclusiones

En esta página, se muestra cómo usar las Exclusiones y períodos de mantenimiento para controlar cuándo puede realizarse o no el mantenimiento automático del clúster, como las actualizaciones automáticas, en tus clústeres de Google Kubernetes Engine (GKE).

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste Google Cloud CLI.
  • Establece la configuración predeterminada de Google Cloud CLI para tu proyecto mediante uno de los siguientes métodos:
    • Usa gcloud init si deseas ver una explicación sobre cómo configurar los valores predeterminados del proyecto.
    • Usa gcloud config para configurar el ID, la zona y la región del proyecto de manera individual.

    gcloud init

    1. Ejecuta gcloud init y sigue las instrucciones:

      gcloud init

      Si usas SSH en un servidor remoto, usa la marca --console-only para evitar que el comando abra un navegador:

      gcloud init --console-only
    2. Sigue las instrucciones para autorizar a la CLI de gcloud a usar tu cuenta de Google Cloud.
    3. Crea una configuración nueva o selecciona una existente.
    4. Elige un proyecto de Google Cloud.
    5. Elige una zona de Compute Engine predeterminada.
    6. Elige una región de Compute Engine predeterminada.

    gcloud config

    1. Establece tu ID del proyecto predeterminado:
      gcloud config set project PROJECT_ID
    2. Configura la región de Compute Engine predeterminada (por ejemplo, us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Configura la zona de Compute Engine predeterminada (por ejemplo, us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Actualiza gcloud a la versión más reciente:
      gcloud components update

    Cuando configuras las ubicaciones predeterminadas, puedes evitar errores en la CLI de gcloud como el siguiente: One of [--zone, --region] must be supplied: Please specify location.

Configura un período de mantenimiento

Para configurar un período de mantenimiento, debes establecer cuándo se inicia, cuánto dura y con qué frecuencia se repite. Por ejemplo, puedes configurar un período de mantenimiento que se repita cada semana de lunes a viernes.

Puedes configurar un período de mantenimiento con Google Cloud Console o Google Cloud CLI.

Crea un clúster con un período de mantenimiento simple

Puedes crear un período de mantenimiento simple en la CLI de gcloud si especificas la marca --maintenance-window. Esta marca te permite especificar un período de mantenimiento diario de 4 horas con un formato simplificado.

Para crear un clúster nuevo con un período de mantenimiento simple, ejecuta el siguiente comando:

gcloud container clusters create CLUSTER_NAME \
    --maintenance-window START_TIME

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre del clúster nuevo.
  • START_TIME: una marca de tiempo de 24 horas en UTC, como 16:00

El período de mantenimiento se ejecuta todos los días en el START_TIME especificado y durante cuatro horas.

Crea un clúster con un período de mantenimiento

Puedes crear un clúster nuevo con un período de mantenimiento mediante la CLI de gcloud o Google Cloud Console.

gcloud

Para crear un clúster nuevo con un período de mantenimiento, ejecuta el siguiente comando:

gcloud container clusters create CLUSTER_NAME \
    --maintenance-window-start START_TIME \
    --maintenance-window-end END_TIME \
    --maintenance-window-recurrence RRULE

Reemplaza lo siguiente:

  • CLUSTER_NAME es el nombre del clúster nuevo.
  • START_TIME: cuando se inicia el período de mantenimiento, expresado como un valor DTSTART RFC-5545.
  • END_TIME: cuando finaliza el período de mantenimiento, especificado en el mismo formato que START_TIME, pero solo se usa para calcular la duración del período de mantenimiento. El valor de END_TIME debe ser posterior en relación con START_TIME.
  • RRULE: una RRULE RFC-5545. Este es un formato muy flexible y cuenta con varias formas de especificar reglas de recurrencia.

Por ejemplo, con el siguiente comando, se crea un clúster llamado my-cluster con un período de mantenimiento que comienza a las 2:00 a.m. UTC del 1 de agosto de 2021, finaliza cuatro horas después y se ejecuta todos los días. Puedes obtener más información sobre el formato de fechas y horas.

gcloud container clusters create my-cluster \
    --maintenance-window-start 2021-08-01T02:00:00Z \
    --maintenance-window-end 2021-08-01T06:00:00Z \
    --maintenance-window-recurrence FREQ=DAILY

Console

  1. Ve a la página Google Kubernetes Engine en la consola.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Configura tu clúster como desees.

  4. En el panel de navegación, en Clústeres, haz clic en Automatización.

  5. Selecciona la casilla de verificación Habilitar período de mantenimiento.

  6. Selecciona la hora de inicio y la duración y, a continuación, selecciona los días de la semana en los que se activa el período de mantenimiento. Para editar directamente la especificación de la regla de recurrencia (RRule), selecciona Editor personalizado.

  7. Haga clic en Crear.

Configura un período de mantenimiento para un clúster existente

gcloud

Para crear o actualizar un período de mantenimiento de un clúster existente, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --maintenance-window-start START_TIME \
    --maintenance-window-end END_TIME \
    --maintenance-window-recurrence RRULE

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster existente.
  • START_TIME: cuando se inicia el período de mantenimiento, expresado como un valor DTSTART RFC-5545.
  • END_TIME: cuando finaliza el período de mantenimiento, especificado en el mismo formato que START_TIME, pero solo se usa para calcular la duración del período de mantenimiento. El valor de END_TIME debe ser posterior en relación con START_TIME.
  • RRULE: una RRULE RFC-5545. Este es un formato muy flexible y cuenta con varias formas de especificar reglas de recurrencia.

Console

Para crear o modificar un período de mantenimiento de un clúster existente, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Automatización, haz clic en Editar política de mantenimiento junto al campo Período de mantenimiento.

  4. Selecciona la casilla de verificación Habilitar período de mantenimiento.

  5. Selecciona la hora de inicio y la duración y, a continuación, selecciona los días de la semana en los que se activa el período de mantenimiento. Para editar directamente la RRule, selecciona Editor personalizado.

  6. Haz clic en Save Changes.

Finaliza de forma manual el mantenimiento incompleto

Si una actualización o algún otro mantenimiento automático demoran más en completar el período de mantenimiento, GKE intenta detener las tareas de mantenimiento en curso y las reanuda cuando se vuelva a realizar el período de mantenimiento. Si se cancela una actualización automática, y tienes habilitadas las actualizaciones automáticas de nodos, es posible que tus nodos presenten un estado de versión mixta, pero tu clúster debería funcionar con normalidad.

Para actualizar tu clúster de forma manual, o cancelar o revertir una actualización parcial, visita Actualiza un clúster.

Quita un período de mantenimiento

gcloud

Para quitar un período de mantenimiento de un clúster, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME --clear-maintenance-window

Reemplaza CLUSTER_NAME por el nombre del clúster existente.

Console

Para quitar un período de mantenimiento, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Automatización, haz clic en Editar política de mantenimiento junto al campo Período de mantenimiento.

  4. Desmarca la casilla de verificación Habilitar período de mantenimiento.

  5. Haz clic en Save Changes.

Ejemplos de períodos de mantenimiento

En los siguientes ejemplos, se ilustran algunas de las diferentes maneras en que puedes configurar un período de mantenimiento. Solo se muestran las marcas relevantes, porque las marcas usan la misma sintaxis para crear un clúster nuevo o actualizar uno existente.

Cada semana, los martes y miércoles, a partir del 27 de agosto de 2019, durante todo el día.

En este ejemplo, la diferencia entre las marcas de tiempo de inicio y de finalización es un día completo, por lo que el período de mantenimiento se ejecuta durante 24 horas los martes y miércoles.

--maintenance-window-start 2019-08-27T00:00:00Z \
--maintenance-window-end 2019-08-28T00:00:00Z \
--maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=TU,WE'
Todos los días de lunes a viernes desde las 9:00 hasta las 17:00 UTC-4

En este ejemplo, se muestra cómo llevar a cabo un período de mantenimiento diario, pero se omiten los fines de semana. En este ejemplo, se especifica una zona horaria distinta a UTC.

--maintenance-window-start 2019-09-02T09:00:00-04:00 \
--maintenance-window-end 2019-09-02T17:00:00-04:00 \
--maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR'
Cada semana a las 4:00 p.m. durante 8 horas, UTC-7

Si no especificas una zona horaria para --maintenance-window-start, se usa la hora local, como se configuró en tu cuenta de Google Cloud. Google Cloud Console siempre usa la hora local.

--maintenance-window-start 2019-08-13T16:00:00-7:00 \
--maintenance-window-end 2019-08-14T00:00:00-7:00 \
--maintenance-window-recurrence FREQ=WEEKLY

Configura una exclusión de mantenimiento

A fin de configurar una exclusión de mantenimiento para el clúster, debes especificar lo siguiente:

  • Nombre: es el nombre de la exclusión (opcional).
  • Hora de inicio: es la fecha y hora en que se debe comenzar el período de exclusión.
  • Hora de finalización: Es la fecha y hora de finalización del período de exclusión. Consulta la siguiente tabla para obtener información sobre las restricciones de duración de un período de exclusión para cada uno de los permisos disponibles.
  • Permiso: es el permiso de las actualizaciones automáticas que se restringirán. Consulta la siguiente tabla que enumera los permisos de exclusión disponibles.
Permiso Descripción Longitud máxima de la exclusión
Sin actualizaciones (predeterminado) Excluye todos los parches y las actualizaciones menores. Evita las interrupciones de las VM en el plano de control y los grupos de nodos del clúster. No puede superar los 30 días
Sin actualizaciones secundarias Excluye todas las actualizaciones menores. Las interrupciones de VM pueden ocurrir en el plano de control y en los grupos de nodos del clúster debido a las actualizaciones de parches. No puede superar los 180 días ni extenderse más allá de la fecha de finalización del ciclo de vida de la versión secundaria.
Sin actualizaciones secundarias ni de nodos Excluye todas las actualizaciones secundarias y las actualizaciones de nodos. Evita que se realicen interrupciones a las VM en los grupos de nodos del clúster. Sin embargo, pueden ocurrir interrupciones en el plano de control. No puede superar los 180 días ni extenderse más allá de la fecha de finalización del ciclo de vida de la versión secundaria.

Si deseas ver las definiciones de las versiones secundarias y de parche, consulta el Esquema del control de versiones.

Las exclusiones de mantenimiento tienen las siguientes limitaciones:

  • Puedes restringir el permiso de las actualizaciones automáticas en una exclusión de mantenimiento solo para los clústeres que estén inscritos en un canal de versiones.
  • Puedes agregar un máximo de 3 exclusiones de mantenimiento que excluyan todas las actualizaciones (es decir, un permiso de “sin actualizaciones”).
  • Puedes tener un máximo de 20 exclusiones de mantenimiento en total.
  • Si no especificas un permiso en tu exclusión, el permiso predeterminado será “sin actualizaciones”.

Crea un clúster con una exclusión de mantenimiento

Puedes configurar una exclusión de mantenimiento cuando creas un clúster nuevo mediante Google Cloud Console. No se puede realizar esta tarea en la CLI de gcloud.

Para crear un clúster con una exclusión de mantenimiento, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la consola.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Configura tu clúster como desees.

  4. En el panel de navegación, en Clúster, haz clic en Automatización.

  5. En Exclusiones de mantenimiento, haz clic en Agregar exclusión de mantenimiento.

  6. Selecciona el Alcance, una Hora de inicio y una Hora de finalización.

  7. Haga clic en Crear.

Puedes ver un ejemplo de la exclusión de mantenimiento para el Black Friday.

A fin de configurar una exclusión de mantenimiento para un clúster existente, haz lo siguiente:

Puedes configurar una exclusión de mantenimiento en un clúster existente con Google Cloud Console o la CLI de gcloud.

gcloud

A fin de configurar una exclusión de mantenimiento para un clúster existente, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --add-maintenance-exclusion-name EXCLUSION_NAME
    --add-maintenance-exclusion-start START_DATE_TIME \
    --add-maintenance-exclusion-end END_DATE_TIME \
    --add-maintenance-exclusion-scope SCOPE

Reemplaza lo siguiente:

  • CLUSTER_NAME: El nombre de tu clúster.
  • EXCLUSION_NAME: Es el nombre de la exclusión de mantenimiento.
  • START_DATE_TIME: Es la fecha y la hora de inicio de la exclusión.
  • END_DATE_TIME: Es la fecha y hora de finalización de la exclusión.
  • SCOPE: Es el permiso de la actualización que se excluirá, que puede ser uno de los siguientes valores: no_upgrades, no_minor_upgrades o no_minor_or_node_upgrades.

Para ver los formatos de fecha y hora compatibles, ejecuta gcloud topic datetimes.

Console

A fin de configurar una exclusión de mantenimiento para un clúster existente, haz lo siguiente:

  1. Ve a la página Google Kubernetes Engine en la consola.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Automatización, junto al campo Exclusiones de mantenimiento, haz clic en Editar exclusiones de mantenimiento.

  4. En Exclusiones de mantenimiento, haz clic en Agregar exclusión de mantenimiento.

  5. Selecciona el Alcance, una Hora de inicio y una Hora de finalización.

  6. Haz clic en Save Changes.

Quita una exclusión de mantenimiento

Puedes quitar las exclusiones de mantenimiento mediante Google Cloud Console o la CLI de gcloud.

gcloud

Para quitar una exclusión de mantenimiento existente, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --remove-maintenance-exclusion EXCLUSION_NAME

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster existente.
  • EXCLUSION_NAME: es el nombre de la exclusión de mantenimiento que se quitará.

Console

Para quitar una exclusión de mantenimiento de un clúster existente, haz lo siguiente:

  1. Ve a la página Google Kubernetes Engine en la consola.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Automatización, junto al campo Exclusiones de mantenimiento, haz clic en Editar exclusiones de mantenimiento.

  4. En Exclusiones de mantenimiento, haz clic en Borrar elemento junto al campo Hora de finalización de la exclusión que quieres quitar.

  5. Haz clic en Save Changes.

Para ver todas las exclusiones de mantenimiento en un clúster, puedes ver la política de mantenimiento del clúster.

Ejemplo de exclusión de mantenimiento

En el siguiente ejemplo, se evita el mantenimiento durante los cuatro días que abarcan desde el Black Friday hasta el Cyber Monday, el período de ventas de mayor volumen del año para muchas empresas minoristas. En este ejemplo, se muestra cómo evitar que tenga lugar un período de mantenimiento desde el Black Friday 2021 (26 de noviembre de 2021) hasta el Cyber Monday 2021 (29 de noviembre de 2021) desde la medianoche del Este (UTC-5) hasta las 23:59:59 Pacífico (UTC-8).

gcloud container clusters update sample-cluster \
    --add-maintenance-exclusion-name black-friday \
    --add-maintenance-exclusion-start 2021-11-26T00:00:00-05:00 \
    --add-maintenance-exclusion-end 2021-11-29T23:59:59-08:00 \
    --add-maintenance-exclusion-scope no_upgrades

Visualiza la política de mantenimiento de un clúster

Para ver la política de mantenimiento de un clúster, que incluye ver si tiene si tiene un período de mantenimiento y todas sus exclusiones de mantenimiento, usa el siguiente comando:

gcloud container clusters describe CLUSTER_NAME

Soluciona problemas

Las exclusiones de mantenimiento solo se pueden aplicar a los canales de versiones

Cuando restringes el permiso de las actualizaciones automáticas en una exclusión de mantenimiento, el clúster debe estar inscrito en un canal de versiones; de lo contrario, verás los siguientes errores:

ERROR: (gcloud.container.clusters.update) INVALID_ARGUMENT: Cannot update to
STATIC channel since following maintenancePolicy.maintenanceExclusions can only
apply to release channels. Please remove those maintenance exclusions.
ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=MaintenancePolicy.maintenanceExclusions["no"] could not apply to cluster
in STATIC channel, only no_upgrades exclusions are allowed in STATIC channel.

Las exclusiones de mantenimiento exceden el límite

Solo puedes especificar 3 exclusiones de mantenimiento como máximo que excluyan todas las actualizaciones (es decir, un permiso de “sin actualizaciones”); de lo contrario, recibirás el siguiente error:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=Number of active maintenance exclusions exceeds limit (3).

Solo puedes especificar un máximo de 20 exclusiones de mantenimiento en total; de lo contrario, recibirás el siguiente error:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400,
message=Number of total maintenance exclusions exceeds limit (20).

¿Qué sigue?