Actualizar grupos de nodos

Actualizar el plano de control y los grupos de nodo trabajador por separado en un clúster de usuario de Google Distributed Cloud (solo software) para VMware te permite validar la compatibilidad de las cargas de trabajo en grupos de nodos individuales y distribuir las actualizaciones en períodos de mantenimiento más cortos.

Este documento está destinado a administradores de TI y operadores que administran el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas comunes del usuario de GKE. Antes de comenzar, asegúrate de estar familiarizado con la Descripción general de la actualización, las Reglas de versión de actualización, las Prácticas recomendadas para la actualización y la Actualización de un clúster.

Limitaciones

La actualización de los grupos de nodos por separado del plano de control tiene las siguientes limitaciones:

  • Esta función es compatible con los grupos de nodos de Ubuntu y Container-Optimized OS, pero no con los de Windows.

  • Esta función no está disponible cuando se actualizan clústeres no avanzados a clústeres avanzados. Los clústeres no avanzados se actualizarán a clústeres avanzados en la versión 1.33 de forma automática.

  • Versión 1.31: Esta función no está disponible en clústeres avanzados.

  • Versión 1.32 y posteriores: Esta función está disponible en clústeres avanzados.

  • La versión del grupo de nodos del balanceador de cargas debe ser la misma que la del clúster. No se admite la actualización de un grupo de nodos del balanceador de cargas (un grupo de nodos con enableLoadBalancer: true) por separado del plano de control ni el sesgo de versiones.

¿Por qué actualizar el plano de control y los grupos de nodos por separado?

En ciertas situaciones, es posible que desees actualizar algunos, pero no todos, los grupos de nodo trabajador en un clúster de usuario:

  • Primero, puedes actualizar el plano de control y un grupo de nodos que tenga poco tráfico o que ejecute tus cargas de trabajo menos críticas. Después de verificar que tus cargas de trabajo se ejecutan correctamente en la versión nueva, puedes actualizar grupos de nodos adicionales hasta que se actualicen todos.

  • En lugar de usar un período de mantenimiento grande para la actualización del clúster, puedes actualizarlo en varios períodos de mantenimiento. Para obtener información sobre cómo estimar el tiempo de un período de mantenimiento, consulta Estima el compromiso de tiempo y planifica un período de mantenimiento.

  • Puedes omitir una versión secundaria cuando actualizas grupos de nodos para reducir la cantidad de actualizaciones necesarias para mantenerte en una versión compatible, lo que ahorra tiempo y reduce las interrupciones de la carga de trabajo. Para obtener más información, consulta Omite una versión cuando actualices grupos de nodos.

Antes de comenzar

  1. En la versión 1.29 y posteriores, las verificaciones previas del servidor están habilitadas de forma predeterminada. Asegúrate de revisar tus reglas de firewall para realizar los cambios necesarios.

  2. Para actualizar a la versión 1.28 y posteriores, debes habilitar kubernetesmetadata.googleapis.com y otorgar el rol de IAM kubernetesmetadata.publisher a la cuenta de servicio de supervisión y registro. Para obtener más detalles, consulta Requisitos de la API de Google y de Identity and Access Management (IAM).

  3. Asegúrate de que la versión actual del clúster sea la 1.14 o una posterior.

Actualiza el plano de control y los grupos de nodos seleccionados

La actualización del plano de control de un clúster de usuario por separado de los grupos de nodo trabajador es compatible con gkectl, Google Cloud CLI y Terraform. Solo puedes usar Terraform para la actualización si creaste el clúster de usuario con Terraform.

