Skip to content

Install Percona Distribution for PostgreSQL on Kubernetes

Following steps will allow you to install the Operator and use it to manage Percona Distribution for PostgreSQL in a Kubernetes-based environment.

  1. First of all, clone the percona-postgresql-operator repository:

    $ git clone -b v1.6.0
    $ cd percona-postgresql-operator


    It is crucial to specify the right branch with -b option while cloning the code on this step. Please be careful.

  2. The next thing to do is to add the pgo namespace to Kubernetes, not forgetting to set the correspondent context for further steps:

    $ kubectl create namespace pgo
    $ kubectl config set-context $(kubectl config current-context) --namespace=pgo


    To use different namespace, you should edit all occurrences of the namespace: pgo line in both deploy/cr.yaml and deploy/operator.yaml configuration files.

  3. Deploy the operator with the following command:

    $ kubectl apply -f deploy/operator.yaml
    Expected output
    serviceaccount/pgo-deployer-sa created created
    configmap/pgo-deployer-cm created created
    job.batch/pgo-deploy created

    The last line of the command output mentions the pgo-deploy Kubernetes Job created to carry on the Operator deployment process. It can take several minutes to be completed. You can track it with the following command:

    $ kubectl get job/pgo-deploy
    Expected output
    pgo-deploy   1/1           81s        5m53s

    When it reaches the COMPLETIONS count of 1/1, you can safely delete the job as follows:

    $ kubectl delete  job/pgo-deploy


    Deleting the pgo-deploy job will be needed before upgrading the Operator.

  4. After the operator is started Percona Distribution for PostgreSQL can be created at any time with the following command:

    $ kubectl apply -f deploy/cr.yaml

    Creation process will take some time. The process is over when both operator and replica set pod have reached their Running status:

    $ kubectl get pods
    Expected output
    NAME                                              READY   STATUS    RESTARTS   AGE
    backrest-backup-cluster1-j275w                    0/1     Completed 0          10m
    cluster1-85486d645f-gpxzb                         1/1     Running   0          10m
    cluster1-backrest-shared-repo-6495464548-c8wvl    1/1     Running   0          10m
    cluster1-pgbouncer-fc45869f7-s86rf                1/1     Running   0          10m
    pgo-deploy-rhv6k                                  0/1     Completed 0          5m
    postgres-operator-8646c68b57-z8m62                4/4     Running   1          5m
  5. During previous steps, the Operator has generated several secrets, including the password for the pguser user, which you will need to access the cluster.

    Use kubectl get secrets command to see the list of Secrets objects (by default Secrets object you are interested in has cluster1-pguser-secret name). Then you can use kubectl get secret cluster1-pguser-secret -o yaml to look through the YAML file with generated secrets (the actual password will be base64-encoded), or just get the needed password with the following command:

    $ kubectl get secrets cluster1-users -o yaml -o jsonpath='{.data.pguser}' | base64 --decode | tr '\n' ' ' && echo " "
  6. Check connectivity to newly created cluster. Run a new Pod to use it as a client and connect its console output to your terminal (running it may require some time to deploy). When you see the command line prompt of the newly created Pod, run psql tool using the password obtained from the secret. The following command will do this, naming the new Pod pg-client:

    $ kubectl run -i --rm --tty pg-client --image=perconalab/percona-distribution-postgresql:14.11 --restart=Never -- bash -il
    [postgres@pg-client /]$ PGPASSWORD='pguser_password' psql -h cluster1-pgbouncer -p 5432 -U pguser pgdb

    This command will connect you to the PostgreSQL interactive terminal.

    $ psql (14.11)
    Type "help" for help.

Last update: 2024-05-23