Home Explore Blog CI



kubernetes

1st chunk of `content/en/blog/_posts/2017-02-00-Postgresql-Clusters-Kubernetes-Statefulsets.md`
8c3b2a1dcf1280dab9b5a9365d67b840542762d9ebe4069e0000000100000fe7
---
title: " Deploying PostgreSQL Clusters using StatefulSets "
date: 2017-02-24
slug: postgresql-clusters-kubernetes-statefulsets
url: /blog/2017/02/Postgresql-Clusters-Kubernetes-Statefulsets
author: >
  Jeff McCormick ([Crunchy Data](http://crunchydata.com/))
---
_Editor’s note: Today’s guest post is by Jeff McCormick, a developer at Crunchy Data, showing how to build a PostgreSQL cluster using the new Kubernetes StatefulSet feature._  

In an earlier [post](https://kubernetes.io/blog/2016/09/creating-postgresql-cluster-using-helm), I described how to deploy a PostgreSQL cluster using [Helm](https://github.com/kubernetes/helm), a Kubernetes package manager. The following example provides the steps for building a PostgreSQL cluster using the new Kubernetes [StatefulSets](/docs/concepts/abstractions/controllers/statefulsets/) feature.   

**StatefulSets Example**  

**Step 1** - Create Kubernetes Environment  

StatefulSets is a new feature implemented in [Kubernetes 1.5](https://kubernetes.io/blog/2016/12/kubernetes-1-5-supporting-production-workloads/) (prior versions it was known as PetSets). As a result, running this example will require an environment based on Kubernetes 1.5.0 or above.

The example in this blog deploys on Centos7 using [kubeadm](/docs/admin/kubeadm/). Some instructions on what kubeadm provides and how to deploy a Kubernetes cluster is located [here](http://linoxide.com/containers/setup-kubernetes-kubeadm-centos).  

**Step 2** - Install NFS  

The example in this blog uses NFS for the Persistent Volumes, but any shared file system would also work (ex: ceph, gluster).    

The example script assumes your NFS server is running locally and your hostname resolves to a known IP address.   

In summary, the steps used to get NFS working on a Centos 7 host are as follows:  



```
sudo setsebool -P virt\_use\_nfs 1

sudo yum -y install nfs-utils libnfsidmap

sudo systemctl enable rpcbind nfs-server

sudo systemctl start rpcbind nfs-server rpc-statd nfs-idmapd

sudo mkdir /nfsfileshare

sudo chmod 777 /nfsfileshare/

sudo vi /etc/exports

sudo exportfs -r
 ```



The /etc/exports file should contain a line similar to this one except with the applicable IP address specified:  



```
/nfsfileshare 192.168.122.9(rw,sync)
 ```



After these steps NFS should be running in the test environment.



**Step 3** - Clone the Crunchy PostgreSQL Container Suite



The example used in this blog is found at in the Crunchy Containers GitHub repo [here](https://github.com/CrunchyData/crunchy-containers.git). Clone the Crunchy Containers repository to your test Kubernertes host and go to the example:



```
cd $HOME

git clone https://github.com/CrunchyData/crunchy-containers.git

cd crunchy-containers/examples/kube/statefulset
 ```



Next, pull down the Crunchy PostgreSQL container image:



```
docker pull crunchydata/crunchy-postgres:centos7-9.5-1.2.6
 ```



**Step 4** - Run the Example



To begin, it is necessary to set a few of the environment variables used in the example:



```
export BUILDBASE=$HOME/crunchy-containers

export CCP\_IMAGE\_TAG=centos7-9.5-1.2.6
 ```



BUILDBASE is where you cloned the repository and CCP\_IMAGE\_TAG is the container image version we want to use.



Next, run the example:



```
./run.sh
 ```



That script will create several Kubernetes objects including:

-  Persistent Volumes (pv1, pv2, pv3)
-  Persistent Volume Claim (pgset-pvc)
-  Service Account (pgset-sa)
-  Services (pgset, pgset-master, pgset-replica)
-  StatefulSet (pgset)
-  Pods (pgset-0, pgset-1)

At this point, two pods will be running in the Kubernetes environment:



```
$ kubectl get pod

NAME      READY     STATUS    RESTARTS   AGE

pgset-0   1/1       Running   0          2m

pgset-1   1/1       Running   1          2m
 ```



Immediately after the pods are created, the deployment will be as depicted below:

[![](https://lh5.googleusercontent.com/tGg-37a7SoVQR9Zn3R209iKbkegX5XqRQdRa5ZD6q-vpm1hWqtBxnhOBiGw2uHHkZ5lc_VBKrSEEP29BmAzoWc1xydV7G4I8kaQqVZoYOdRCvBf755Rxf9aj-pm7FhfmgECBW3gR)

Title: Deploying PostgreSQL Clusters Using Kubernetes StatefulSets
Summary
This blog post explains how to deploy a PostgreSQL cluster using the Kubernetes StatefulSets feature. The steps involve setting up a Kubernetes environment (version 1.5 or above), installing NFS for persistent volumes, cloning the Crunchy PostgreSQL container suite, and running the provided example script. The script creates various Kubernetes objects, including Persistent Volumes, Persistent Volume Claims, Service Accounts, Services, a StatefulSet, and Pods, resulting in a running PostgreSQL cluster.