Static volume provisioning
Create a pod with a statically provisioned volume:
Tip
You can use a Yandex Object Storage bucket as storage for your pod. For more information, see Integration with Object Storage.
Getting started
-
Install kubectl
and configure it to work with the created cluster. -
Find out the unique ID of the disk you are going to use to create a
PersistentVolume
:-
If you do not have a disk yet, create one.
Warning
Make sure the disk is located in the same availability zone as the nodes of the group that the pods will be running on.
-
Get the disk ID (the
ID
column):yc compute disk list
Result:
+----------------------+------+------------+-------------------+--------+--------------+-------------+ | ID | NAME | SIZE | ZONE | STATUS | INSTANCE IDS | DESCRIPTION | +----------------------+------+------------+-------------------+--------+--------------+-------------+ | ef3ouo4sgl86******** | k8s | 4294967296 | ru-central1-a | READY | | | +----------------------+------+------------+-------------------+--------+--------------+-------------+
-
-
Check what storage classes are available and select the appropriate one:
kubectl get storageclass
Result:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE yc-network-hdd (default) disk-csi-driver.mks.ycloud.io Delete WaitForFirstConsumer true 12d yc-network-nvme disk-csi-driver.mks.ycloud.io Delete WaitForFirstConsumer true 12d yc-network-ssd disk-csi-driver.mks.ycloud.io Delete WaitForFirstConsumer true 12d yc-network-ssd-nonreplicated disk-csi-driver.mks.ycloud.io Delete WaitForFirstConsumer true 12d
Note
Please note that Kubernetes storage classes and Yandex Compute Cloud disk types are different concepts.
Create a PersistentVolume object
-
Save the
PersistentVolume
creation specification to a YAML file namedtest-pv.yaml
.For more information about the specification, see the Kubernetes documentation
.When providing the
spec.capacity.storage
parameter, make sure the exact disk size is specified. Container Storage Interface does not verify disk size for statically provisioned volumes.To create a
PersistentVolume
from an existing cloud drive, enter its unique disk ID in thevolumeHandle
parameter.Note
If the
storageClassName
parameter is not specified, the default storage class (yc-network-hdd
) is used. To change the default class, see Change the default storage class.To learn more about the
PersistentVolumeClaim
creation specification, see the Kubernetes documentation .apiVersion: v1 kind: PersistentVolume metadata: name: <PersistentVolume_name> spec: capacity: storage: <PersistentVolume_size> accessModes: - ReadWriteOnce csi: driver: disk-csi-driver.mks.ycloud.io fsType: ext4 volumeHandle: <disk_ID> storageClassName: <storage_class_name>
-
Run this command:
kubectl create -f test-pv.yaml
Result:
persistentvolume/<PersistentVolume_name> created
-
View the information about the new
PersistentVolume
object:kubectl describe persistentvolume <PersistentVolume_name>
Result:
Name: <PersistentVolume_name> Labels: <none> Annotations: <none> Finalizers: [kubernetes.io/pv-protection] StorageClass: <storage_class_name> Status: Available ...
Create a PersistentVolumeClaim object
-
Save the
PersistentVolumeClaim
creation specification to a YAML file namedtest-claim.yaml
.For more information about the specification, see the Kubernetes documentation
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <PersistentVolumeClaim_name> spec: accessModes: - ReadWriteOnce resources: requests: storage: <PersistentVolumeClaim_size> storageClassName: <storage_class_name> volumeName: <PersistentVolume_name>
Note
The size of
PersistentVolumeClaim
must be less than or equal to that ofPersistentVolume
. -
Run this command:
kubectl create -f test-claim.yaml
Result:
persistentvolumeclaim/<PersistentVolumeClaim_name> created
-
View the information about the new
PersistentVolumeClaim
:kubectl describe persistentvolumeclaim <PersistentVolumeClaim_name>
Result:
Name: <PersistentVolumeClaim_name> Namespace: default StorageClass: <storage_class_name> Status: Bound Volume: <PersistentVolume_name> ...
Create a pod with a statically provisioned volume
-
Create a file named
test-pod.yaml
with a manifest for the pod usingPersistentVolumeClaim
:apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: app image: ubuntu command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: <PersistentVolumeClaim_name>
For more information about the specification, see the Kubernetes documentation
. -
Run this command:
kubectl create -f test-pod.yaml
Result:
pod/test-pod created
-
View the information about the new pod:
kubectl describe pod test-pod
Result:
Name: test-pod Namespace: default Priority: 0 ... ---- ------ ---- ---- ------- Normal Scheduled 20m default-scheduler Successfully assigned default/test-pod to cl1jtehftl7q********-icut Normal SuccessfulAttachVolume 20m attachdetach-controller AttachVolume.Attach succeeded for volume "<PersistentVolume_name>"
In the Compute Cloud management console under Disks, the word Active will appear next to your disk.
How to delete a volume
Disks are not deleted automatically from Compute Cloud when you delete PersistentVolume
. To delete the volume completely:
-
Delete the
PersistentVolumeClaim
object:kubectl delete pvc <PersistentVolumeClaim_object_ID>
-
Delete the
PersistentVolume
object:kubectl delete pv <PersistentVolume_object_ID>
-
In Compute Cloud, delete the disk linked to the
PersistentVolume
object.