Upgrading a Kubernetes Deployment of FME Server

With little downtime, you can upgrade a Kubernetes deployment of FME Server to a later version using the following procedure:

  • Launch a new FME Server of the desired build version in a new namespace.
  • Backup the current FME Server and restore it to the new FME Server.
  • Update the ingress hostname from the old FME Server to the new FME Server.
  • Remove the old FME Server.

WARNING: You may have Schedules, Automations workflows, or Notifications that would conflict with themselves during the time that both the new and old FME Servers are running. Disable these tools before proceeding with a backup.

Note: See also Upgrading to a Patch Build in Kubernetes.

Performing the Upgrade

  1. Create a new namespace for the new version of FME Server:
  2. kubectl create namespace <namespace-new-version>

    For example:

    kubectl create namespace fmeserver-20159

  3. If your FME Server uses an external PostgreSQL database for the FME Server Database, copy the admin password secret, using the namespace of the current version of FME Server, to the new version. (If your FME Server uses the PostgreSQL container that is deployed with the Helm chart, skip this step.)
  4. kubectl get secret postgresql-admin-password --namespace <namespace-old-version> --export -o yaml | kubectl apply --namespace=<namespace-new-version> -f -

    For example:

    kubectl get secret postgresql-admin-password --namespace fmeserver-20122 --export -o yaml | kubectl apply --namespace=fmeserver-20159 -f -

  5. Make a copy the values .yaml file for the current FME Server and update the following values:
    • deployment.hostname: Set to a temporary hostname. (You will reset it later in this procedure.)
    • fmeserver.image.tag: Set to the container image tag you want to deploy for the upgraded FME Server.
    • If your FME Server uses an external PostgreSQL database for the FME Server Database, set the following values to be different from the ones in use for the current FME Server:
      • fmeserver.database.name
      • fmeserver.database.username
  6. Update your Helm repository:
  7. helm repo update

  8. Deploy FME Server in the new namespace using Helm and the updated values .yaml file.

    helm install --namespace <namespace-new-version> -n <helm-deployment-name> safesoftware/fmeserver-<FME-Server-version> -f <new-values-filename>

    For example:

  9. helm install --namespace fmeserver-20159 -n fmeserver-20159 safesoftware/fmeserver-2020.0.0-beta -f values-20159.yaml

  10. From the FME Server Web User Interface, perform the following:
    1. License FME Server.
    2. Backup the old FME Server.
    3. Restore the backup to the new FME Server.
  11. Change the DNS of the old FME Server to a different, temporary URL. Doing so will allow you to update the DNS of the new FME Server to your production URL.
    1. In the old values .yaml file, change the value of deployment.hostname.
    2. Upgrade the Helm chart of the previous deployment.
    3. helm upgrade --namespace <namespace-old-version> <helm-deployment-name> safesoftware/fmeserver-<FME-Server-version> -f <old-values-filename>

      For example:

      helm upgrade --namespace fmeserver-20122 fmeserver-20122 safesoftware/fmeserver-2020.0.0-beta -f values-20122.yaml

  12. Update the DNS of the new FME Server to your production URL.
    1. In the new values .yaml file, change the value of deployment.hostname.
    2. Upgrade the Helm chart of the new deployment.
    3. helm upgrade --namespace <namespace-new-version> <helm-deployment-name> safesoftware/fmeserver-<FME-Server-version> -f <new-values-filename>

      For example:

      helm upgrade --namespace fmeserver-20159 fmeserver-20159 safesoftware/fmeserver-2020.0.0-beta -f values-20159.yaml

  13. Verify that the upgraded FME Server works as expected. If you find issues, you can switch back thedeployment.hostname values in the old and new values .yaml files so that your production URL points back to the old FME Server.
  14. Remove the old version of FME Server.
    • Helm v2: helm del --purge <helm-deployment-name>
    • Helm v3: helm uninstall <helm-deployment-name> -n <namespace_name>

    For example:

    • Helm v2: helm del --purge fmeserver-20122
    • Helm v3: helm uninstall fmeserver-20122 -n fmeserver-20122
  15. If your FME Server uses an external PostgreSQL database for the FME Server Database, drop the database for the old FME Server.