Actualiza Anthos Service Mesh

En esta página, se describe cómo actualizar Anthos Service Mesh.

Los administradores de la plataforma pueden actualizar Anthos Service Mesh. La actualización de Anthos Service Mesh es una actualización basada en la revisión o canary en la que las versiones nuevas y anteriores del plano de control se ejecutan mientras pruebas la versión nueva con un porcentaje pequeño de tus cargas de trabajo. Este enfoque es más seguro que una actualización in situ, en la que la versión nueva del plano de control reemplaza la versión anterior.

La tarea de volver a implementar los componentes del plano de control de Anthos Service Mesh lleva entre 5 y 10 minutos en completarse. También debes insertar nuevos proxies de sidecar en todas tus cargas de trabajo para que se actualicen con la versión actual de Anthos Service Mesh. El tiempo que lleva actualizar los proxies de sidecar puede ser de alrededor de 100 pods por minuto, pero esto depende de muchos factores, como la cantidad de pods, la cantidad de nodos, la configuración de escalamiento de implementación, los presupuestos de interrupción de pods y otros parámetros de configuración.

Prerequisites

Antes de realizar la actualización, asegúrate de cumplir con las siguientes condiciones:

  • Debes tener un clúster de usuario de destino administrado por el clúster de administrador.
  • El clúster de usuario de destino tiene una instalación existente de Anthos Service Mesh que tiene actualizaciones disponibles.

Visualiza la instalación existente

Confirma que Anthos Service Mesh esté instalado en tu clúster.

Console

En la consola del centro de administración, ve al menú Malla de servicios para ver la lista de clústeres que tienen instalado Anthos Service Mesh.

API

Puedes encontrar los siguientes recursos personalizados en un clúster de administrador que describe la instalación actual de Anthos Service Mesh:

  • Un objeto ServiceMeshBinding que vincula un objeto ServiceMeshFeatureSpec con el ID de tu clúster de usuario. Ejecuta el siguiente comando para encontrar el objeto. Como este comando puede mostrar varios objetos, debes buscar el objeto con el ID del clúster de destino en su especificación.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center
    

    Este es un ejemplo del contenido del objeto:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: PREVIOUS_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         - TARGET_CLUSTER_ID
    
  • Un objeto ServiceMeshFeatureSpec que define las especificaciones de tu instalación de Anthos Service Mesh. Se hace referencia a su espacio de nombres y nombre en el campo config.configRef del objeto ServiceMeshBinding que se describe en el ejemplo anterior. Ejecuta el siguiente comando para ver el objeto.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshfeaturespec PREVIOUS_SERVICE_MESH_SPEC -n anthos-management-center -o yaml
    

    Este es un ejemplo del contenido del objeto:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name:PREVIOUS_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.7.3-asm.6
    

Instala una versión más reciente de Anthos Service Mesh

Puedes actualizar a una versión más reciente de Anthos Service Mesh mediante la consola del centro de administración o la API.

Console

  1. En la consola del Centro de administración, ve al menú Panel.
  2. Haz clic en la pestaña Actualizaciones para ver todas las actualizaciones disponibles.
  3. Haz clic en Ver actualizaciones para el clúster que deseas actualizar.
  4. En la lista Actualizaciones disponibles, busca la versión de Anthos Service Mesh de destino a la que deseas actualizar y haz clic en Actualizar para abrir la página de actualización de Anthos Service Mesh.Página de actualizaciones disponibles
  5. Confirma la información de la versión de destino, como la versión, la descripción y un vínculo a las notas de la versión, y haz clic en Continuar.
  6. En el cuadro de diálogo emergente, haz clic en Actualizar para comenzar a instalar la versión de destino de Anthos Service Mesh en el clúster de destino.
  7. Se abrirá la página Service Mesh, en la que puedes ver que se está instalando la versión de destino.

API

Realiza los siguientes pasos mediante los comandos de kubectl en el clúster de administrador para instalar una versión más reciente de Anthos Service Mesh:

  1. Crea un objeto ServiceMeshFeatureSpec nuevo para la versión más reciente. Este es un objeto de muestra para la versión 1.8.3-asm.2:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name: NEW_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.8.3-asm.2
    
  2. Actualiza el objeto ServiceMeshBinding existente para insertar una entrada nueva a fin de vincular el ServiceMeshFeatureSpec nuevo con el clúster:

     apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
     kind: ServiceMeshBinding
     metadata:
      name: service-mesh-binding-sample
      namespace: anthos-management-center
     spec:
      configs:
      - configRef:
          name: PREVIOUS_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
      - configRef:
          name: NEW_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
    
  3. La versión más reciente de Anthos Service Mesh se instala en el clúster de administrador. Puedes comprobar si la instalación está lista con el siguiente comando:

     KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center -o jsonpath="{range .items[*].status.bindingItemStatuses[*]}{'\n'}{['clusterID', 'configRef', 'conditions']}" | grep NEW_SERVICE_MESH_SPEC | grep TARGET_CLUSTER_ID
    

    Reemplaza TARGET_CLUSTER_ID y NEW_SERVICE_MESH_SPEC por los valores configurados en el objeto ServiceMeshBinding.

    Este es un ejemplo del resultado:

    target-user-cluster-1 {"name":"new-spec-q64x7","namespace":"anthos-management-center"} [{"lastTransitionTime":"2021-05-27T18:06:27Z","message":"","observedGeneration":1,"reason":"Healthy","status":"True","type":"Ready"}]
    

    El status: true de la condición Ready indica que se completó la instalación.

