postgres-operator/kubectl-pg
Felix Kunde 5e88bcf970 fix remaining build issues and update go modules 2021-02-15 15:47:44 +01:00
..
cmd fix remaining build issues and update go modules 2021-02-15 15:47:44 +01:00
README.md fix remaining build issues and update go modules 2021-02-15 15:47:44 +01:00
build.sh [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02:00
go.mod fix remaining build issues and update go modules 2021-02-15 15:47:44 +01:00
go.sum fix remaining build issues and update go modules 2021-02-15 15:47:44 +01:00
main.go update kubectl-pg plugin 2020-12-17 11:10:11 +01:00

README.md

Kubectl Plugin for Zalando's Postgres Operator

Google Summer of Code 2019

This plugin is a prototype developed as a part of GSoC 2019 under the organisation The Postgres Operator

GSoC Proposal

kubectl pg proposal

Weekly Reports

https://github.com/VineethReddy02/GSoC-Kubectl-Plugin-for-Postgres-Operator-tracker

Final Project Report

https://gist.github.com/VineethReddy02/159283bd368a710379eaf0f6bd60a40a

Installtion of kubectl pg plugin

This project uses Go Modules for dependency management to build locally Install go and enable go modules export GO111MODULE=on From Go >=1.13 Go modules will be enabled by default

# Assumes you have a working KUBECONFIG
$ GO111MODULE="on"
$ GOPATH/src/github.com/zalando/postgres-operator/kubectl-pg  go mod vendor
# This generate a vendor directory with all dependencies needed by the plugin.
$ $GOPATH/src/github.com/zalando/postgres-operator/kubectl-pg  go install
# This will place the kubectl-pg binary in your $GOPATH/bin

Before using the kubectl pg plugin make sure to set KUBECONFIG env variable

Ideally KUBECONFIG is found in $HOME/.kube/config else specify the KUBECONFIG path here.

export KUBECONFIG=$HOME/.kube/config

To list all commands available in kubectl pg

kubectl pg --help (or) kubectl pg

This basically means the operator pod managed to start, so our operator is installed.

kubectl pg check

To create postgresql cluster using manifest file

kubectl pg create -f acid-minimal-cluster.yaml

To update existing cluster using manifest file

kubectl pg update -f acid-minimal-cluster.yaml

To delete existing cluster using manifest file

kubectl pg delete -f acid-minimal-cluster.yaml

To delete existing cluster using cluster name

kubectl pg delete acid-minimal-cluster

Use --namespace or -n flag to specify namespace if cluster is in other namespace.

kubectl pg delete acid-minimal-cluster -n namespace01

To list postgres resources for the current namespace

kubectl pg list

To list postgres resources across namespaces

kubectl pg list all

To add-user and it's roles to an existing pg cluster

kubectl pg add-user USER01 -p CREATEDB,LOGIN -c acid-minimal-cluster

Privileges can only be [SUPERUSER, REPLICATION, INHERIT, LOGIN, NOLOGIN, CREATEROLE, CREATEDB, BYPASSURL]

Note: A login user is created by default unless NOLOGIN is specified, in which case the operator creates a role.

To add-db and it's owner to an existing pg cluster

kubectl pg add-db DB01 -o OWNER01 -c acid-minimal-cluster

To extend volume for an existing pg cluster

kubectl pg ext-volume 2Gi -c acid-minimal-cluster

To find the version of postgres operator and kubectl plugin

kubectl pg version

Optional -n NAMESPACE allows to know specific to a namespace

To connect to the shell of a postgres pod

Connect to the master pod: kubectl pg connect -c CLUSTER -m

Connect to a random replica pod: kubectl pg connect -c CLUSTER

Connect to a certain replica pod: kubectl pg connect -c CLUSTER -r 0

To connect to the psql prompt

Adding the -p flag allows you to directly connect to a given database with the psql client. With -u you specify the user. If left out the name of the current OS user is taken. -d lets you specify the database. If no database is specified, it will be the same as the user name.

Connect to app_db database on the master with role app_user: kubectl pg connect -c CLUSTER -m -p -u app_user -d app_db

Connect to the postgres database on a random replica with role postgres: kubectl pg connect -c CLUSTER -p -u postgres

Connect to a certain replica assuming name of OS user, database role and name are all the same: kubectl pg connect -c CLUSTER -r 0 -p

To get the logs of postgres operator

kubectl pg logs -o

To get the logs of the postgres cluster

Fetch logs of master: kubectl pg logs -c CLUSTER -m

Fetch logs of a random replica pod: kubectl pg logs -c CLUSTER

Fetch logs of specified replica kubectl pg logs -c CLUSTER -r 2

Development

When making changes to plugin make sure to change the major or patch version of plugin in build.sh and run ./build.sh