Постоянные тома
Постоянный том (Persistent Volume) используется для длительного хранения данных в кластере Managed Kubernetes. Для управления постоянными томами в Kubernetes используются объекты PersistentVolume (PV), PersistentVolumeClaim (PVC) и StorageClass.
Для постоянных томов в Managed Kubernetes рекомендуем использовать сетевые диски облачной платформы Vscale. Ты можешь создать постоянный том на локальном диске, но при удалении ноды данные будут удалены.
После создания постоянного тома ты можешь его увеличить и удалить.
Все постоянные тома отображаются в панели управления в разделе Облако → Диски.
Создать постоянный том
Создание через механизм Topology-Aware Volume Provisioning недоступно.
- Создай StorageClass или используй существующий StorageClass.
- Создай PersistentVolumeClaim.
- Создай под с постоянным томом.
1. Создать StorageClass
Для создания PersistentVolume используется объект StorageClass. StorageClass позволяет заранее описать конфигурацию постоянных томов, которые понадобятся в работе кластера.
При создании кластера будет автоматически создан один StorageClass с быстрым (fast) сетевым диском в том пуле, в котором расположена группа нод кластера.
На данный момент создание кластеров возможно только в пуле ru-9a.
Создай yaml-файл с манифестом для объекта StorageClass.
Пример манифеста StorageClass для быстрого диска в пуле ru-9a:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fast.ru-9a
provisioner: cinder.csi.openstack.org
parameters:
type: fast.ru-9a
availability: ru-9a
fsType: ext4
allowVolumeExpansion: trueЗдесь
fast.ru-9a
— тип StorageClass.Ты можешь использовать другие готовые манифесты StorageClass.
Примени манифест:
kubectl apply -f <storage-class.yaml>
Укажи
<storage-class.yaml>
— имя yaml-файла с манифестом для создания нового StorageClass.Убедись, что создан объект StorageClass:
kubectl get sc
В ответе появится список созданных объектов StorageClass:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
fast.ru-9a cinder.csi.openstack.org Delete Immediate true 16m
Тип StorageClass
Формат типа StorageClass — <тип диска>.<сегмент пула, в котором он расположен>
.
Типы дисков соответствуют сетевым дискам облачной платформы Vscale:
Например, для создания быстрого диска в сегменте пула ru-9a в описании StorageClass необходимо добавить:
parameters:
type: fast.ru-9a
availability: ru-9a
2. Создать PersistentVolumeClaim
Работа с томами возможна только в режиме ReadWriteOnce — один том может быть примонтирован только к одной ноде, при этом к постоянному тому может быть подключен только один под. При подключении нескольких подов к одному PV данные могут быть повреждены.
Создай yaml-файл с манифестом для объекта PersistentVolumeClaim (PVC).
Пример манифеста:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pv-claim
spec:
storageClassName: fast.ru-9a
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10GiПул в манифесте PVC должен совпадать с пулом ноды, к которой планируется подключить этот PVC. Если ты используешь несколько пулов для нод кластера и PVC, укажите в описании объектов Pod их привязку к пулу.
Примени манифест:
kubectl apply -f <pvc.yaml>
Укажи
<pvc.yaml>
— имя yaml-файла с манифестом для создания нового PersistentVolumeClaim.
3. Создать под с постоянным томом
Если ты создаешь под (Pod) с постоянным томом, то том сохраняется при удалении пода.
Создай yaml-файл с манифестом для создания нового пода с постоянным томом.
Пример манифеста:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: webservice
spec:
containers:
- name: nginx
image: library/nginx:1.17-alpine
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/var/www/html"
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pv-claimПри создании пода с параметром
securityContext.fsGroup
постоянный том не будет смонтирован с соответствующим GID. Чтобы решить эту проблему, в параметрах StorageClass добавьfsType: ext4
.Примени манифест:
kubectl apply -f <pod-with-pv.yaml>
Укажи
<pod-with-pv.yaml>
— имя yaml-файла с манифестом для создания нового пода с постоянным томом.Проверь, что PersistentVolume создан:
kubectl get pv
В ответе появится список PersistentVolumes:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-f171f94c-0d38-41be-947e-2f5d7e46a6c3 10Gi RWO Delete Bound default/my-pv-claim fast.ru-9a 97s
Увеличить постоянный том
- Проверь объем занятого пространства в PersistentVolumeClaim.
- Убедись, что квот достаточно для увеличения PersistentVolume.
- Разреши увеличение тома в настройках StorageClass.
- Удалить поды с томом, размер которого нужно увеличить.
- Измени манифест PersistentVolumeClaim
1. Проверить объем занятого пространства в PVC
Узнай объем занятого пространства в PVC:
kubectl -n <namespace> exec <pod_name> -- df -ah
Укажи:
<namespace>
— пространство имен, где расположен PVC;<pod_name>
— имя пода, который использует PVC.
2. Проверить квоты
Чтобы определить, что для увеличения постоянного тома достаточно ресурсов, проверь квоты и при необходимости сообщи в техническую поддержку, чтобы увеличить их.
3. Разрешить увеличение постоянного тома
В параметрах объекта StorageClass укажи allowVolumeExpansion: true
.
Пример манифеста:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-vol-default
provisioner: vendor-name.example/magicstorage
parameters:
resturl: "http://192.168.10.100:8080"
restuser: ""
secretNamespace: ""
secretName: ""
allowVolumeExpansion: true
reclaimPolicy: Delete
4. Удалить поды с томом, размер которого нужно увеличить
Проверь, какие поды используют PVC:
kubectl describe pvc <pvc_name>
Укажи
<pvc_name>
— имя PersistentVolumeClaim.Удали поды, которые используют PVC:
kubectl delete pod <pod_name>
Укажи
<pod_name>
— имя пода.
5. Изменить манифест PersistentVolumeClaim
Открой yaml-файл с манифестом для PersistentVolumeClaim и измените параметр
storage
:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pv-claim
spec:
storageClassName: fast.ru-9a
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10GiСоздай PersistentVolumeClaim — примените манифест:
kubectl apply -f <pvc_name>
Укажи
<pvc_name>
— имя PersistentVolumeClaim.Запусти под с использованием этого PVC.
Пример манифеста:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: webservice
spec:
containers:
- name: nginx
image: library/nginx:1.17-alpine
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/var/www/html"
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: my-pv-claimПроверь, что PersistentVolumeClaim создан:
kubectl get pvc
Удалить постоянный том
Если тебе больше не нужен постоянный том, удали PersistentVolumeClaim, который использовался для создания этого тома.
PV будет сразу удален, если в манифесте PVC указан параметр persistentVolumeReclaimPolicy: Delete
. Подробнее о политике возврата (Reclaim policy) в статье Reclaiming документации Kubernetes.
Проверь, какие поды привязаны к PVC:
kubectl describe pvc <pvc_name>
Укажи
<pvc_name>
— имя PersistentVolumeClaim.Удали поды, которые используют PVC:
kubectl delete pod <pod_name>
Укажи
<pod_name>
— имя пода.Удали PVC, к которому привязан PV:
kubectl delete pvc <pvc_name>
Укажи
<pvc_name>
— имя PersistentVolumeClaim.Проверь, что PersistentVolumeClaim удален:
kubectl get pvc