If you want to preserve the data even after a pod deletion or pod failures, you should use persistent volumes. For GKE, you have to option to create google cloud persistent disk and use it as a persistent volumes for the pods.

Setup Persistent Volume For GKE

Note: When using persistent Volume, only one replica will be able to do read-write operation. With more than one replica, you can only use the PD in the read mode.

In this article, I have added to steps to setup persistent volume for the pods running in GKE.

Before deploying the pods, we should create a storage class

The following config will create a storage class gold with gce-pd as the volume provisioner.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gold
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

Now, we will create a persistentVolumeClaim (PVC). We will use this volume claim in our deployment config.

The following config will create a PVC named jenkins-data in jenkins namespace under gold storage class that we have created first. You can change these names accordingly.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-data
  namespace: jenkins
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  storageClassName: gold

In the Kubernetes deployment config, you can use the newly created PVC using the following volume definition.

volumes:
  - name: jenkins-persistent-storage
    persistentVolumeClaim:
       claimName: jenkins-data

Example Deployment Config With Persistent Volume Claim

A full Jenkins container definition using persistent volume is shown below.

Under container spec I defined the volume name and mount path required for the container.

Under Volumes definition, I have mentioned the volume name and our newly created persistent disk for mounting it to the pod.

[irp posts=”647″ name=”Jenkins Tutorial For Beginners – Getting Started Guide”]

This deployment creates a Jenkins pod with all its data mounted to the persistent volume. So, even if you delete the pod, a new pod will come up and mount itself to the persistent volume. So you will see the new Jenkins pod with all the old data and configurations.

apiVersion: extensions/v1beta1 # for versions before 1.7.0 use apps/v1beta1
kind: Deployment
metadata:
  name: jenkins-deployment
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: bibinwilson/priveleged-jenkins
        ports:
        - containerPort: 8080
        volumeMounts:
              - name: jenkins-persistent-storage
                mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-persistent-storage
        persistentVolumeClaim:
           claimName: jenkins-data

Hope this article helps. Let me know in the comment section, if you face any issues,

 

kubernetes persistent volume for GKE