Upgrade with Helm

Follow this guide to upgrade and configure an Istio mesh using Helm. This guide assumes you have already performed an installation with Helm for a previous minor or patch version of Istio.

Los charts de Helm utilizados en esta guía son los mismos que se utilizan al instalar Istio a través de Istioctl, con la excepción del chart gateway.

Istioctl utiliza un chart de gateway diferente al chart de gateway descrito en esta guía.

Prerrequisitos

  1. Realiza cualquier configuración específica de la plataforma necesaria.

  2. Comprueba los Requisitos para Pods y Servicios.

  3. Instala el último cliente de Helm. Las versiones de Helm lanzadas antes de la versión de Istio más antigua actualmente compatible no están probadas, no son compatibles ni se recomiendan.

  4. Configura el repositorio de Helm:

$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update

Upgrade steps

Before upgrading Istio, it is recommended to run the istioctl x precheck command to make sure the upgrade is compatible with your environment.

$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
  To get started, check out <https://istio.io/latest/docs/setup/getting-started/>

You can install a canary version of Istio control plane to validate that the new version is compatible with your existing configuration and data plane using the steps below:

  1. Upgrade the Istio base chart to ensure all cluster-wide resources are up-to-date

    $ helm upgrade istio-base istio/base -n istio-system
  2. Install a canary version of the Istio discovery chart by setting the revision value:

    $ helm install istiod-canary istio/istiod \
        --set revision=canary \
        -n istio-system
  3. Verify that you have two versions of istiod installed in your cluster:

    $ kubectl get pods -l app=istiod -L istio.io/rev -n istio-system
      NAME                            READY   STATUS    RESTARTS   AGE   REV
      istiod-5649c48ddc-dlkh8         1/1     Running   0          71m   default
      istiod-canary-9cc9fd96f-jpc7n   1/1     Running   0          34m   canary
  4. If you are using Istio gateways, install a canary revision of the Gateway chart by setting the revision value:

    $ helm install istio-ingress-canary istio/gateway \
        --set revision=canary \
        -n istio-ingress
  5. Verify that you have two versions of istio-ingress gateway installed in your cluster:

    $ kubectl get pods -L istio.io/rev -n istio-ingress
      NAME                                    READY   STATUS    RESTARTS   AGE     REV
      istio-ingress-754f55f7f6-6zg8n          1/1     Running   0          5m22s   default
      istio-ingress-canary-5d649bd644-4m8lp   1/1     Running   0          3m24s   canary

    See Upgrading Gateways for in-depth documentation on gateway canary upgrade.

  6. Follow the steps here to test or migrate existing workloads to use the canary control plane.

  7. Once you have verified and migrated your workloads to use the canary control plane, you can uninstall your old control plane:

    $ helm delete istiod -n istio-system
  8. Upgrade the Istio base chart again, this time making the new canary revision the cluster-wide default.

    $ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system

Stable revision labels

Reetiquetar manualmente los namespaces al moverlos a una nueva revisión puede ser tedioso y propenso a errores. Las etiquetas de revisión resuelven este problema. Las etiquetas de revisión son identificadores estables que apuntan a revisiones y se pueden usar para evitar reetiquetar namespaces. En lugar de reetiquetar el namespace, un operador de malla puede simplemente cambiar la etiqueta para que apunte a una nueva revisión. Todos los namespaces etiquetados con esa etiqueta se actualizarán al mismo tiempo.

Usage

Considera un cluster con dos revisiones instaladas, 1-25-1 y 1-26-3. El operador del cluster crea una etiqueta de revisión prod-stable, apuntando a la versión más antigua y estable 1-25-1, y una etiqueta de revisión prod-canary apuntando a la revisión más nueva 1-26-3. Ese estado podría alcanzarse a través de los siguientes comandos:
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-25-1 -n istio-system | kubectl apply -f -
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-canary}" --set revision=1-26-3 -n istio-system | kubectl apply -f -

La asignación resultante entre revisiones, etiquetas y namespaces es como se muestra a continuación:

Dos namespaces apuntados a prod-stable y uno apuntado a prod-canary
Dos namespaces apuntados a prod-stable y uno apuntado a prod-canary

El operador del cluster puede ver esta asignación además de los namespaces etiquetados a través del comando istioctl tag list:

$ istioctl tag list
TAG         REVISION NAMESPACES
default     1-25-1   ...
prod-canary 1-26-3   ...
prod-stable 1-25-1   ...

Después de que el operador del cluster esté satisfecho con la estabilidad del control plane etiquetado con prod-canary, los namespaces etiquetados istio.io/rev=prod-stable se pueden actualizar con una acción modificando la etiqueta de revisión prod-stable para que apunte a la revisión 1-26-3 más nueva.

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-26-3 -n istio-system | kubectl apply -f -

Ahora, la asignación actualizada entre revisiones, etiquetas y namespaces es como se muestra a continuación:

Las etiquetas de los namespaces no han cambiado, pero ahora todos los namespaces apuntan a {{< istio_full_version_revision >}}
Las etiquetas de los namespaces no han cambiado, pero ahora todos los namespaces apuntan a {{< istio_full_version_revision >}}

Reiniciar los workloads inyectadas en los namespaces marcados como prod-stable ahora dará como resultado que esas workloads usen el control plane 1-26-3. Observa que no se requirió ningún reetiquetado de namespace para migrar los workloads a la nueva revisión.

Default tag

La revisión a la que apunta la etiqueta default se considera la revisión predeterminada y tiene un significado semántico adicional. La revisión predeterminada realiza las siguientes funciones:

  • Inyecta sidecars para el selector de namespace istio-injection=enabled, el selector de objetos sidecar.istio.io/inject=true y los selectores istio.io/rev=default
  • Valida los recursos de Istio
  • Roba el bloqueo de líder de las revisiones no predeterminadas y realiza responsabilidades de malla singleton (como actualizar los estados de los recursos)

Para hacer que una revisión 1-26-3 sea la predeterminada, ejecuta:

$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{default}" --set revision=1-26-3 -n istio-system | kubectl apply -f -
Cuando se utiliza la etiqueta default junto con una instalación de Istio existente sin revisión, se recomienda eliminar la MutatingWebhookConfiguration antigua (normalmente llamada istio-sidecar-injector) para evitar que tanto el control plane antiguo como el más nuevo intenten la inyección.

In place upgrade

You can perform an in place upgrade of Istio in your cluster using the Helm upgrade workflow.

  1. Upgrade the Istio base chart:

    $ helm upgrade istio-base istio/base -n istio-system
  2. Upgrade the Istio discovery chart:

    $ helm upgrade istiod istio/istiod -n istio-system
  3. (Optional) Upgrade any gateway charts installed in your cluster:

    $ helm upgrade istio-ingress istio/gateway -n istio-ingress

Uninstall

Please refer to the uninstall section in our Helm install guide.

¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!