3.7.x to latest 3.x

This guide covers migrating from Emissary 3.7.Z to Emissary $version$. If this is not your exact situation, see the migration matrix. This guide is written for upgrading an installation originally made using Helm. If you did not install with Helm, see the YAML-based upgrade instructions.

Since Emissary’s configuration is entirely stored in Kubernetes resources, upgrading between minor versions is straightforward.

Resources to check before migrating to $version$.

Migration Steps

Migration is a two-step process:

  1. Install new CRDs.

    After reviewing the changes in 3.x and confirming that you are ready to upgrade, the process is the same as upgrading minor versions in the previous version of Emissary and does not require the complex migration steps that the migration from 1.x to 2.x required.

    Before installing Emissary $version$ itself, you need to update the CRDs in your cluster. This is mandatory during any upgrade of Emissary.

    kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-crds.yaml
    kubectl wait --timeout=90s --for=condition=available deployment emissary-apiext -n emissary-system
    
    Emissary $version$ includes a Deployment in the `emissary-system` namespace called emissary-apiext. This is the APIserver extension that supports converting Emissary CRDs between getambassador.io/v2 and getambassador.io/v3alpha1. This Deployment needs to be running at all times. If the emissary-apiext Deployment's Pods all stop running, you will not be able to use getambassador.io/v3alpha1 CRDs until restarting the emissary-apiext Deployment. There is a known issue with the emissary-apiext service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system to delete the existing certificate, and then restart the emissary-apiext deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system. This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
  2. Install Emissary $version$.

    After installing the new CRDs, use Helm to install Emissary $version$. Start by making sure that your datawire Helm repo is set correctly:

    helm repo remove datawire
    helm repo add datawire https://app.getambassador.io
    helm repo update
    

    Then, update your Emissary installation in the $productNamespace$ namespace. If necessary for your installation (e.g. if you were running with AMBASSADOR_SINGLE_NAMESPACE set), you can choose a different namespace.

    helm upgrade -n $productNamespace$ \
         $productHelmName$ datawire/$productHelmName$ && \
    kubectl rollout status  -n $productNamespace$ deployment/emissary-ingress -w
    
    You must use the $productHelmName$ Helm chart for Emissary 3.Y.