Greetings of the day dear Orchestrator!! In this post, we will discuss exploring the Kubernetes StatefulSet(sts)
What is the purpose of Stateful deployment?
Kubernetes' basic unit is Pod, which will be ephemeral in nature and it was designed in such a way that it cannot store the state. To store and maintain the state of the application, Kubernetes introduced a new type of deployment manifestation called it as StatefulSet.
Here in this post, we will be experimenting with the most important deployment model that is StatefulSet which will be interconnected with the multiple storage related objects PersistantVolume(PV) and PersistentVolumeClaim (PVC).
Assumptions
To work on this experiment you must have Kubernetes cluster running on single node or multi-node and it should have a NFS remote storage access that depends on your platform. Here I've EC2 instance having NFS service configured and run:
Let's define the couple of PV(4) using the NFS server which will be consumed by the PVC. The Stateful deployment is going to have the Pod and PVC template manifestation.
Creating a YAML file for pvc :
Creating a YAML file for pvc :
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv0
spec:
storageClassName: manual
capacity:
storage: 200Mi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /export/volume/pv0
server: 172.31.46.253
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv1
spec:
storageClassName: manual
capacity:
storage: 200Mi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /export/volume/pv1
server: 172.31.46.253
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv2
spec:
storageClassName: manual
capacity:
storage: 200Mi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /export/volume/pv2
server: 172.31.46.253
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv3
spec:
storageClassName: manual
capacity:
storage: 200Mi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /export/volume/pv3
server: 172.31.46.253
Now, use the following command to create the PVC:
Syntax :
kubectl create -f nfs-pv.yaml
Output :
Checking the PVC are created or not with the simple ls command :
Syntax :
ls
Output :
Using another YAML file for creating PV files :
--- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web-sts spec: serviceName: "nginx" replicas: 4 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: gcr.io/google_containers/nginx-slim:0.8 ports: - containerPort: 80 name: web-sts volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 100Mi
Now, use the following command to create the PV:
Syntax:
kubectl create -f web-sts.yaml
Output :
Checking the PV are created or not with the following command :
Syntax :
kubectl get pv
Output :
Syntax :
watch kubectl get allOutput :
No comments:
Post a Comment