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
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: - 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 🙂
Written with StackEdit.