Charmed PostgreSQL K8s

Channel Revision Published Runs on
latest/stable 20 20 Sep 2022
Ubuntu 20.04
14/stable 193 13 Mar 2024
Ubuntu 22.04
14/candidate 193 31 Jan 2024
Ubuntu 22.04
14/beta 211 13 Mar 2024
Ubuntu 22.04
14/edge 237 16 Apr 2024
Ubuntu 22.04
juju deploy postgresql-k8s --channel 14/stable
Show information

Platform:

How to deploy on GKE

Google Kubernetes Engine (GKE) is a highly scalable and fully automated Kubernetes service. To access the GKE Web interface, go to console.cloud.google.com/compute.

Install GKE and Juju tooling

Install juju and gcloud tool using snap:

sudo snap install juju --classic
sudo snap install kubectl --classic
sudo snap install google-cloud-cli --classic

Log in to a Google Account

gcloud auth login

This should open a page in your browser starting with https://accounts.google.com/o/oauth2/... where you can complete the login.

If successful, the command prompt will show:

You are now logged in as [your_account@gmail.com].

Next, you must associate this installation with GCloud project using “Project ID” from resource-management:

gcloud config set project <PROJECT_ID>

Sample output:

Updated property [core/project].

As a last step, install the Debian package google-cloud-sdk-gke-gcloud-auth-plugin using this Google guide: Install the gcloud CLI.

Create a new GKE cluster

The following command will start three compute engines on Google Cloud - imagine them as three physical servers in clouds - and deploy a K8s cluster there.

To simplify the guide, the following command will use high-availability zone europe-west1 and compute engine type n1-standard-4 (which can be adapted to your needs if necessary):

gcloud container clusters create --zone europe-west1-c $USER-$RANDOM --cluster-version 1.25 --machine-type n1-standard-4 --num-nodes=3 --no-enable-autoupgrade

Next, assign your account as an admin of the newly created K8s cluster:

kubectl create clusterrolebinding cluster-admin-binding-$USER --clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Bootstrap Juju on GKE

Bootstrap a new juju controller on fresh cluster by running the following commands:

juju add-k8s gke-jun-9 --storage=standard --client
juju bootstrap gke-jun-9
juju add-model welcome-model

At this stage, Juju is ready to use GKE. Check the list of currently running K8s pods and juju’s status:

kubectl get pods -n welcome-model
juju status

Deploy Charms

juju deploy postgresql-k8s-bundle --channel 14/edge --trust
juju status --watch 1s

List

To list GKE clusters and juju clouds, run:

gcloud container clusters list

Sample output:

NAME          LOCATION        MASTER_VERSION   MASTER_IP      MACHINE_TYPE   NODE_VERSION     >NUM_NODES  STATUS
mykola-18187  europe-west1-c  1.25.9-gke.2300  31.210.22.127  n1-standard-4  1.25.9-gke.2300  3          >RUNNING
taurus-7485   europe-west1-c  1.25.9-gke.2300  142.142.21.25  n1-standard-4  1.25.9-gke.2300  3          >RUNNING

Juju can handle multiple clouds simultaneously. Check list of clouds with registered credentials on Juju:

juju clouds

Sample output:

Clouds available on the controller:
Cloud      Regions  Default       Type
gke-jun-9  1        europe-west1  k8s  

Clouds available on the client:
Cloud           Regions  Default       Type  Credentials  Source    Description
gke-jun-9       1        europe-west1  k8s   1            local     A Kubernetes Cluster
localhost       1        localhost     lxd   1            built-in  LXD Container Hypervisor
microk8s        0                      k8s   1            built-in  A local Kubernetes context

Cleanup

Warning: Always clean GKE resources that are no longer necessary - they could be costly!

To clean GKE clusters and juju clouds, use:

juju destroy-controller gke-jun-9-europe-west1 --yes --destroy-all-models --destroy-storage --force
juju remove-cloud gke-jun-9

gcloud container clusters list
gcloud container clusters delete <cluster_name> --zone europe-west1-c

Revoke the GCloud user credentials:

gcloud auth revoke your_account@gmail.com

You should see a confirmation output:

Revoked credentials:
- your_account@gmail.com

Help improve this document in the forum (guidelines). Last updated 3 months ago.