Статическая подготовка тома
Создайте под со статически подготовленным томом:
Совет
Вы можете использовать бакет Yandex Object Storage в качестве хранилища для пода. Подробнее см. в разделе Интеграция с Object Storage.
Перед началом работы
-
Установите kubectl и настройте его на работу с созданным кластером.
-
Узнайте уникальный идентификатор диска, который будет использован для создания объекта
PersistentVolume
:-
Если у вас еще нет диска, создайте его.
Важно
Диск должен быть размещен в той же зоне доступности, что и узлы группы, на которой будут работать поды.
-
Получите идентификатор диска (колонка
ID
):yc compute disk list
Результат:
+----------------------+------+------------+-------------------+--------+--------------+-------------+ | ID | NAME | SIZE | ZONE | STATUS | INSTANCE IDS | DESCRIPTION | +----------------------+------+------------+-------------------+--------+--------------+-------------+ | ef3ouo4sgl86740ridn6 | k8s | 4294967296 | ru-central1-a | READY | | | +----------------------+------+------------+-------------------+--------+--------------+-------------+
-
-
Посмотрите доступные классы хранилищ и выберите подходящий:
kubectl get storageclass
Результат:
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
Примечание
Не путайте классы хранилищ Kubernetes и типы дисков Yandex Compute Cloud.
Создайте объект PersistentVolume
-
Сохраните спецификацию для создания объекта
PersistentVolume
в YAML-файл с названиемtest-pv.yaml
.Подробнее о спецификации читайте в документации Kubernetes.
При указании параметра
spec.capacity.storage
убедитесь, что задан точный объем диска. Container Storage Interface не обеспечивает проверку объема диска для статически подготовленных томов.Для создания объекта
PersistentVolume
на основе существующего облачного диска в параметреvolumeHandle
укажите уникальный идентификатор необходимого диска.Примечание
Если не указать параметр
storageClassName
, будет использован класс хранилищ по умолчанию:yc-network-hdd
. Как изменить класс по умолчанию читайте в разделе Измените класс хранилищ по умолчанию.Подробнее о спецификации для создания объекта
PersistentVolumeClaim
читайте в документации Kubernetes.apiVersion: v1 kind: PersistentVolume metadata: name: <имя PersistentVolume> spec: capacity: storage: <размер PersistentVolume> accessModes: - ReadWriteOnce storageClassName: "yc-network-hdd" csi: driver: disk-csi-driver.mks.ycloud.io fsType: ext4 volumeHandle: <идентификатор диска> storageClassName: <имя класса хранилища>
-
Выполните команду:
kubectl create -f test-pv.yaml
Результат:
persistentvolume/<имя PersistentVolume> created
-
Посмотрите информацию о созданном объекте
PersistentVolume
:kubectl describe persistentvolume <имя PersistentVolume>
Результат:
Name: <имя PersistentVolume> Labels: <none> Annotations: <none> Finalizers: [kubernetes.io/pv-protection] StorageClass: <имя класса хранилища> Status: Available ...
Создайте объект PersistentVolumeClaim
-
Сохраните спецификацию для создания объекта
PersistentVolumeClaim
YAML-файл с названиемtest-claim.yaml
.Подробнее о спецификации читайте в документации Kubernetes.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <имя PersistentVolumeClaim> spec: accessModes: - ReadWriteOnce resources: requests: storage: <размер PersistentVolumeClaim> storageClassName: <имя класса хранилища> volumeName: <имя PersistentVolume>
Примечание
Размер
PersistentVolumeClaim
должен быть меньше или равен размеруPersistentVolume
.-
Выполните команду:
kubectl create -f test-claim.yaml
Результат:
persistentvolumeclaim/<имя PersistentVolumeClaim> created
-
Посмотрите информацию о созданном
PersistentVolumeClaim
:kubectl describe persistentvolumeclaim <имя PersistentVolumeClaim>
Результат:
Name: <имя PersistentVolumeClaim> Namespace: default StorageClass: <имя класса хранилища> Status: Bound Volume: <имя PersistentVolume> ...
-
Создайте под со статически подготовленным томом
-
Создайте файл
test-pod.yaml
с манифестом пода, использующегоPersistentVolumeClaim
: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>
Подробнее о спецификации читайте в документации Kubernetes.
-
Выполните команду:
kubectl create -f test-pod.yaml
Результат:
pod/test-pod created
-
Посмотрите информацию о созданном поде:
kubectl describe pod test-pod
Результат:
Name: test-pod Namespace: default Priority: 0 ... ---- ------ ---- ---- ------- Normal Scheduled 20m default-scheduler Successfully assigned default/test-pod to cl1jtehftl7q1umj18ll-icut Normal SuccessfulAttachVolume 20m attachdetach-controller AttachVolume.Attach succeeded for volume "<имя PersistentVolume>"
После этого рядом с используемым диском в консоли управления в Compute Cloud в разделе Диски появится надпись Подключен.
Как удалить том
Диски в Compute Cloud не удаляются автоматически при удалении PersistentVolume
. Чтобы полностью удалить том:
-
Удалите объект
PersistentVolumeClaim
:kubectl delete pvc <идентификатор объекта PersistentVolumeClaim>
-
Удалите объект
PersistentVolume
:kubectl delete pv <идентификатор объекта PersistentVolume>
-
Удалите диск в Compute Cloud, связанный с объектом
PersistentVolume
.