postgres-operator/kubectl-pg
Vineeth Reddy fd6a2454e8 [GSoC 2019] kubectl plugin for the Postgres operator (#579)
*  Add a prototype of a kubectl plugin for the Postgres operator
   Work done by Vineeth Pothulapati <vineethpothulapati@outlook.com>
   during Google Summer of Code 2019
2019-08-27 12:51:21 +02:00
..
cmd [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02:00
README.md [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02:00
build.sh [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02:00
go.mod [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02:00
go.sum [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02:00
main.go [GSoC 2019] kubectl plugin for the Postgres operator (#579) 2019-08-27 12:51:21 +02: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" 
# As of now go by default doesn't support Go mods. So explicit enabling is required.
$ 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 varibale

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

--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

kubectl pg connect -c CLUSTER #This connects to a random pod kubectl pg connect -c CLUSTER -m #This connects the master kubectl pg connect -c CLUSTER -r 0 #This connects to the desired replica

To connect to the psql prompt

kubectl pg connect -c CLUSTER -p -u username #This connects to a random pod. Not master kubectl pg connect -c CLUSTER -m -p -u username #This connects the master kubectl pg connect -c CLUSTER -r 0 -p -u username #This connects to the desired replica

Note: -p represents psql prompt

To get the logs of postgres operator

kubectl pg logs -o

To get the logs of the postgres cluster

kubectl pg logs -c CLUSTER #Fetches the logs of a random pod. Not master kubectl pg logs -c CLUSTER -m #Fetches the logs of master kubectl pg logs -c CLUSTER -r 2 #Fecthes the logs of specified replica

Development

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