Облачная платформаAdvanced

Использование OBS Bucket через Dynamic PV

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

При развертывании приложений в CCE cluster обычно требуется постоянное объектное хранилище для данных сервисов. Без динамического выделения вам необходимо вручную создать bucket в OBS console и определить PV и PVC в кластере. Этот процесс сложен. Чтобы упростить его, можно использовать динамическое выделение томов: объявите StorageClass в вашем PVC, и OBS buckets автоматически создаются, при этом PV генерируются и привязываются по требованию. Это обеспечивает модель оплаты по использованию, объектное хранилище по запросу. В этом разделе описывается, как использовать объектное хранилище через динамические PV в CCE.

Как это работает

Dynamic OBS volume provisioning — это автоматизированный процесс, управляемый драйвером Everest CSI, который обрабатывает создание bucket, генерацию PV и привязку. Основной процесс выглядит следующим образом.

Динамическое выделение для OBS Buckets

Описание

  1. User initiation (шаг 1): Пользователь отправляет определение PVC. API server создает объект ресурса PVC.
  2. Trigger provisioning (шаги 2 и 3): PVC ссылается на StorageClass, вызывая механизм динамического выделения Everest.
  3. Authentication and creation (шаги 4–7): Everest запрашивает временные учетные данные у IAM (шаги 4 и 5) и использует их для вызова OBS API и динамического создания bucket (шаги 6 и 7).
  4. Automatic binding (шаги 8–9): Everest автоматически генерирует PV из информации о новом bucket, связывает его с соответствующим OBS bucket и привязывает к PVC.
  5. Mount and use (не показано на схеме): Когда нагрузка, ссылающаяся на PVC, планируется, Everest снова получает временные учетные данные у IAM и монтирует OBS bucket в указанный путь контейнера.

Ограничения

  • Если используются OBS volumes, группу владельца и разрешения точки монтирования изменить нельзя.
  • Каждый раз, когда OBS volume монтируется к нагрузке через PVC, в бэкенде создаётся резидентный процесс. При использовании нагрузкой большого количества OBS volumes или при чтении и записи большого количества файлов объектного хранилища резидентные процессы потребляют значительный объём памяти. Чтобы обеспечить стабильную работу нагрузки, убедитесь, что количество используемых OBS volumes не превышает запрошенную память. Например, если нагрузка запрашивает 4 GiB памяти, количество OBS volumes должно быть no more than 4.
  • Secure containers не поддерживают OBS volumes.
  • Жесткие ссылки не поддерживаются, когда монтируются общие Бакеты.
  • Режим только для чтения не поддерживается, когда OBS PVC монтируется к рабочей нагрузке.
  • OBS позволяет одному пользователю создать максимум 100 Бакетов. Если создаётся большое количество динамических PVC, количество Бакетов может превысить верхний предел, и больше нельзя создать Бакеты OBS. В этом случае используйте OBS, вызывая его API или SDK, и не монтируйте Бакеты OBS к рабочим нагрузкам.

