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

Использование существующего OBS Бакет через статический PV

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

В этом разделе описывается, как использовать существующий бакет Object Storage Service (OBS) для статического создания PV и PVC для сохранения данных и совместного использования в нагрузках.

Требования

Ограничения

  • Если используются OBS‑тома, группу владельца и разрешения точки монтирования изменить нельзя.
  • Каждый раз, когда OBS‑том монтируется к нагрузке через PVC, в бэкэнде создаётся резидентный процесс. Если нагрузка использует слишком много OBS‑томов или читает и записывает большое количество файлов объектного хранилища, резидентные процессы будут потреблять значительный объём памяти. Чтобы обеспечить стабильную работу нагрузки, убедитесь, что количество используемых OBS‑томов не превышает запрошенную память. Например, если нагрузка запрашивает 4 ГиБ памяти, количество OBS‑томов должно быть no more than 4.
  • Secure containers не поддерживают OBS‑тома.
  • Жёсткие ссылки не поддерживаются при монтировании общих бакетов.
  • Режим только для чтения не поддерживается, когда OBS PVC монтируется к нагрузке.
  • Несколько PV могут использовать один и тот же OBS‑том хранения со следующими ограничениями:
    • Не монтируйте несколько PVC или PV, использующих один и тот же базовый OBS‑том, в один pod. Это приведёт к сбоям при запуске pod, так как не все PVC могут быть смонтированы из‑за одинакового значения volumeHandle.
    • Параметр persistentVolumeReclaimPolicy в PV должен быть установлен в Retain. В противном случае при удалении PV может быть удалён связанный базовый том. В этом случае другие PV, связанные с этим базовым томом, работают некорректно.
    • Если базовое хранилище используется многократно, необходимо поддерживать согласованность данных. Включите изоляцию и защиту на уровне приложения для ReadWriteMany, чтобы предотвратить запись несколькими клиентами в один и тот же файл, тем самым избегая перезаписи и потери данных.

Использование существующего OBS Bucket через консоль

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

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

      Параметр

      Описание

      Тип PVC

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

      Имя PVC

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

      Метод создания

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

      В этом примере выберите Create new, чтобы создать как PV, так и PVC в консоли.

      PVa

      Выберите существующий PV в кластере. Для получения подробной информации о том, как создать PV, см. "Creating a storage volume" в Related Operations.

      В этом примере вам не нужно указывать этот параметр.

      OBSb

      Нажмите Select OBS. На отображаемой странице выберите OBS‑том, соответствующий вашим требованиям, и нажмите OK.

      PV Nameb

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

      Access Modeb

      OBS‑тома поддерживают только ReadWriteMany, что означает, что том хранения может быть смонтирован на несколько узлов в режиме чтения/записи. Для получения подробной информации см. Volume Access Modes.

      Reclaim Policyb

      Вы можете выбрать Delete или Retain, чтобы указать reclaim policy базового хранилища при удалении PVC. Для получения подробной информации см. PV Reclaim Policy.

      ПРИМЕЧАНИЕ:

      Если несколько PV используют один и тот же OBS‑том, используйте Retain, чтобы предотвратить удаление базового тома вместе с PV.

      Access Key (AK/SK)b

      • Пользовательские ключи доступа: разные пользователи IAM используют собственные ключи доступа (AK/SK). Вы можете использовать IAM для управления правами пользователей 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‑томов в кластере, система создаст секрет с именем paas.longaksk в пространстве имён kube-system кластера. Этот секрет используется для хранения глобального AK/SK. Глобальный секрет доступа (paas.longaksk) используется проектом. После использования глобального секрета доступа он автоматически создаётся для каждого кластера в рамках того же проекта. Вы можете отключить глобальный секрет доступа в Settings > Cluster Settings.

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

      CAUTION:

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

      Mount Optionsb

      Введите пары ключ‑значение параметров монтирования. Для получения подробной информации см. Configuring OBS Mount Options.

      Note

      a: Параметр доступен, когда Creation Method установлен в значение Use existing.

      b: Параметр доступен, когда Creation Method установлен в значение Create new.

    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 Подключение тома хранения

      Параметр

      Описание

      PVC

      Выберите существующий том OBS.

      Путь монтирования

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

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

      ПРИМЕЧАНИЕ:

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

      Подпуть

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

      Разрешение

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

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

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

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

