В инструкции рассмотрим пример создания пода с постоянным хранилищем Object Storage, бакет которого будет создан динамически.
Проверьте, что в проекте подключен сервис Object Storage.
Для работы с объектным хранилищем на сервисный аккаунт необходимо назначить роли s3e.editor и s3e.viewer.
Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.
При создании кластера выберите сервисный аккаунт, созданный на предыдущем шаге. Можно также использовать сервисный аккаунт, который создается автоматически, тогда все необходимые роли будут назначены сразу.
Создайте SNAT-шлюз для доступа к образу, который будете развертывать на поде.
Создайте cloudru-csi-s3-pvc-dynamic.yaml и сохраните манифест:
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: cloudru-csi-s3-pvc-dynamicnamespace: defaultspec:accessModes:- ReadWriteManyresources:requests:storage: 10GistorageClassName: "cloudru-s3-standard"
Где:
spec.accessModes — режим доступа к тому. Необходимо обязательно указать ReadWriteMany.
storageClassName — название класса хранилища.
Возможные значения:
cloudru-s3-standard — стандартный;
cloudru-s3-single — однозонный;
cloudru-s3-cold — холодный;
cloudru-s3-ice — ледяной.
Вы можете использовать класс хранилищ, созданный самостоятельно.
spec.requests.storage — запрашиваемый размер тома.
Если вы указали класс хранилищ, созданный самостоятельно, с параметром unlimited: "" — неограниченным размером тома, все равно для spec.requests.storage необходимо указать любое произвольное значение, отличное от нуля.
Выполните команду:
kubectl create -f cloudru-csi-s3-pvc-dynamic.yaml
Убедитесь, что PVC создан:
kubectl describe pvc cloudru-csi-s3-pvc-dynamic
Отобразится подробная информация о созданном PVC.
Создайте cloudru-s3-pod-dynamic.yaml и сохраните манифест:
apiVersion: v1kind: Podmetadata:name: cloudru-s3-pod-dynamicspec:containers:- name: web-serverimage: nginxvolumeMounts:- mountPath: /pvname: s3-storagevolumes:- name: s3-storagepersistentVolumeClaim:claimName: cloudru-csi-s3-pvc-dynamic
Выполните команду:
kubectl create -f cloudru-s3-pod-dynamic.yaml
Проверьте статус пода:
kubectl get pod cloudru-s3-pod-dynamic
Результат:
NAME READY UP-TO-DATE AVAILABLE AGEcloudru-s3-pod-dynamic 1/1 1 1 85s
Проверьте в сервисе Object Storage, что бакет создан.
Чтобы узнать название бакета, выполните команду:
kubectl get pvc cloudru-csi-s3-pvc-dynamic
Результат:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGEcloudru-csi-s3-pvc-dynamic Bound pvc-ae5ec1db-8c20-4d0a-9a88-cac1cc433821 10Gi RWX cloudru-s3-standard <unset> 109s
Название бакета — в столбце VOLUME.
Создайте файл в контейнере /pv/s3_file:
kubectl exec -ti cloudru-s3-pod-dynamic -- touch /pv/s3_file
Проверьте, что файл попал в бакет.
Если вы завершили работу с примером, удалите ресурсы. Для этого выполните последовательно команды:
kubectl delete pod cloudru-s3-pod-dynamickubectl delete pvc cloudru-csi-s3-pvc-dynamic
Бакет удалится автоматически.