Автоматическое создание Бакета OBS с помощью консоли

  1. Войдите в CCE console и нажмите cluster name, чтобы получить доступ к консоли кластера.
  2. Динамически создайте PVC и PV.

    1. Выберите Storage в панели навигации. В правой панели нажмите вкладку PVCs. Нажмите Create PVC в правом верхнем углу. На выдвижной панели настройте параметры PVC.

      Parameter

      Description

      PVC Type

      В этом примере выберите OBS.

      PVC Name

      Введите имя PVC, которое должно быть уникальным в пространстве имён.

      Creation Method

      • Если нет доступного базового хранилища, выберите Dynamically provision для создания PVC, PV и базового хранилища в консоли в каскадном режиме.
      • Если доступно базовое хранилище, создайте PV или используйте существующий PV для статического создания PVC. Для получения подробной информации см. Using an Existing OBS Bucket Through a Static PV.

      В этом примере выберите Dynamically provision.

      Storage Classes

      Имя StorageClass по умолчанию для томов OBS — csi-obs.

      Вы можете настроить StorageClass и сконфигурировать его политику возврата и режим привязки. Для получения подробной информации см. Basic StorageClass Settings.

      (Optional) Префикс имени тома хранилища

      Доступно только при версии кластера v1.23.14-r0, v1.25.9-r0, v1.27.6-r0, v1.28.4-r0 или более новой, а также при установленном в кластере Everest версии v2.4.15 или более новой.

      Этот параметр указывает имя базового хранилища, которое создаётся автоматически. Фактическое имя базового хранилища имеет формат «Префикс имени тома хранилища + PVC UID». Если параметр оставлен пустым, будет использован префикс по умолчанию pvc.

      Например, если префикс имени тома хранилища установлен в test, фактическое имя базового хранилища будет test-{UID}.

      Тип инстанса

      • Parallel file system: высокопроизводительная файловая система, предоставляемая OBS. Она обеспечивает задержку доступа на уровне миллисекунд, пропускную способность уровня TB/s и IOPS уровня миллионов.
      • Object bucket: обеспечивает надёжное, высокопроизводительное, безопасное и экономичное хранилище данных. Для него нет ограничений по количеству файлов или объёму хранилища.

      OBS Class

      Вы можете выбрать следующие типы object bucket:

      • Standard: Применяется, когда требуется частый доступ (в среднем несколько раз в месяц) к большому количеству «горячих» файлов или небольших файлов и необходим быстрый отклик доступа.
      • Infrequent access: Применяется, когда данные не часто запрашиваются (в среднем менее 12 раз в год), но требуется быстрый отклик доступа.

      Access Mode

      OBS volumes support only ReadWriteMany, указывая, что том хранения может быть смонтирован к нескольким узлам в режиме чтения/записи. Подробнее см. Volume Access Modes.

      AK/SK

      • Custom: Каждый пользователь IAM использует собственный ключ доступа (AK/SK). Вы можете использовать IAM для управления разрешениями отдельных пользователей на доступ к OBS. (Этот метод рекомендуется.) Подробнее см. Using a Custom Access Key (AK/SK) to Mount an OBS Volume.

        Можно выбрать только секреты с меткой secret.kubernetes.io/used-by = csi. Тип секрета должен быть cfe/secure-opaque. Если секрет недоступен, нажмите Create Secret.

        • Name: Введите имя секрета.
        • Namespace: Выберите пространство имён, в котором находится секрет.
        • Access Key (AK/SK)
          • Permanent: Загрузите файл ключа в формате .csv. Подробнее см. Obtaining Access Keys.

      • Global access secret (paas.longaksk): Все кластеры используют AK/SK учетной записи. Этот метод прост, но не поддерживает детальный контроль доступа. Если вы создаёте глобальный ключ доступа при использовании OBS‑томов в кластере, CCE создаёт секрет с именем paas.longaksk в пространстве имён kube-system для хранения глобального AK/SK. Этот секрет имеет область действия проекта. После использования глобального ключа доступа он автоматически предоставляется каждому кластеру в том же проекте. Вы можете отключить глобальный секрет доступа в Settings > Cluster Settings.

        Если кластер не использует глобальный секрет доступа, эта опция не отображается.

      CAUTION:

      Если AK/SK будет удалён или отключён случайно, контейнер не сможет использовать OBS‑том.

      Enterprise Project

      Корпоративный проект управляет несколькими ресурсами по категориям. Ресурсы и проекты в разных регионах облачных сервисов могут быть объединены в один корпоративный проект. Например, предприятие может классифицировать ресурсы по отделам или группам проектов и разместить соответствующие ресурсы в одном корпоративном проекте для единого управления.

      Этот параметр доступен только для корпоративных аккаунтов с включёнными корпоративными проектами.

      Resource Tag

      Вы можете добавлять теги ресурсов для классификации ресурсов. Это поддерживается только при версии Everest в кластере 2.4.204 или более новой.

      NOTE:

      После создания динамического PV типа OBS теги ресурсов нельзя обновить в консоли CCE. Чтобы обновить теги ресурсов OBS, перейдите в консоль OBS.

    2. Нажмите Create, чтобы создать PVC и PV.

      Вы можете выбрать Storage в панели навигации и просмотреть созданные PVC и PV на вкладках PVCs и PVs соответственно.

  3. Создайте приложение.

    1. Выберите Workloads в панели навигации. В правой панели нажмите вкладку Deployments.
    2. Нажмите Create Workload в правом верхнем углу. На отображаемой странице нажмите Data Storage в области Container Information под Container Settings и выберите Add Volume > PVC.

      Подключите и используйте тома хранилища. Подробную информацию о параметрах см. в Table 1. О других параметрах см. в Workloads.

      Table 1 Подключение тома хранилища

      Parameter

      Description

      PVC

      Select существующий OBS volume.

      Mount Path

      Enter путь монтирования, например, /tmp.

      Этот параметр указывает путь контейнера, в который будет монтироваться диск с данными. Не монтируйте диск в системный каталог, такой как / или /var/run. Это может привести к ошибкам контейнера. Монтируйте диск в пустой каталог. Если каталог не пуст, убедитесь, что в нём нет файлов, влияющих на запуск контейнера. В противном случае файлы будут заменены, что приведёт к сбоям при запуске контейнера или создании рабочей нагрузки.

      NOTICE:

      Если диск монтируется в каталог с высоким уровнем риска, используйте учётную запись с минимальными правами для запуска контейнера. В противном случае файлы с высоким уровнем риска на хосте могут быть повреждены.

      Subpath

      Введите под‑путь тома хранилища и смонтируйте путь в томе к контейнеру. Таким образом, разные папки одного тома хранилища могут использоваться в одном pod. tmp, например, указывает, что данные в пути монтирования контейнера хранятся в папке tmp тома хранилища. Если этот параметр оставить пустым, по умолчанию будет использоваться корневой путь.

      Permission

      • Read-only: Вы можете только читать данные в смонтированных дисках.
      • Read-write: Вы можете изменять диски с данными, смонтированные в путь. Новые записанные данные не будут перенесены при миграции контейнера, что может привести к потере данных.

      В этом примере диск смонтирован в путь /data контейнера. Данные контейнера, созданные в этом пути, хранятся в OBS volume.

    3. После настройки нажмите Create Workload.

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