Использование существующего OBS Bucket через kubectl

  1. Используйте kubectl для доступа к кластеру.
  2. Создайте PV.

    1. Создайте файл pv-obs.yaml.
      apiVersion: v1
      kind: PersistentVolume
      metadata:
      annotations:
      pv.kubernetes.io/provisioned-by: everest-csi-provisioner
      everest.io/reclaim-policy: retain-volume-only # (Optional) The underlying volume is retained when the PV is deleted.
      name: pv-obs # PV name
      spec:
      accessModes:
      - ReadWriteMany # Access mode. The value must be ReadWriteMany for OBS volumes.
      capacity:
      storage: 1Gi # Storage capacity. This parameter is only for verification. It must not be empty or 0, but the specified size will not take effect.
      csi:
      driver: obs.csi.everest.io # Dependent storage driver for the mounting
      fsType: obsfs # Instance type
      volumeHandle: <your_volume_id> # Name of the OBS volume
      volumeAttributes:
      storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
      everest.io/obs-volume-type: STANDARD
      everest.io/region: <your_region> # Region where the OBS volume is
      everest.io/enterprise-project-id: <your_enterprise_project_id> # (Optional) Enterprise project ID. If an enterprise project is specified, you must specify the same enterprise project when creating a PVC. Otherwise, the PVC cannot bind to a PV.
      nodePublishSecretRef: # Custom secret of the OBS volume
      name: <your_secret_name> # Custom secret name
      namespace: <your_namespace> # Namespace of the custom secret
      persistentVolumeReclaimPolicy: Retain # Reclaim policy
      storageClassName: csi-obs # StorageClass name
      mountOptions: [] # Mount options
      Table 2 Ключевые параметры

      Параметр

      Обязательно

      Описание

      everest.io/reclaim-policy: retain-volume-only

      Нет

      Необязательно.

      Поддерживается только retain-volume-only.

      Этот параметр действителен только когда версия Everest 1.2.9 или новее и политика возврата Delete. Если политика возврата Delete и текущее значение retain-volume-only, связанный PV будет удалён, а базовый том хранения сохранён, когда PVC удаляется.

      fsType

      Да

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

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

      volumeHandle

      Да

      Имя тома OBS.

      everest.io/obs-volume-type

      Да

      Класс хранилища OBS.

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

      everest.io/region

      Yes

      Регион, в котором развернут бакет OBS.

      Подробную информацию о его значении см. в Regions and Endpoints.

      everest.io/enterprise-project-id

      No

      Этот параметр указывает ID enterprise project, в котором создаётся том OBS. Применяется только к enterprise accounts с включёнными enterprise projects.

      Если указан enterprise project, необходимо указать тот же enterprise project при создании PVC. В противном случае PVC не сможет привязаться к PV.

      How to obtain: В консоли OBS выберите Buckets или Parallel File Systems в панели навигации. Нажмите название бакета OBS, чтобы открыть страницу его сведений. В области Basic Information найдите enterprise project и нажмите его, чтобы открыть консоль enterprise project. Скопируйте соответствующий ID, чтобы получить ID enterprise project, к которому относится объектное хранилище.

      nodePublishSecretRef

      No

      Ключ доступа (AK/SK), используемый для монтирования тома объектного хранилища. Вы можете использовать AK/SK для создания секрета и монтировать его к PV. Подробную информацию см. в Using a Custom Access Key (AK/SK) to Mount an OBS Volume.

      Пример:

      nodePublishSecretRef:
      name: secret-demo
      namespace: default

      mountOptions

      Нет

      Параметры монтирования. Для получения подробной информации см. Configuring OBS Mount Options.

      persistentVolumeReclaimPolicy

      Да

      Политика возврата поддерживается, когда версия кластера 1.19.10 или новее, а версия Everest 1.2.9 или новее.

      Поддерживаются политики возврата Delete и Retain. Для получения подробной информации см. PV Reclaim Policy. Если несколько PV используют один и тот же OBS‑том, используйте Retain, чтобы предотвратить удаление базового тома вместе с PV.

      Delete:

      • Если everest.io/reclaim-policy не указана, оба ресурса PV и хранилища будут удалены при удалении PVC.
      • Если everest.io/reclaim-policy установлена в значение retain-volume-only, при удалении PVC PV будет удалён, а ресурсы хранилища сохранятся.

      Retain: При удалении PVC оба ресурса PV и базовое хранилище сохраняются. Их необходимо удалить вручную. После удаления PVC PV переходит в состояние Released и не может быть привязан к PVC повторно. Если требуется продолжить использование базовых ресурсов хранилища, сначала удалите PV. Затем создайте новый PV и PVC и свяжите их с базовыми ресурсами хранилища.

      storage

      Да

      Ёмкость хранилища, в Gi.

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

      storageClassName

      Yes

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

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

  3. Создайте PVC.

    1. Создайте файл pvc-obs.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc-obs
      namespace: default
      annotations:
      volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
      everest.io/obs-volume-type: STANDARD
      csi.storage.k8s.io/fstype: obsfs
      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. If an enterprise project is specified during PV creation, you must specify the same enterprise project when creating a PVC. Otherwise, the PVC cannot be bound to the PV.
      spec:
      accessModes:
      - ReadWriteMany # The value must be ReadWriteMany for OBS volumes.
      resources:
      requests:
      storage: 1Gi
      storageClassName: csi-obs # StorageClass name, which must be the same as that of the PV
      volumeName: pv-obs # PV name
      Table 3 Ключевые параметры

      Параметр

      Обязательно

      Описание

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

      No

      Имя пользовательского секрета, указанного в PV.

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

      No

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

      everest.io/enterprise-project-id

      No

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

      Как получить: В консоли OBS выберите Buckets или Parallel File Systems в панели навигации. Нажмите название OBS‑бакета, чтобы открыть страницу его сведений. В области Basic Information найдите проект предприятия и нажмите его, чтобы открыть консоль проекта предприятия. Скопируйте соответствующий ID, чтобы получить ID проекта предприятия, к которому относится объектное хранилище.

      storage

      Yes

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

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

      storageClassName

      Yes

      Имя StorageClass, которое должно совпадать с StorageClass PV в 1.

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

      volumeName

      Yes

      Имя PV, которое должно быть таким же, как имя PV в 1.

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

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

    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 # 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 подов:
      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 4.

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

