What is PostgreSQL? 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. It runs on all major operating systems, including Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, MacOS, Solaris, Tru64), and Windows. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). It includes most SQL:2008 data types, including INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. It also supports storage of binary large objects, including pictures, sounds, or video. It has native programming interfaces for C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, among others, and . exceptional documentation Prerequisites To follow this guide you need - Cluster Kubernetes Cluster GlusterFS Step 1 — Create a PostgreSQL Container Image 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 - We have created a Docker Image for Postgres in Step 2 Docker Image: We have created a Persistent Shared Storage Volume in Step 3 Persistent Shared Storage Volume: Next, we will create Deployment & Service Files Deployment & Service Files: 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