Автоматическое создание OBS Бакета с помощью kubectl

  1. Используйте kubectl для доступа к кластеру.
  2. Используйте StorageClass для динамического создания PVC и PV.

    1. Создайте файл pvc-obs-auto.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc-obs-auto
      namespace: default
      annotations:
      everest.io/obs-volume-type: STANDARD # Object storage type
      csi.storage.k8s.io/fstype: obsfs # Instance type
      csi.storage.k8s.io/node-publish-secret-name: <your_secret_name> # Custom secret name
      csi.storage.k8s.io/node-publish-secret-namespace: <your_namespace> # Namespace of the custom secret
      everest.io/enterprise-project-id: <your_enterprise_project_id> # (Optional) Enterprise project ID of the new OBS volume
      everest.io/csi.volume-name-prefix: test # (Optional) Volume name prefix of the automatically-created underlying storage
      spec:
      accessModes:
      - ReadWriteMany # The value must be ReadWriteMany for OBS volumes.
      resources:
      requests:
      storage: 1Gi # OBS volume capacity
      storageClassName: csi-obs # The StorageClass is OBS.
      Table 2 Ключевые параметры

      Параметр

      Обязательно

      Описание

      everest.io/obs-volume-type

      Да

      OBS StorageClass.

      • Если fsType установлен в s3fs, поддерживаются стандартные бакеты (STANDARD) и бакеты с редким доступом (WARM).
      • Этот параметр недействителен, когда fsType установлен в obsfs.

      csi.storage.k8s.io/fstype

      Да

      Тип инстанса. Значение может быть obsfs или s3fs.

      • obsfs: параллельная файловая система
      • s3fs: объектный бакет

      csi.storage.k8s.io/node-publish-secret-name

      Нет

      Пользовательское имя секрета.

      (Рекомендуется) Выберите эту опцию, если хотите назначить разные разрешения пользователей для разных OBS‑устройств хранения. Для получения подробной информации см. Using a Custom Access Key (AK/SK) to Mount an OBS Volume.

      csi.storage.k8s.io/node-publish-secret-namespace

      Нет

      Пространство имён пользовательского секрета.

      everest.io/enterprise-project-id

      Нет

      Идентификатор проекта предприятия, в котором создаётся том OBS. Применяется только к корпоративным учётным записям с включёнными проектами предприятия.

      Чтобы получить идентификатор проекта предприятия, войдите в консоль EPS, нажмите название целевого проекта предприятия и скопируйте идентификатор проекта предприятия.

      everest.io/csi.volume-name-prefix

      No

      (Optional) Этот параметр доступен только когда версия кластера v1.23.14-r0, v1.25.9-r0, v1.27.6-r0, v1.28.4-r0 или более новая, и в кластере установлен Everest v2.4.15 или более новая.

      Этот параметр указывает имя базового хранилища, которое создаётся автоматически. Фактическое имя базового хранилища имеет формат «Префикс имени тома хранилища + PVC UID». Если параметр оставлен пустым, будет использован префикс по умолчанию pvc.

      Введите от 1 до 26 символов, которые не могут начинаться или заканчиваться дефисом (-). Допустимы только строчные буквы, цифры и дефисы (-).

      Например, если префикс имени тома хранилища установлен в test, фактическое имя базового хранилища будет test-{UID}.

      storage

      Yes

      Запрашиваемая ёмкость в PVC, в Gi.

      Для OBS этот параметр используется только для проверки. Он не должен быть пустым или 0, его значение фиксировано на 1. Любое установленное вами значение не вступит в силу.

      storageClassName

      Yes

      Имя StorageClass, которое равно csi-obs для OBS‑тома.

      everest.io/obs-volume-tags

      No

      (Optional) Этот параметр поддерживается, когда версия Everest в кластере 2.4.204 или более новая.

      Вы можете добавить теги ресурсов для классификации ресурсов.

      Вы можете создать predefined tags в консоли TMS. Эти теги доступны всем ресурсам, поддерживающим теги. Вы можете использовать эти теги для повышения эффективности создания тегов и миграции ресурсов.

    2. Выполните следующую команду для создания PVC:
      kubectl apply -f pvc-obs-auto.yaml

  3. Создайте приложение.

    1. Создайте файл с именем web-demo.yaml. В этом примере том OBS монтируется в путь /data.
      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: web-demo
      namespace: default
      spec:
      replicas: 2
      selector:
      matchLabels:
      app: web-demo
      template:
      metadata:
      labels:
      app: web-demo
      spec:
      containers:
      - name: container-1
      image: nginx:latest
      volumeMounts:
      - name: pvc-obs-volume # Volume name, which must be the same as the volume name in the volumes field
      mountPath: /data # Location where the storage volume is mounted
      imagePullSecrets:
      - name: default-secret
      volumes:
      - name: pvc-obs-volume # Volume name, which is user-defined
      persistentVolumeClaim:
      claimName: pvc-obs-auto # Name of the created PVC
    2. Выполните следующую команду для создания рабочей нагрузки, к которой монтируется том OBS:
      kubectl apply -f web-demo.yaml

      После создания рабочей нагрузки вы можете попробовать Verifying Data Persistence and Sharing.

