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

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

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

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

  2. Создайте сервисный аккаунт.

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

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

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

  4. Установите плагин S3 CSI Driver.

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

  6. Подключитесь к кластеру Managed Kubernetes.

Шаг 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 — ледяной.

  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. Проверьте в сервисе Object Storage, что бакет создан.

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

    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

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

Evolution