Evolution
Тема интерфейса

Создать под с динамически подготовленным томом Object Storage

Эта статья полезна?

В инструкции рассмотрим пример создания пода с постоянным хранилищем Object Storage, бакет которого будет создан динамически.

Перед началом работы

  1. Проверьте, что в проекте подключен сервис Object Storage.

  2. Для работы с объектным хранилищем на сервисный аккаунт необходимо назначить роли s3e.editor и s3e.viewer.

  3. Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.

    При создании кластера выберите сервисный аккаунт, созданный на предыдущем шаге. Можно также использовать сервисный аккаунт, который создается автоматически, тогда все необходимые роли будут назначены сразу.

  4. Создайте SNAT-шлюз для доступа к образу, который будете развертывать на поде.

Шаг 1. Создайте Persistent Volume Claim

  1. Создайте cloudru-csi-s3-pvc-dynamic.yaml и сохраните манифест:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: cloudru-csi-s3-pvc-dynamic
    namespace: default
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 10Gi
    storageClassName: "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 необходимо указать любое произвольное значение, отличное от нуля.

  2. Выполните команду:

    kubectl create -f cloudru-csi-s3-pvc-dynamic.yaml
  3. Убедитесь, что PVC создан:

    kubectl describe pvc cloudru-csi-s3-pvc-dynamic

    Отобразится подробная информация о созданном PVC.

Шаг 2. Создайте под с динамически подготовленным томом

  1. Создайте cloudru-s3-pod-dynamic.yaml и сохраните манифест:

    apiVersion: v1
    kind: Pod
    metadata:
    name: cloudru-s3-pod-dynamic
    spec:
    containers:
    - name: web-server
    image: nginx
    volumeMounts:
    - mountPath: /pv
    name: s3-storage
    volumes:
    - name: s3-storage
    persistentVolumeClaim:
    claimName: cloudru-csi-s3-pvc-dynamic
  2. Выполните команду:

    kubectl create -f cloudru-s3-pod-dynamic.yaml
  3. Проверьте статус пода:

    kubectl get pod cloudru-s3-pod-dynamic

    Результат:

    NAME READY UP-TO-DATE AVAILABLE AGE
    cloudru-s3-pod-dynamic 1/1 1 1 85s

Шаг 3. Проверьте работу с хранилищем

  1. Чтобы узнать название бакета, выполните команду:

    kubectl get pvc cloudru-csi-s3-pvc-dynamic

    Результат:

    NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
    cloudru-csi-s3-pvc-dynamic Bound pvc-ae5ec1db-8c20-4d0a-9a88-cac1cc433821 10Gi RWX cloudru-s3-standard <unset> 109s

    Название бакета — в столбце VOLUME.

  2. Создайте файл в контейнере /pv/s3_file:

    kubectl exec -ti cloudru-s3-pod-dynamic -- touch /pv/s3_file
  3. Проверьте, что файл попал в бакет.

Шаг 4. Удалите ресурсы

Если вы завершили работу с примером, удалите ресурсы. Для этого выполните последовательно команды:

kubectl delete pod cloudru-s3-pod-dynamic
kubectl delete pvc cloudru-csi-s3-pvc-dynamic

Бакет удалится автоматически.