gkectl

  1. Define la versión de origen y la versión de destino en las siguientes variables de marcador de posición. Todas las versiones deben ser el número de versión completo en el formato x.y.z-gke.N, como 1.16.11-gke.25.

    Versión Descripción
    SOURCE_VERSION Es la versión actual del clúster.
    TARGET_VERSION Elige la versión de destino. Selecciona el parche recomendado de la versión secundaria de destino.
  2. Actualiza tu estación de trabajo de administrador a la versión de destino. Espera a que aparezca un mensaje que indique que la actualización se realizó correctamente.

  3. Importa las imágenes de SO correspondientes a vSphere:

    gkectl prepare \
      --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Reemplaza ADMIN_CLUSTER_KUBECONFIG por la ruta de acceso del archivo kubeconfig del clúster de administrador.

  4. Realiza los siguientes cambios en el archivo de configuración del clúster de usuario:

    • Establece el campo gkeOnPremVersion en la versión de destino, TARGET_VERSION.

    • Para cada grupo de nodos que desees actualizar, establece el campo nodePools[i].gkeOnPremVersion en la cadena vacía.

      • En la versión 1.28 y en las posteriores, puedes acelerar la actualización del grupo de nodos configurando el campo nodePools[i].updateStrategy.rollingUpdate.maxSurge en un valor de número entero mayor que 1. Cuando actualizas nodos con maxSurge, se actualizan varios nodos en el mismo tiempo que se tarda en actualizar un solo nodo.
    • Para cada grupo de nodos que no quieras actualizar, establece nodePools[i].gkeOnPremVersion en la versión de origen, SOURCE_VERSION. Ten en cuenta que no puedes retener los grupos de nodos del balanceador de cargas (grupos de nodos con enableLoadBalancer: true); su versión debe coincidir con la versión del clúster.

    En el siguiente ejemplo, se muestra una parte del archivo de configuración del clúster de usuario. Especifica que el plano de control y pool-1 se actualizarán a TARGET_VERSION, pero pool-2 permanecerá en SOURCE_VERSION.

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: SOURCE_VERSION
      ...
    
  5. Actualiza el plano de control y los grupos de nodos seleccionados:

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG_FILE
    

    Reemplaza USER_CLUSTER_CONFIG por la ruta de acceso del archivo de configuración del clúster de usuario.

Actualiza grupos de nodos adicionales

Con el ejemplo anterior, supongamos que todo funciona bien con pool-1 y ahora quieres actualizar pool-2.

  1. En el archivo de configuración del clúster de usuario, en pool-2, configura gkeOnPremVersion como la cadena vacía:

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: ""
      ...
    
  2. Ejecuta gkectl update cluster para aplicar el cambio:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

gcloud CLI

La actualización de un clúster de usuario requiere algunos cambios en el clúster de administrador. El comando gcloud container vmware clusters upgrade realiza automáticamente lo siguiente:

  • Inscribe el clúster de administrador en la API de GKE On-Prem si aún no está inscrito.

  • Descarga e implementa un paquete de componentes en el clúster de administrador. La versión de los componentes coincide con la versión que especificas para la actualización. Estos componentes permiten que el clúster de administrador administre clústeres de usuario en esa versión.

Actualizar el plano de control

Sigue estos pasos para actualizar el plano de control del clúster de usuario.

  1. Actualiza los componentes de gcloud CLI:

    gcloud components update
    
  2. Cambia la política de actualización en el clúster:

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --upgrade-policy control-plane-only=True
    

    Reemplaza lo siguiente:

    • USER_CLUSTER_NAME: Es el nombre del clúster de usuario que se actualizará.

    • PROJECT_ID: Es el ID del proyecto host de la flota en el que el clúster de usuario es miembro. Este es el proyecto que especificaste cuando se creó el clúster. Si creaste el clúster con gkectl, este es el ID del proyecto en el campo gkeConnect.projectID del archivo de configuración del clúster.

    • REGION: Es la región de Google Cloud en la que se ejecuta la API de GKE On-Prem y se almacenan sus metadatos. Si creaste el clúster con un cliente de API de GKE On-Prem, esta es la región que seleccionaste cuando creaste el clúster. Si creaste el clúster con gkectl, esta es la región que especificaste cuando lo inscribiste en la API de GKE On-Prem.

  3. Actualiza el plano de control del clúster:

    gcloud container vmware clusters upgrade USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

    Reemplaza TARGET_VERSION por la versión a la que deseas actualizar. Selecciona el parche recomendado de la versión secundaria de destino.

    El resultado del comando es similar al siguiente:

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
    

    En el resultado de ejemplo, la cadena operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 es el OPERATION_ID de la operación de larga duración. Para averiguar el estado de la operación, ejecuta el siguiente comando en otra ventana de terminal:

    gcloud container vmware operations describe OPERATION_ID \
      --project=PROJECT_ID \
      --location=REGION
    

