PostgreSQL is a powerful, open source Relational Database Management System. PostgreSQL is not controlled by any organization or any individual. Its source code is available free of charge. It is pronounced as “post-gress-Q-L”.
PostgreSQL has earned a strong reputation for its reliability, data integrity, and correctness.
To follow this guide you need -
Create a file name “Dockerfile” for PostgreSQL. This image contains our custom config dockerfile which will look like -
FROM ubuntu:latest
MAINTAINER XenonStack
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" > /etc/apt/sources.list.d/pgdg.list
RUN apt-get update && apt-get install -y python-software-properties software-properties-common postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER root WITH SUPERUSER PASSWORD 'xenonstack';" &&\
createdb -O root xenonstack
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.6/main/pg_hba.conf
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.6/main/postgresql.conf
# Expose the PostgreSQL port
EXPOSE 5432
# Add VOLUMEs to allow backup of databases
VOLUME ["/var/lib/postgresql"]
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.6/bin/postgres", "-D", "/var/lib/postgresql", "-c", "config_file=/etc/postgresql/9.6/main/postgresql.conf"]
This Postgres image has a base image of ubuntu xenial. After that, we create Super User and default databases. Exposing 5432 port will help external system to connect the PostgreSQL server.
Step 2 — Build PostgreSQL Docker Image
$ docker build -t dr.xenonstack.com:5050/postgres:v9.6
Step 3 — Create a Storage Volume (Using GlusterFS)
Using below-mentioned command create a volume in GlusterFS for PostgreSQL and start it. As we don’t want to lose our PostgreSQL Database data just because a Gluster server dies in the cluster, so we put replica 2 or more for higher availability of data.
$ gluster volume create postgres-disk replica 2 transport tcp k8-master:/mnt/brick1/postgres-disk k8-1:/mnt/brick1/postgres-disk
$ gluster volume start postgres-disk
$ gluster volume info postgres-disk
Step 4 — Deploy PostgreSQL on Kubernetes
Deploying PostgreSQL on Kubernetes have following prerequisites -
Create a file name “deployment.yml” for PostgreSQL. This deployment file will look like -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres
namespace: production
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: postgres
spec:
containers:
- name: postgres
image: dr.xenonstack.com:5050/postgres:v9.6
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: superpostgres
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
glusterfs:
endpoints: glusterfs-cluster
path: postgres-disk
readOnly: false
Continue Reading The Full Article At — XenonStack.com/Blog