This topic provides steps to upgrade the Tanzu Postgres Operator and Tanzu Postgres instances to a newer version. Upgrading the Postgres Operator also upgrades the existing Postgres instances.

Warning: The Postgres Operator 1.3.0 release upgrades the Postgres instances to Postgres 11.13. The Postgres instances will restart as a result of the upgrade operation.

The topic covers two upgrade scenarios:

Upgrading the Operator using the Tanzu Registry

Ensure you have access to Tanzu Network and Tanzu Network Registry. You can use the same credentials for both sites.

Note: The following Helm commands only work with Helm 3.6 and earlier. Helm 3.7 introduces major changes to the experimental OCI feature.

  1. Set the environment variable to enable Open Container Initiative (OCI) support in the Helm v3 client by running:

    $ export HELM_EXPERIMENTAL_OCI=1
    

    If you skip this step, the following error message might appear:

    Error: this feature has been marked as experimental and is not enabled by default.
    
  2. Use Helm to log in to the Tanzu Network Registry by running:

    $ helm registry login registry.pivotal.io \
           --username=<USERNAME> \
           --password=<PASSWORD>
    

    Follow the prompts to enter the email address and password for your Tanzu Network account.

  3. Pull the Helm chart and images from the Tanzu registry into the local docker container registry:

    $ helm chart pull registry.pivotal.io/tanzu-sql-postgres/postgres-operator-chart:v1.3.0
    
  4. Export the artifacts into a local /tmp/ directory:

    $ helm chart export registry.pivotal.io/tanzu-sql-postgres/postgres-operator-chart:v1.3.0  --destination=/tmp/
    
  5. Update the existing Postgres instance Custom Resource Definition (CRD) with the new values:

    $ cd /tmp/postgres-operator/
    
    $ kubectl apply -f crds/
    
  6. If you do not have an existing overrides yaml file, perform the Helm upgrade using:

    $ helm upgrade postgres-operator /tmp/postgres-operator/ --wait
    

    The output is similar to:

    Release "postgres-operator" has been upgraded. Happy Helming!
    NAME: postgres-operator 
    LAST DEPLOYED: Thu Dec 10 15:31:43 2020
    NAMESPACE: default
    STATUS: deployed
    REVISION: 4
    TEST SUITE: None
    

    where the REVISION number counts how many upgrades to the Operator you have performed. If you have upgraded from 1.0 to 1.1, and from 1.1 to 1.2, the REVISION number would be 3.

    If you have an existing overrides file, you must make updates to the structure of the overrides file.

    Previously, operatorImageRepository and operatorImageTag were separate keys used to describe the operator image. Similarly, postgresImageRepository and postgresImageTag were separate keys used to describe the postgres image. Now the values are combined into new keys named operatorImage and postgresImage respectively.

    For example, if the overrides file contained:

    ---
    operatorImageRepository: my-custom-registry/postgres-operator
    operatorImageTag: v1.3.0
    
    postgresImageRepository: my-custom-registry/postgres-instance
    postgresImageTag: v1.3.0
    

    then the new overrides file would look like:

    ---
    operatorImage: my-custom-registry/postgres-operator:v1.3.0
    
    postgresImage: my-custom-registry/postgres-instance:v1.3.0
    

    Then, upgrade using:

    $ helm upgrade postgres-operator /tmp/postgres-operator/ -f /<path-to-your-file>/operator_overrides_values.yaml --wait
    

    where you substitute operator_overrides_values.yaml with your custom name and file location.

  7. Wait for the Operator, Monitor, and Postgres instances to restart. Verify the new Postgres Operator version. The Postgres Operator is updated across all namespaces, including the default.

    $ helm ls
    
    NAME             	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART                     APP VERSION
    postgres-operator	default  	4       	2021-10-07 13:28:05.704226 -0500 CDT	deployed	postgres-operator-v1.3.0  v1.3.0
    

    To verify the new Postgres instance version, use a command similar to:

    $ kubectl exec -i pod/postgres-sample-0 -- bash -c "psql -c 'select version()'"
    

Upgrading the Operator using the Tanzu Network download

  1. Download the latest VMware Tanzu Postgres version from VMware Tanzu Network. Load the new Postgres Operator and Postgres instances images into your container registry following the steps in Load <%= product_name_long %> Images to Docker Registry.

  2. Create an operator-overrides.yaml file at a location of your choice or update an existing overrides file. Enter the parameters below replacing operatorImage, postgresImage, and dockerRegistrySecretName with your values:

    Note: Previously, `operatorImageRepository` and `operatorImageTag` were separate keys used to describe the operator image. Similarly, `postgresImageRepository` and `postgresImageTag` were separate keys used to describe the postgres image. Now the values are combined into new keys named `operatorImage` and `postgresImage` respectively.

    # specify the url for the docker image for the Operator, e.g. gcr.io/<my_project>/postgres-operator
    operatorImage: gcr.io/data-pcf-db/postgres-operator:v1.3.0
    
    # specify the docker image for postgres instance, e.g. gcr.io/<my_project>/postgres-instance
    postgresImage: gcr.io/data-pcf-db/postgres-instance:v1.3.0
    
    # specify the name of the docker-registry secret to allow the cluster to authenticate with the container registry for pulling images
    dockerRegistrySecretName: regsecret
    
  3. Update the Postgres instance Custom Resource Definition (CRD) with the new values:

    $ cd <your-download-location>/postgres-for-kubernetes-<postgres-version>/
    
    $ kubectl apply -f operator/crds/
    
  4. Upgrade the Postgres Operator and instances with the helm upgrade command, specifying your location of the operator-overrides.yaml file:

    $ helm upgrade -f ./operator-overrides.yaml postgres-operator operator/
    

    The output is similar to:

    Release "postgres-operator" has been upgraded. Happy Helming!
    NAME: postgres-operator 
    LAST DEPLOYED: Thu Dec 10 15:31:43 2020
    NAMESPACE: default
    STATUS: deployed
    REVISION: 4
    TEST SUITE: None
    
  5. Verify the new Postgres Operator version. The Postgres Operator is updated across all namespaces, including the default.

    $ helm ls
    
    NAME             	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART                     APP VERSION
    postgres-operator	default  	4       	2021-02-16 13:28:05.704226 -0500 CDT	deployed	postgres-operator-v1.3.0  v1.3.0
    

    Verify the image version matches the new Operator version:

    $ cat images/postgres-*-tag
    v1.3.0
    v1.3.0
    

    Confirm that the images version has also been upgraded:

    $ kubectl describe statefulset.apps/<your-database-name> | grep Image | uniq
    Image:      gcr.io/data-pcf-db/postgres-instance:v1.3.0
    

    If you have a High Availability configuration, verify the upgrade using:

    $ kubectl describe statefulset.apps/<your-ha-database> | grep Image | uniq
    Image:      gcr.io/data-pcf-db/postgres-instance:v1.3.0
    

    To verify the new Postgres instance version, use a command similar to:

    $ kubectl exec -i pod/postgres-sample-0 -- bash -c "psql -c 'select version()'"
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon