Static volume provisioning
Create a pod with a statically provisioned volume:
Tip
You can use a Yandex Object Storage bucket as storage for the pod. For more information, see Integration with Object Storage.
Getting started
-
Install kubectl
and configure it to work with the created cluster. -
Look up the unique ID of the disk to be used 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 specification you used to create your
PersistentVolume
to a YAML file namedtest-pv.yaml
.For more information about the specification, see the Kubernetes documentation
.When setting the
spec.capacity.storage
parameter, make sure you specified the exact size of the disk. Container Storage Interface doesn't validate the disk size for statically prepared 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 storageClassName: "yc-network-hdd" csi: driver: disk-csi-driver.mks.ycloud.io fsType: ext4 volumeHandle: <disk_ID> storageClassName: <storage_class_name>
-
Run the following command:
kubectl create -f test-pv.yaml
Result:
persistentvolume/<PersistentVolume_name> created
-
View information about the created
PersistentVolume
: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 the following command:
kubectl create -f test-claim.yaml
Result:
persistentvolumeclaim/<PersistentVolumeClaim_name> created
-
View information about the
PersistentVolumeClaim
created: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 of a pod that usesPersistentVolumeClaim
: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 the following command:
kubectl create -f test-pod.yaml
Result:
pod/test-pod created
-
View information about the pod created:
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 aren't 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>
-
Delete the disk in Compute Cloud that is linked to the
PersistentVolume
object.