Verifying Data Persistence and Sharing

  1. Просмотрите развернутое приложение и файлы.

    1. Выполните следующую команду для просмотра созданного pod:
      kubectl get pod -n <namespace> | grep web-demo

      Ожидаемый вывод:

      web-demo-846b489584-mjhm9 1/1 Running 0 46s
      web-demo-846b489584-wvv5s 1/1 Running 0 46s

    2. Выполните следующие команды последовательно, чтобы проверить файлы в пути /data pod'ов:
      kubectl exec -n <namespace> web-demo-846b489584-mjhm9 -- ls /data
      kubectl exec -n <namespace> web-demo-846b489584-wvv5s -- ls /data

      Если для обоих pod'ов не получен результат, файл в пути /data не существует.

  2. Выполните следующую команду для создания файла с именем static в пути /data:

    kubectl exec -n <namespace> web-demo-846b489584-mjhm9 -- touch /data/static

  3. Выполните следующую команду для проверки файлов в пути /data:

    kubectl exec -n <namespace> web-demo-846b489584-mjhm9 -- ls /data

    Ожидаемый вывод:

    static

  4. Проверьте сохранность данных.

    1. Выполните следующую команду, чтобы удалить pod с именем web-demo-846b489584-mjhm9:
      kubectl delete pod -n <namespace> web-demo-846b489584-mjhm9

      Ожидаемый вывод:

      pod "web-demo-846b489584-mjhm9" deleted

      После удаления контроллер Deployment автоматически создает реплику.

    2. Выполните следующую команду, чтобы просмотреть созданный pod:
      kubectl get pod -n <namespace> | grep web-demo

      Ожидаемый вывод выглядит следующим образом, где web-demo-846b489584-d4d4j — новый созданный pod:

      web-demo-846b489584-d4d4j 1/1 Running 0 110s
      web-demo-846b489584-wvv5s 1/1 Running 0 7m50s

    3. Выполните следующую команду, чтобы проверить, были ли изменены файлы в пути /data нового pod:
      kubectl exec -n <namespace> web-demo-846b489584-d4d4j -- ls /data

      Ожидаемый вывод:

      static

      Файл static сохраняется, что указывает на возможность постоянного хранения данных.

  5. Проверьте совместное использование данных.

    1. Выполните следующую команду, чтобы просмотреть созданный pod:
      kubectl get pod -n <namespace> | grep web-demo

      Ожидаемый вывод:

      web-demo-846b489584-d4d4j 1/1 Running 0 7m
      web-demo-846b489584-wvv5s 1/1 Running 0 13m

    2. Выполните приведённую ниже команду, чтобы создать файл с именем share в пути /data любого pod. В этом примере выберите pod с именем web-demo-846b489584-d4d4j.
      kubectl exec -n <namespace> web-demo-846b489584-d4d4j -- touch /data/share

      Проверьте файлы в пути /data pod.

      kubectl exec -n <namespace> web-demo-846b489584-d4d4j -- ls /data

      Ожидаемый вывод:

      share
      static
    3. Проверьте, существует ли файл share в пути /data другого pod (web-demo-846b489584-wvv5s), чтобы подтвердить совместное использование данных.
      kubectl exec -n <namespace> web-demo-846b489584-wvv5s -- ls /data

      Ожидаемый вывод:

      share
      static

      После создания файла в пути /data pod, если файл также создаётся в пути /data другого pod, два pod делятся одним и тем же томом.