Операция

Описание

Процедура

Создание тома хранения (PV)

Создайте PV в консоли CCE.

  1. Выберите Storage в панели навигации. В правой панели нажмите вкладку PVs. Нажмите Create PV в правом верхнем углу. На выдвижной панели настройте параметры.
    • Volume Type: Выберите OBS.
    • OBS: Нажмите Select OBS. На отображаемой странице выберите том OBS, соответствующий вашим требованиям, и нажмите OK.
    • PV Name: Введите имя PV, которое должно быть уникальным в кластере.
    • Access Mode: Тома SFS поддерживают только ReadWriteMany, что означает, что том хранения может быть смонтирован на несколько узлов в режиме чтения/записи. Для получения подробной информации см. Volume Access Modes.
    • Reclaim Policy: поддерживается Delete или Retain. Для получения подробной информации см. PV Reclaim Policy.
      ПРИМЕЧАНИЕ:

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

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

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

    • Mount Options: Введите пары ключ‑значение параметров монтирования. Для получения подробной информации см. Configuring OBS Mount Options.
  2. Нажмите Create.

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

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

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

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

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

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

  1. Выберите Storage в панели навигации. В правой панели нажмите PVCs или PVs вкладку.
  2. Найдите целевой PVC или PV и нажмите View Events в столбце Operation, чтобы просмотреть события, сгенерированные в течение одного часа (события хранятся в течение одного часа).

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

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

  1. Выберите Storage в панели навигации. В правой панели нажмите PVCs или PVs вкладку.
  2. Найдите целевой PVC или PV и нажмите View YAML в столбце Operation, чтобы просмотреть, скопировать или загрузить YAML.

Редактирование Reclaim Policy

Измените reclaim policy PV.

  1. Выберите Storage в панели навигации. В правой панели нажмите PVs вкладку.
  2. Найдите целевой PV и выберите More > Edit Reclaim Policy в столбце Operation.