Kubernetes provides virtualized infrastructure components such as storage, compute and network. Imagine an operating system that allows users to allocate resources and run their applications.
StatefulSet is a type of application that needs to persist information across lifetimes 🙂
The storage is exposed as a class
and name. Storage class mimic real world and has meta information such as size, type and provider of the storage. Kubernetes is following plugin based approcah like Linux kernel VFS :-). You can act as a provider of storage and define a class for such storage.
Storage type could be block
or file
. Like Linux, a file type storage gets a mountpoint.
The following snippet defines a storage class of type SSD, using Google’s storage. Retain
means we keep the data even after the node (pod) is down.
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: my-storage-class
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Retain
parameters:
type: pd-ssd
replication-type: none
---
gce-pd
means Google Cloud Engine- Persistent Disk.
The Kubernetes template for the instance would also specify how to use the storage with a PersistentVolumeClaim
. The idea is that the instance first claims a persistent volume of a particular class. It also mentions access type and needed size.
volumeClaimTemplates:
- metadata:
name: a-new-claim
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1Gi
ReadWriteOnce
means that the volume is mounted once for read and write. It just menas a regular storage space.
Now just use the claim under containers
section.
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
volumeMounts:
- name: a-new-claim
mountPath: /usr/share/nginx/html
You will have a mounted path /usr/share/nginx/html
in the container. Behavior is similar to local mount exported by NFS 🙂
REFERENCES
Written with StackEdit.