En esta guía, se explica cómo actualizar Anthos Service Mesh de la versión 1.5.4+ or 1.6.4+ a la versión 1.6.14 en GKE. Para actualizar desde Anthos Service Mesh 1.4.5+, primero debes actualizar a Anthos Service Mesh 1.5. No se admiten las actualizaciones directas de Anthos Service Mesh 1.4 a 1.6.
Te recomendamos realizar una actualización del plano de control dual (también conocida como actualización canary) en la que las versiones nuevas y anteriores del plano de control se ejecuten 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. Ten en cuenta que istio-ingressgateway se actualiza in situ, por lo que debes prepararte para interrupciones en el clúster.La tarea de volver a implementar los componentes del plano de control de Anthos Service Mesh lleva entre 5 y 10 minutos en completarse. Además, debes incorporar proxies de sidecar nuevos 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 depende de muchos factores, como la cantidad de pods, la cantidad de nodos, la configuración de escalamiento de la implementación, los presupuestos de interrupción de pods y otros ajustes de configuración. Una estimación aproximada del tiempo que lleva actualizar los proxies de sidecar es de 100 pods por minuto.
Prepárate para la actualización
En esta sección, se describen los pasos que debes seguir a fin de prepararte para actualizar Anthos Service Mesh.
Revisa las funciones compatibles y esta guía para familiarizarte con las funciones y el proceso de actualización.
Si habilitaste las funciones opcionales cuando instalaste la versión anterior de Anthos Service Mesh, debes habilitar las mismas funciones cuando lleves a cabo la actualización. Para habilitar funciones opcionales, agrega marcas
--set values
o especifica la marca-f
con un archivo YAML cuando ejecutes el comandoistioctl install
.Si instalas Anthos Service Mesh en un clúster privado, debes abrir el puerto 15017 en el firewall para que el webhook se use con la incorporación automática de sidecar y funcione de manera correcta. Para obtener más información, consulta Abre un puerto en un clúster privado.
Si actualizas desde Anthos Service Mesh 1.5, sigue estos pasos en caso de que necesites realizar una reversión:
Crea un directorio llamado
asm-1-5
.Descarga el archivo de instalación de la versión 1.5 en el directorio
asm-1-5
.Extrae el contenido del archivo en el directorio
asm-1-5
.Asegúrate de estar en el directorio raíz de instalación de Anthos Service Mesh 1.5.
Descarga el paquete
kpt
de la versión 1.5 y configura elistio-operator.yaml
de la versión 1.5.
Configura tu entorno
Para las instalaciones en Google Kubernetes Engine, puedes seguir las guías de instalación mediante Cloud Shell, una interfaz de línea de comandos en el navegador para tus recursos de Google Cloud o tu propia computadora mediante la ejecución de Linux o macOS.
Opción A: Usa Cloud Shell
Cloud Shell aprovisiona una máquina virtual (VM) g1-small de Compute Engine que ejecuta un sistema operativo Linux basado en Debian. Las ventajas de usar Cloud Shell son las siguientes:
Cloud Shell incluye las herramientas de línea de comandos de
gcloud
,kubectl
yhelm
que necesitas.El directorio $HOME de Cloud Shell tiene 5 GB de espacio de almacenamiento persistente.
Puedes elegir entre los editores de texto:
El editor de código, al que puedes acceder desde en la parte superior de la ventana de Cloud Shell
Emacs, Vim o Nano, a los que puedes acceder desde la línea de comandos en Cloud Shell.
Para usar Cloud Shell, sigue estos pasos:
- Ve a la consola de Google Cloud.
- Selecciona tu proyecto de Google Cloud.
Haz clic en el botón Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Se abrirá una sesión de Cloud Shell en un marco nuevo en la parte inferior de la consola de Google Cloud, que mostrará una ventana de la línea de comandos.
Actualiza los componentes:
gcloud components update
El comando responderá con un resultado similar al siguiente:
ERROR: (gcloud.components.update) You cannot perform this action because the gcloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation: sudo apt-get update && sudo apt-get --only-upgrade install ...
Copia el comando largo y pégalo para actualizar los componentes.
Asegúrate de que Git esté en tu ruta para que
kpt
pueda encontrarlo.
Opción B: Usa las herramientas de línea de comandos de manera local
En tu máquina local, instala e inicializa la CLI de gcloud.
Si ya tienes instalada la CLI de gcloud, haz lo siguiente:
Autentica con la CLI de gcloud:
gcloud auth login
Actualiza los componentes:
gcloud components update
Instala
kubectl
:gcloud components install kubectl
Instala
kpt
:gcloud components install kpt
Asegúrate de que Git esté en tu ruta para que
kpt
pueda encontrarlo.
Configure variables de entorno
Obtén el ID del proyecto en el que se creó el clúster y el número del proyecto host de la flota.
gcloud
Ejecuta el siguiente comando:
gcloud projects list
Consola
Ve a la página Panel en la consola de Google Cloud.
Haz clic en la lista desplegable Seleccionar desde en la parte superior de la página. En la ventana Seleccionar una opción que aparece, elige tu proyecto.
El ID del proyecto se muestra en la tarjeta de Información del proyecto del panel del proyecto.
Crea una variable de entorno para el ID del proyecto en el que se creó el clúster:
export PROJECT_ID=YOUR_PROJECT_ID
Crea una variable de entorno para el número de proyecto del proyecto host de la flota.
export FLEET_PROJECT_NUMBER=YOUR_FLEET_PROJECT_NUMBER
Crea las siguientes variables de entorno:
Configura el nombre del clúster:
export CLUSTER_NAME=YOUR_CLUSTER_NAME
Establece
CLUSTER_LOCATION
en la zona o en la región del clúster:export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
Cambia el ID de la malla en el clúster (opcional)
Si la malla de servicios contiene o contendrá varios clústeres que se encuentran en proyectos diferentes, todos los clústeres deben tener el mismo ID de malla, que se basa en el número del proyecto host de la flota. El ID de malla configurado en tu clúster debe coincidir con el ID de malla que configuras para que use Anthos Service Mesh.
Si solo tienes un clúster, o si tu malla de servicios contiene o contendrá varios clústeres que se encuentran en el mismo proyecto, omite los siguientes pasos y continúa con Configura credenciales y permisos.
Para configurar la nueva etiqueta del ID de malla en el clúster, completa los siguientes pasos:
Crea una variable de entorno para el ID de malla:
export MESH_ID="proj-${FLEET_PROJECT_NUMBER}"
Si el clúster tiene etiquetas existentes que deseas conservar, debes incluirlas cuando agregues la etiqueta de
mesh_id
.Para ver si el clúster tiene etiquetas existentes, haz lo siguiente:
gcloud container clusters describe ${CLUSTER_NAME} \ --project ${PROJECT_ID}
Busca el campo
resourceLabels
en el resultado. Cada etiqueta se almacena en una línea separada en el camporesourceLabels
, por ejemplo:resourceLabels: csm: '' env: dev release: stable
No es necesario que conserves el
mesh_id
existente. Reemplázalo con la nueva etiqueta demesh_id
.Para mayor comodidad, puedes agregar las etiquetas a una variable de entorno. A continuación, reemplaza
YOUR_EXISTING_LABELS
por una lista separada por comas de las etiquetas existentes en el clúster con el formatoKEY=VALUE
, por ejemploenv=dev,release=stable
:export EXISTING_LABELS="YOUR_EXISTING_LABELS"
Establece la etiqueta
mesh_id
:Si el clúster tiene etiquetas existentes que deseas conservar, actualiza el clúster con el
mesh_id
y las etiquetas existentes:gcloud container clusters update ${CLUSTER_NAME} \ --project ${PROJECT_ID} --update-labels=mesh_id=${MESH_ID},${EXISTING_LABELS}
Si tu clúster no tiene etiquetas existentes, actualiza el clúster solo con la nueva etiqueta de
mesh_id
:gcloud container clusters update ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --update-labels=mesh_id=${MESH_ID}
Configura credenciales y permisos
Obtén credenciales de autenticación para interactuar con el clúster:
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${PROJECT_ID}
Otorga permisos de administrador de clúster al usuario actual. Estos permisos son obligatorios a fin de crear las reglas de control de acceso basado en funciones (RBAC) necesarias para Anthos Service Mesh:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
Si ves el error "cluster-admin-binding" already exists
, puedes ignorarlo sin problemas y continuar con la vinculación del administrador del clúster existente.
Descarga el archivo de instalación
-
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
-
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
. -
Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.6.14-asm.2
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
-
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
-
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
. -
Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.6.14-asm.2-osx.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.6.14-asm.2
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
-
Descarga el archivo de instalación de Anthos Service Mesh en el directorio de trabajo actual:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
-
Descarga el archivo de firma y usa
openssl
para verificar la firma:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
El resultado esperado es:
Verified OK
. -
Extrae el contenido del archivo a cualquier ubicación en tu sistema de archivos. Por ejemplo, para extraer el contenido en el directorio de trabajo actual, ingresa este comando:
tar xzf istio-1.6.14-asm.2-win.zip
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.6.14-asm.2
que contiene lo siguiente:- Hay aplicaciones de muestra en el directorio
samples
. - La herramienta de línea de comandos de
istioctl
que usas para instalar Anthos Service Mesh se encuentra en el directoriobin
. - Los perfiles de configuración de Anthos Service Mesh se encuentran en el directorio
manifests/profiles
.
- Hay aplicaciones de muestra en el directorio
-
Asegúrate de estar en el directorio raíz de la instalación de Anthos Service Mesh.
cd istio-1.6.14-asm.2
-
Para mayor comodidad, agrega las herramientas que contiene el directorio
/bin
a tu ruta de acceso (PATH).export PATH=$PWD/bin:$PATH
Linux
macOS
Windows
Prepara los archivos de configuración de recursos
Cuando ejecutes el comando istioctl install
, debes especificar -f istio-operator.yaml
en la línea de comandos. En este archivo, encontrarás la información que requiere Anthos Service Mesh sobre el proyecto y el clúster. Debes descargar un paquete que contenga istio-operator.yaml
y otros archivos de configuración de recursos a fin de establecer la información del proyecto y del clúster.
Para comenzar, elige el paquete que descargarás según la autoridad certificada (CA) que deseas usar:
asm
: thumb_up_alt Este paquete habilita la CA de Mesh, que recomendamos para instalaciones nuevas.asm-citadel
: De manera opcional, puedes habilitar Citadel como la CA. Antes de elegir este paquete, consulta Elige una autoridad certificada para obtener más información.
Para preparar los archivos de configuración de recursos, sigue estos pasos:
Crea un directorio nuevo para los archivos de configuración de recursos del paquete de Anthos Service Mesh. Recomendamos que uses el nombre del clúster como el nombre del directorio.
Cambia al directorio en el que deseas descargar el paquete de Anthos Service Mesh.
Descarga el paquete que deseas usar en función de la CA.
CA de Mesh
Descarga el paquete
asm
, que habilita la CA de Mesh:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.6-asm asm
Citadel
Descarga el paquete
asm-citadel
, que habilita Citadel como la CA:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm-citadel@release-1.6-asm asm
Configura el ID del proyecto en el que se creó el clúster:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Configura el número de proyecto para el proyecto host de la flota:
kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
Configura el nombre del clúster:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Establece la zona o región predeterminada:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Establece el perfil de configuración que planeas usar:
Si todos los clústeres están en el mismo proyecto, configura el perfil
asm-gcp
:kpt cfg set asm anthos.servicemesh.profile asm-gcp
Si tu malla de servicios contiene o contendrá varios clústeres que se encuentran en proyectos diferentes, configura el perfil
asm-gcp-multiproject
(beta):kpt cfg set asm anthos.servicemesh.profile asm-gcp-multiproject
Si configuras el perfil
asm-gcp-multiproject
y descargaste el paqueteasm
, que habilita la CA de Mesh, debes configurar los alias de dominio de confianza para los otros proyectos que formarán el malla de servicios de varios proyectos y varios clústeres. De lo contrario, omite este paso.Obtén el ID del proyecto de todos los clústeres que se incluirán en la malla de varios clústeres o varios proyectos.
Para el ID del proyecto de cada clúster, configura los alias del dominio de confianza. Por ejemplo, si tienes clústeres en 3 proyectos, ejecuta el siguiente comando y reemplaza
PROJECT_ID_1
,PROJECT_ID_2
yPROJECT_ID_3
por el ID del proyecto de cada clúster.kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog
Puedes usar el mismo comando para configurar los clústeres en los otros proyectos.
Los alias del dominio de confianza permiten que la CA de Mesh autentique las cargas de trabajo en los clústeres en otros proyectos. Además de configurar los alias del dominio de confianza, después de instalar Anthos Service Mesh, debes habilitar el balanceo de cargas entre clústeres.
Muestra los valores de los métodos set de
kpt
:kpt cfg list-setters asm
En el resultado del comando, verifica que los valores de los siguientes métodos set sean correctos:
- gcloud.compute.location
- gcloud.container.cluster
- gcloud.core.project
- gcloud.project.environProjectNumber
Actualiza Anthos Service Mesh
Para instalar una versión nueva de Anthos Service Mesh, te recomendamos que sigas el proceso de actualización del plano de control doble (denominado actualizaciones canary en la documentación de Istio). Con la actualización del plano de control doble, instalas una versión nueva del plano de control junto con el plano de control existente. Cuando instales la versión nueva, incluye una etiqueta revision
que identifique la versión del plano de control nuevo. Cada revisión es una implementación completa del plano de control de Anthos Service Mesh con sus propios objetos Deployment y Service.
Luego, debes migrar a la versión nueva mediante la configuración de la misma etiqueta revision
en tus cargas de trabajo para apuntar al nuevo plano de control y realizar un reinicio progresivo a fin de volver a insertar los proxies con la nueva versión de Anthos Service Mesh. Con este enfoque, puedes supervisar el efecto de la actualización en un porcentaje pequeño de tus cargas de trabajo. Después de probar la aplicación, puedes migrar todo el tráfico a la versión nueva. Este enfoque es mucho más seguro que realizar una actualización in situ en la que un plano de control nuevo reemplaza a la versión anterior.
Actualiza el plano de control
Ejecuta el siguiente comando para implementar el nuevo plano de control mediante el perfil de configuración que estableciste en el archivo istio-operator.yaml
. Si deseas habilitar una función opcional compatible, incluye -f
y el nombre de archivo YAML en la siguiente línea de comandos. Consulta Habilita funciones opcionales para obtener más información.
istioctl install \ -f asm/cluster/istio-operator.yaml \ --set revision=asm-1614-2
El argumento --set revision
agrega una etiqueta istio.io/rev
a istiod. Después de ejecutar el comando, tienes dos objetos Deployment y Service del plano de control que se ejecutan en paralelo:
kubectl get pods -n istio-system
Salida de ejemplo:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-1614-2-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m
Vuelve a implementar cargas de trabajo
Cuando se instala la revisión nueva, los proxies de sidecar existentes no se ven afectados. Para actualizarlos, debes configurarlos a fin de que apunten al nuevo plano de control. Esto se controla durante la incorporación de sidecar en función de la etiqueta del espacio de nombres istio.io/rev
.
Actualiza las cargas de trabajo para insertarlas en la versión nueva de Anthos Service Mesh:
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite
Se debe quitar la etiqueta
istio-injection
porque tiene prioridad sobre la etiquetaistio.io/rev
.Reinicia los Pods para activar la reinserción:
kubectl rollout restart deployment -n NAMESPACE
Verifica que los Pods estén configurados para apuntar al plano de control
istiod-asm-1614-2
:kubectl get pods -n NAMESPACE -l istio.io/rev=asm-1614-2
Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos anteriores para cada espacio de nombres.
Si tu aplicación funciona como esperabas, ve directamente a Completa la actualización. De lo contrario, realiza los siguientes pasos para revertir a la versión anterior.
Actualiza las cargas de trabajo que se insertarán con la versión anterior del plano de control:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Reinicia los pods para activar la reinserción a fin de que los proxies tengan la versión anterior:
kubectl rollout restart deployment -n NAMESPACE
Revierte los componentes del plano de control:
Revertir a la versión 1.6 anterior
Vuelve a implementar la versión anterior de
istio-ingressgateway
:kubectl -n istio-system rollout undo deploy istio-ingressgateway
Quita el nuevo plano de control:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-1614-2 -n istio-system --ignore-not-found=true
Revertir a 1.5
Cambia al directorio en el que descargaste el archivo de instalación de la versión 1.5 de Anthos Service Mesh.
Vuelve a instalar la versión anterior de Anthos Service Mesh. En el siguiente comando, si habilitaste características opcionales, asegúrate de incluir las marcas
--set values
o la marca-f
aplicable con el nombre del archivo YAML.bin/istioctl install \ -f asm/cluster/istio-operator.yaml
Completa la actualización
Si la aplicación funciona como esperabas, realiza los siguientes pasos para completar la actualización:
Quita el plano de control anterior:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Ejecuta el siguiente comando para implementar el controlador del servicio canónico:
kubectl apply -f asm/canonical-service/controller.yaml
Mediante el comando, se implementa el controlador del servicio canónico en tu clúster. El controlador del servicio canónico agrupa las cargas de trabajo que pertenecen al mismo servicio lógico y es necesario para desbloquear funciones adicionales en el panel de servicios de la consola de Google Cloud. Para obtener más información, consulta Habilita o inhabilita el controlador del servicio canónico.