Связанные операции

Вы также можете выполнить операции, перечисленные в Table 3.

Table 3 Связанные операции

Операция

Описание

Процедура

Обновление ключа доступа

Обновите ключ доступа к объектному хранилищу в консоли CCE.

  1. Выберите Storage в панели навигации. В правой панели нажмите вкладку PVCs. Найдите целевой PVC и выберите More > Update Access Key в столбце Operation.
  2. Загрузите файл ключа в формате .csv. Подробности см. в Obtaining Access Keys. Нажмите OK.
    ПРИМЕЧАНИЕ:

    После обновления глобального ключа доступа все pods, смонтированные к объектному хранилищу, использующему этот ключ доступа, могут быть доступны только после перезапуска.

Просмотр событий

Просмотрите имена событий, типы событий, количество вхождений, события Kubernetes, время первого появления и время последнего появления PVC или PV.

  1. Выберите Storage в панели навигации. В правой панели нажмите PVCs или PVs вкладку.
  2. Locate the target PVC or PV and click View Events in the Operation column to view events generated within one hour (events are retained for one hour).

Просмотр YAML‑файла

Просмотрите, скопируйте или загрузите YAML‑файл PVC или PV.

  1. Выберите Storage в панели навигации. В правой панели нажмите PVCs или PVs вкладку.
  2. Locate the target PVC or PV and click View YAML in the Operation column to view, copy, or download the YAML.

Редактирование политики возврата

Измените политику возврата PV.

  1. Choose Storage in the navigation pane. In the right pane, click the PVs tab.
  2. Locate the target PV and choose More > Edit Reclaim Policy in the Operation column.