Learn how to set up Persistent Volume on OVH Kubernetes. Our Kubernetes Support team is here to help you with your questions and concerns.
OVH Kubernetes Persistent Volume | Guide
A persistent volume can be described as a piece of storage set aside by an administrator in a cluster.
In other words, it is a resource in the cluster. Furthermore, the persistent volume is a volume plug-in with a lifecycle that is not dependent on any individual pod using the persistent volume.
PVs have different access modes that define how the storage can be accessed. These include:
- ReadWriteOnce
It is mounted as read-write by a single node.
- ReadOnlyMany
It can be mounted as read-only by several nodes.
- ReadWriteMany
Then it can be mounted as read-write by several nodes.
Storage Classes help dynamically allot persistent volumes according to users’ needs. Furthermore, OVH Kubernetes supports storage classes that define different classes of storage with specific features and performance characteristics.
Upon creating a Persistent Volume resource in a Managed Kubernetes cluster, the system automatically generates a corresponding Public Cloud Block Storage volume.
Furthermore, Kubernetes Volumes exist only during the Pod’s lifetime.Deleting the pods results in the automatic deletion of the volumes. Hence, Kubernetes Volumes are useful for storing temporary data.
Additionally, Kubernetes Persistent Volumes (PV) lets us work with non-volatile data in Kubernetes. Persistent volumes remain independent of a single pod or the pod lifecycle. In fact, Pods can claim PersistentVolumes. This gives them access to the data.
The most common application for PV in Kubernetes is databases. Persistent Volumes are essential in Kubernetes to deploy database data persistently, unbound to a particular pod.
Let’s take a look at how to deploy a database in Kubernetes:
- To begin with, create and configure a Pod for the database engine.
- Then, attach a PV to the pod with a PersistentVolumeClaim.
- We have to mount the claimed volume to the Pod.
As seen in the above steps, we have to create a PVC ( Persistent Volume Claim) to use a Persistent Volume on a Kubernetes cluster.
Persistent Volume Claims are requests to set up a Persistent Volume of a certain type and configuration.
Furthermore, cluster admins define different kinds of persistent storage, using Storage Classes.
When we need a Persistent Volume, you have to create a Persistent Volume Claim and choose a Storage Class from the available options offered by the cluster administrators.
The Storage Class allocates an actual infrastructure volume storage device to our account, followed by the creation of a Persistent Volume on the physical device.
PersistentVolumes on OVHcloud Managed Kubernetes
OVHCloud supports several Storage Classes on OVHcloud Managed Kubernetes as seen here:
- csi-cinder-classic
- csi-cinder-high-speed
We can easily display them with this command:
$ kubectl get storageclass
Copy Code
Furthermore, the storage classes are based on Cinder. It is an OpenStack Block Storage service.
The difference between csi-cinder-classic and csi-cinder-high-speed is the physical storage device. While the latter uses SSD, the former uses traditional spinning disks.
Still, they transparently distribute on three physical local replicas.
When we create a PVC on our Kubernetes cluster, OVHCloud allots the Cinder storage into our account. Our experts would like to point out that the charges for the storage will be as per the OVH Flexible Cloud Block Storage Policy.
Furthermore, Kubernetes offers support for PVCs by default since 1.11. Also, it works on Cinder volumes. Although Kubernetes PVCs resizing lets us expand volumes, it does not let us reduce them.
How to set up a PersistentVolume
Today, your experts are going to take us through a simple example as seen here:
- To begin with, we have to create a namespace as seen here:
kubectl create ns nginx-example
Copy Code - Then, we have to define a PVC in a file named pvc.yaml with this content:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nginx-logs namespace: nginx-example labels: app: nginx spec: storageClassName: csi-cinder-high-speed accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Copy Code - Now, it is time to apply the YAML manifest as seen here:
kubectl apply -f pvc.yaml
Copy Code - At this point, we can check if the new PVC and PV has been created:
kubectl get pvc -n nginx-example kubectl get pv
Copy CodeOnce we run the above commands we will see the following output:
$ kubectl get pvc -n nginx-example NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nginx-logs Bound ovh-managed-kubernetes-d6r47l-pvc-a6025a24-c572-4c28-b5e7-c6f8311aa47f 1Gi RWO csi-cinder-high-speed 21s
Copy Code$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE ovh-managed-kubernetes-d6r47l-pvc-a6025a24-c572-4c28-b5e7-c6f8311aa47f 1Gi RWO Delete Bound nginx-example/nginx-logs csi-cinder-high-speed 19s
Copy CodeHere, we can see that the PV is created and is Bound to the PVC we created.
- Then, create a file named deployment.yaml with this content:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: nginx-example spec: strategy: type: Recreate replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: volumes: - name: nginx-logs persistentVolumeClaim: claimName: nginx-logs containers: - image: nginx:1.7.9 name: nginx ports: - containerPort: 80 volumeMounts: - mountPath: "/var/log/nginx" name: nginx-logs readOnly: false
Copy Code - Now apply it with this command:
kubectl apply -f deployment.yaml
Copy Code - Then, create a service for the Nginx container in a file named svc.yaml:
apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx-service namespace: nginx-example spec: ports: - port: 80 targetPort: 80 selector: app: nginx type: LoadBalancer
Copy Code - Now apply it as seen here:
kubectl apply -f svc.yml
Copy Code - Then, we have to wait til we get an external IP:
kubectl -n nginx-example get svc/nginx-service -w
Copy Code - Now, it is time to perform some calls to the URL so that we can generate some access logs:
export NGINX_URL=$(kubectl get svc nginx-service -n nginx-example -o jsonpath='{.status.loadBalancer.ingress[].ip}') echo Nginx URL: http://$NGINX_URL/
Copy Codecurl -I http://$NGINX_URL/
- Now, we have to connect to the pod to read the log files. So, run this command to get the name of the Nginx running pod:
export POD_NAME=$(kubectl get po -n nginx-example -o name)
Copy Code - Then once we connect to it we can see our access logs:
kubectl -n nginx-example exec $POD_NAME -c nginx -- cat /var/log/nginx/access.log
Copy Code
PV Lifecycle and Reclaim Policy
Now, let’s take a look at the Reclaim Policy:
The persistentVolumeReclaimPolicy field in the PV definition decides the future of the volume. There are three options, namely, “Retain,” “Delete,” or “Recycle.”
Additionally, OVH Kubernetes supports dynamic provisioning. Here, claiming a PVC prompts the automatic creation of PVs in this instance.. Furthermore, the storage class decided the type of storage to allot.
[Need assistance with a different issue? Our team is available 24/7.]
Conclusion
In brief, our Support Experts demonstrated how to set up Persistent Volume on OVH Kubernetes.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
0 Comments