Actualizar grupos de nodos

Sigue estos pasos para actualizar los grupos de nodos después de actualizar el plano de control del clúster de usuario:

  1. Obtén una lista de grupos de nodos en el clúster de usuario:

    gcloud container vmware node-pools list
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION
    
  2. Para cada grupo de nodos que quieras actualizar, ejecuta el siguiente comando:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

Terraform

  1. Actualiza los componentes de gcloud CLI:

    gcloud components update
    
  2. Si aún no lo has hecho, inscribe el clúster de administrador en la API de GKE On-Prem. Una vez que el clúster esté inscrito en la API de GKE On-Prem, no necesitarás volver a realizar este paso.

  3. Descarga la versión nueva de los componentes y, luego, impleméntalos en el clúster de administrador:

    gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --required-platform-version=TARGET_VERSION
    

    Reemplaza lo siguiente:

    • ADMIN_CLUSTER_NAME: Es el nombre del clúster de administrador.

    • PROJECT_ID: Es el ID del proyecto host de la flota en el que el clúster de usuario es miembro. Este es el proyecto que especificaste cuando se creó el clúster. Si creaste el clúster con gkectl, este es el ID del proyecto en el campo gkeConnect.projectID del archivo de configuración del clúster.

    • REGION: Es la región de Google Cloud en la que se ejecuta la API de GKE On-Prem y se almacenan sus metadatos. Si creaste el clúster con un cliente de API de GKE On-Prem, esta es la región que seleccionaste cuando creaste el clúster. Si creaste el clúster con gkectl, esta es la región que especificaste cuando lo inscribiste en la API de GKE On-Prem.

    • TARGET_VERSION: Es la versión a la que se actualizará. Selecciona el parche recomendado de la versión secundaria de destino.

    Este comando descarga la versión de los componentes que especificas en --required-platform-version en el clúster de administrador y, luego, implementa los componentes. Estos componentes permiten que el clúster de administrador administre clústeres de usuario en esa versión.

  4. En el archivo main.tf que usaste para crear el clúster de usuario, cambia on_prem_version en el recurso del clúster a la versión nueva.

  5. Agrega lo siguiente al recurso del clúster para que solo se actualice el plano de control:

    upgrade_policy {
      control_plane_only = true
    }
    
  6. Inicializa y crea terraform plan:

    terraform init
    

    Terraform instala las bibliotecas necesarias, como el proveedor de Google Cloud.

  7. Revisa la configuración y realiza cambios si es necesario:

    terraform plan
    
  8. Aplica el plan de Terraform para actualizar el plano de control del clúster de usuario:

    terraform apply
    

Actualizar grupos de nodos

Sigue estos pasos para actualizar los grupos de nodos después de actualizar el plano de control del clúster de usuario:

  1. En main.tf, en el recurso de cada grupo de nodos que quieras actualizar, agrega lo siguiente:

    on_prem_version = "TARGET_VERSION"
    

    Por ejemplo:

    resource "google_gkeonprem_vmware_node_pool" "nodepool-basic" {
    name = "my-nodepool"
    location = "us-west1"
    vmware_cluster = google_gkeonprem_vmware_cluster.default-basic.name
    config {
      replicas = 3
      image_type = "ubuntu_containerd"
      enable_load_balancer = false
    }
    on_prem_version = "1.16.0-gke.0"
    }
    
  2. Inicializa y crea terraform plan:

    terraform init
    
  3. Revisa la configuración y realiza cambios si es necesario:

    terraform plan
    
  4. Aplica el plan de Terraform para actualizar los grupos de nodos:

    terraform apply
    

Soluciona problemas

Si encuentras un problema después de actualizar un grupo de nodos, puedes revertirlo a la versión anterior. Para obtener más información, consulta Revierte un grupo de nodos después de una actualización.