En esta guía, se explica cómo actualizar Anthos Service Mesh de la versión 1.7.3+ or a 1.8 patch release a la versión 1.8.6 en GKE on VMware. No se admiten las actualizaciones a versiones anteriores. Si tienes una versión anterior y necesitas realizar una actualización, consulta Actualiza desde versiones anteriores.
Para realizar la actualización, te recomendamos que realices una actualización basada en revisiones (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 queistio-ingressgateway
se actualiza, por lo que debes planificar una interrupción 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
Si personalizaste la instalación anterior, necesitas usar las mismas personalizaciones cuando actualices a Anthos Service Mesh. Si personalizaste la instalación agregando la marca --set values
a istioctl install
, te recomendamos que agregues esa configuración a un archivo YAML IstioOperator
(aunque puedes seguir usando la marca --set_values
). Para personalizar la instalación, especifica la marca -f
con un archivo YAML cuando ejecutes el comando istioctl install
.
Configura tu entorno
Necesitas tener las siguientes herramientas en la máquina en la que deseas instalar Anthos Service Mesh. Ten en cuenta que solo puedes instalar Anthos Service Mesh en un clúster de usuario, no en uno de administrador.
- La herramienta de línea de comandos de
curl
- Google Cloud CLI.
Después de instalar Google Cloud CLI:
Autentica con Google Cloud CLI
gcloud auth login
Actualiza los componentes:
gcloud components update
Instala
kubectl
:gcloud components install kubectl
Instala la versión requerida de
kpt
:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Cambia el contexto del clúster de usuario:
kubectl config use-context CLUSTER_NAME
Otorga permisos de administrador de clúster a tu cuenta de usuario (tu dirección de correo electrónico de acceso de Google Cloud). 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=USER_ACCOUNT
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.8.6-asm.8-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.8.6-asm.8-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-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.8.6-asm.8-linux-amd64.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.8.6-asm.8
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.8.6-asm.8
-
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.8.6-asm.8-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.8.6-asm.8-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-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.8.6-asm.8-osx.tar.gz
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.8.6-asm.8
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.8.6-asm.8
-
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.8.6-asm.8-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.8.6-asm.8-win.zip.1.sig openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-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.8.6-asm.8-win.zip
El comando crea un directorio de instalación en tu directorio de trabajo actual llamado
istio-1.8.6-asm.8
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.8.6-asm.8
Linux
macOS
Windows
Prepara los archivos de configuración de recursos
Cuando ejecutas el comando istioctl install
, debes incluir el archivo revisioned-custom-ingressgateway.yaml
en la línea de comandos. Este archivo te permite controlar el momento en que cambias a la versión nueva del istio-ingressgateway
después de la actualización. Sigue los pasos que se indican a continuación para descargar y configurar este archivo:
Cambia al directorio en el que deseas descargar el paquete
anthos-service-mesh
.Descarga el paquete :
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.8-asm asm
Configura la etiqueta de la versión de Anthos Service Mesh que instalarás:
kpt cfg set asm anthos.servicemesh.tag 1.8.6-asm.8
Configura el webhook de validación para usar una etiqueta de revisión:
kpt cfg set asm anthos.servicemesh.rev asm-186-8
Cuando instales Anthos Service Mesh, configura una etiqueta de revisión en
istiod
. Debes configurar la misma revisión en el webhook de validación.
Actualiza Anthos Service Mesh
Para instalar una versión nueva de Anthos Service Mesh, te recomendamos que sigas el proceso de actualización basado en revisiones (también conocido como “actualización canary”). Con una actualización basada en una revisión, 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
Si es necesario, cambia al directorio
istio-1.8.6-asm.8
. El clienteistioctl
depende de la versión. Asegúrate de usar la versión en el directorioistio-1.8.6-asm.8/bin
.Ejecuta el siguiente comando para implementar el nuevo plano de control. 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.bin/istioctl install \ --set profile=asm-multicloud \ -f asm/istio/options/revisioned-istio-ingressgateway.yaml \ --set revision=asm-186-8
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
Implementa y vuelve a implementar las cargas de trabajo
Obtén la etiqueta de revisión que se encuentra en
istiod
y laistio-ingressgateway
.kubectl get pod -n istio-system -L istio.io/rev
El resultado del comando es similar al siguiente:
NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-186-8 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-186-8 istiod-asm-176-1-67998f4b55-lrzpz 1/1 Running 0 68m asm-178-10 istiod-asm-176-1-67998f4b55-r76kr 1/1 Running 0 68m asm-178-10 istiod-asm-182-2-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-186-8 istiod-asm-182-2-5cd96f88f6-wm68b 1/1 Running 0 27s asm-186-8
Ten en cuenta si tienes las versiones anteriores y las nuevas de la
istio-ingressgateway
.Si incluiste la opción
revisioned-istio-ingressgateway
cuando actualizaste, se realizó una actualización canary deistio-ingressgateway
. En este caso, el resultado muestra las versiones anteriores y nuevas de laistio-ingressgateway
.Si no incluiste
revisioned-istio-ingressgateway
cuando actualizaste, se realizó una actualización in situ de laistio-ingressgateway
. En este caso, tu resultado solo muestra la versión nueva.
En el resultado, en la columna
REV
, anota el valor de la etiqueta de revisión de la versión nueva. En este ejemplo, el valor esasm-186-8
.Observa también el valor en la etiqueta de revisión de la versión
istiod
anterior. Necesitarás esto para borrar la versión anterior deistiod
cuando termines de migrar las cargas de trabajo a la versión nueva. En el resultado de ejemplo, el valor de la etiqueta de revisión para la versión anterior esasm-178-10
.
Si tienes las versiones anteriores y nuevas de la
istio-ingressgateway
, cambia laistio-ingressgateway
a la revisión nueva. En el siguiente comando, cambiaREVISION
por el valor que coincide con la etiqueta de revisión de la versión nueva.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'
Resultado esperado:
service/istio-ingressgateway patched
Agrega la etiqueta de revisión a un espacio de nombres y quita la etiqueta
istio-injection
(si existe). En el siguiente comando, cambiaREVISION
por el valor que coincide con la nueva revisión deistiod
.kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
Si ves
"istio-injection not found"
en el resultado, puedes ignorarlo. Esto significa que el espacio de nombres no tenía la etiquetaistio-injection
antes. Debido a que la inserción automática falla si un espacio de nombres tiene tanto laistio-injection
como la etiqueta de revisión, todos los comandoskubectl label
de la documentación de Anthos Service Mesh incluyen la acción de quitar la etiquetaistio-injection
.Reinicia los Pods para activar la reinserción:
kubectl rollout restart deployment -n NAMESPACE
Verifica que tus pods estén configurados para apuntar a la nueva versión de
istiod
.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
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 para etiquetar el espacio de nombres y reiniciar los pods.
Si estás seguro de que tu aplicación funciona como se esperaba, continúa con los pasos para completar la transición a la versión nueva de
istiod
. Si hay un problema con tu aplicación, sigue los pasos para revertirla.Vuelve a ejecutar el siguiente comando para confirmar si tienes la versión nueva y la anterior de la
istio-ingressgateway
, o solo la nueva. Esto determina cómo controlas la transición a la versión nueva de laistio-ingressgateway
o la reversión a la versión anterior.kubectl get pod -n istio-system -L istio.io/rev
Completa la transición
Si estás seguro de que tu aplicación funciona como se esperaba, quita el plano de control anterior para completar la transición a la nueva versión.
Cambia al directorio en el que se encuentran los archivos del repositorio de GitHub
anthos-service-mesh
.Configura el webhook de validación para usar el plano de control nuevo.
kubectl apply -f asm/istio/istiod-service.yaml
Si tienes las versiones anteriores y nuevas de la
istio-ingressgateway
, borra la implementación anterior deistio-ingressgateway
. El comando que debes ejecutar depende de si migras desde Istio o actualizas desde una versión anterior de Anthos Service Mesh:Migra
Si migraste desde Istio, la
istio-ingressgateway
anterior no tiene una etiqueta de revisión.kubectl delete deploy/istio-ingressgateway -n istio-system
Actualizar
Si actualizaste desde una versión anterior de Anthos Service Mesh, en el siguiente comando, reemplaza
OLD_REVISION
por la etiqueta de revisión para la versión anterior deistio-ingressgateway
.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
Borra la versión anterior de
istiod
. El comando que debes usar depende de si migras desde Istio o actualizas desde una versión anterior de Anthos Service Mesh.Migra
Si migraste desde Istio, la
istiod
anterior no tiene una etiqueta de revisión.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Actualizar
Si actualizaste desde una versión anterior de Anthos Service Mesh, en el siguiente comando, asegúrate de que
OLD_REVISION
coincida con la etiqueta de revisión de la versión anterior deistiod
.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
Quita la versión anterior de la configuración
IstioOperator
.kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
El resultado esperado es similar al siguiente:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
Revertir
Si encontraste un problema cuando probaste tu aplicación con la versión nueva de
istiod
, sigue estos pasos para realizar una reversión a la versión anterior:Vuelve a la versión anterior de la
istio-ingressgateway
. El comando que uses dependerá de si tienes las versiones anteriores y nuevas de laistio-ingressgateway
o solo la nueva.Si tienes las versiones anteriores y nuevas de la
istio-ingressgateway
, ejecuta el comandokubectl patch service
y reemplazaOLD_REVISION
por la revisión anterior.kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
Si solo tienes la versión nueva de la
istio-ingressgateway
, ejecuta el comandokubectl rollout undo
.kubectl -n istio-system rollout undo deploy istio-ingressgateway
Vuelve a etiquetar tu espacio de nombres para habilitar la inserción automática con la versión anterior de
istiod
. El comando que uses depende de si usaste una etiqueta de revisión oistio-injection=enabled
con la versión anterior.Si usaste una etiqueta de revisión para la inserción automática, haz lo siguiente:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
Si usaste
istio-injection=enabled
:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Resultado esperado:
namespace/NAMESPACE labeled
Confirma que la etiqueta de revisión en el espacio de nombres coincida con la etiqueta de revisión en la versión anterior de
istiod
:kubectl get ns NAMESPACE --show-labels
Reinicia los Pods para activar la reinserción a fin de que los proxies tengan la versión previa:
kubectl rollout restart deployment -n NAMESPACE
Si tienes la versión anterior y la nueva de la
istio-ingressgateway
, quita la implementación nueva deistio-ingressgateway
. Asegúrate de que el valor deREVISION
en el siguiente comando sea correcto.kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
Quita la versión nueva de
istiod
. Asegúrate de que el valor deREVISION
en el siguiente comando sea correcto.kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
Quita la versión nueva de la configuración
IstioOperator
.kubectl delete IstioOperator installed-state-REVISION -n istio-system
El resultado esperado es similar al siguiente:
istiooperator.install.istio.io "installed-state-REVISION" deleted
Si no incluiste la marca
--disable_canonical_service
, la secuencia de comandos habilitó el controlador del servicio canónico. Recomendamos que lo habilites, pero si necesitas inhabilitarlo, consulta Habilita o inhabilita el controlador de servicio canónico.