La versión anterior de Anthos Service Mesh no se quita de forma automática. Debes migrar tus cargas de trabajo de forma manual a la nueva versión de Anthos Service Mesh y desinstalar la versión anterior.

Migra tus cargas de trabajo

Realiza los siguientes pasos en el clúster de usuario para migrar tus cargas de trabajo:

  1. Obtén la etiqueta de revisión de tu versión anterior y la nueva de Anthos Service Mesh. Sigue estos pasos para encontrar esos valores:

    Console

    1. En la consola del centro de administración, ve al menú Malla de servicios.
    2. En la lista de clústeres, busca la etiqueta de revisión en la columna Revisión del clúster.

    API

    Ejecute el siguiente comando:

     KUBECONFIG=USER_KUBECONFIG kubectl get pod -n istio-system -l app=istiod -L istio.io/rev
    

    Este es un ejemplo del resultado:

    NAME                                READY   STATUS    RESTARTS   AGE   REV
    istiod-asm-173-6-756d989c58-p84b9   1/1     Running   0          13h   asm-173-6
    istiod-asm-173-6-756d989c58-t6vh8   1/1     Running   0          13h   asm-173-6
    istiod-asm-183-2-76f64c6bc7-2qnxq   1/1     Running   0          17h   asm-183-2
    istiod-asm-183-2-76f64c6bc7-8nrpz   1/1     Running   0          17h   asm-183-2
    

    En el resultado, la etiqueta de revisión se encuentra en la columna REV. En este ejemplo, el valor es asm-183-2. Esta etiqueta se usa más adelante a fin de activar la inserción de sidecar para la versión nueva de Anthos Service Mesh.

  2. Agrega la etiqueta de revisión a un espacio de nombres. En el siguiente comando, cambia REVISION por el valor que coincide con la etiqueta de revisión de la versión nueva de Anthos Service Mesh.

    KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
    
  3. Reinicia las cargas de trabajo a fin de activar la reinserción, por ejemplo, para reiniciar todas las implementaciones en un espacio de nombres:

    KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
    
  4. Verifica que tus pods estén configurados para apuntar a la nueva versión de istiod.

    KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    
  5. Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.

  6. Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos del 2 a 5 para etiquetar el espacio de nombres y reiniciar las cargas de trabajo.

Borra la versión anterior de Anthos Service Mesh.

Si tu aplicación funciona como se espera, puedes desinstalar la versión anterior de Anthos Service Mesh mediante el Centro de administración o la API.

Console

  1. En la consola del centro de administración, ve al menú Malla de servicios.
  2. En la columna Versiones, haz clic en el vínculo de la versión anterior de Anthos Service Mesh.
  3. En la página Editar Service Mesh, haz clic en Quitar Service Mesh.
  4. Aparecerá un diálogo emergente con el resultado de una verificación de confianza antes de la eliminación. En el diálogo, puedes ver todos los espacios de nombres y pods que aún dependen de la versión anterior de Anthos Service Mesh según su etiqueta istio.io/rev. Si la verificación encuentra alguna de estas dependencias, no puedes continuar hasta que migres dichos pods o espacios de nombres.
  5. Si se aprueba la verificación de confianza, haz clic en Quitar para comenzar a desinstalar Anthos Service Mesh en el clúster de destino.

Después de enviar la solicitud de eliminación, se abre la página de la malla de servicios y la versión anterior de Anthos Service Mesh ya no está visible. La desinstalación de los recursos anteriores de Anthos Service Mesh puede tomar varios minutos en completarse.

API

  1. Antes de borrar la versión anterior de Anthos Service Mesh, verifica que no haya pods ni espacios de nombres que dependan de ella.

    1. Ejecuta el siguiente comando para verificar si hay dependencias de espacios de nombres.

      KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION  
      

      Reemplaza PREVIOUS_REVISION por la etiqueta de revisión de la versión anterior de Anthos Service Mesh.

    2. Ejecuta el siguiente comando para verificar si hay dependencias de pods.

      KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
      

    Si las búsquedas muestran resultados vacíos, continúa con el paso siguiente. De lo contrario, migra la carga de trabajo antes de continuar.

  2. Actualiza el objeto ServiceMeshBinding en el clúster de administrador para desvincular la especificación de atributos anterior del clúster de destino. Este es un ejemplo del objeto ServiceMeshBinding después de quitar la entrada PREVIOUS_SERVICE_MESH_SPEC:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: NEW_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         -  TARGET_CLUSTER_ID
    
  3. Después de actualizar ServiceMeshBinding, comienza la eliminación de la versión anterior de Anthos Service Mesh. La desinstalación puede tardar varios minutos en completarse. Ejecuta el siguiente comando para verificar que se haya eliminado la versión anterior.

    KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
    

    Si se completó la desinstalación, este comando muestra un resultado vacío.