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

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

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

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

Предварительные требования

  • Вы создали кластер и установили дополнение CCE Container Storage (Everest) в кластере.
  • Для создания кластера с помощью команд убедитесь, что используется kubectl. Подробности см. Accessing a Cluster Using kubectl.

Ограничения

  • Если используются OBS‑тома, группу владельца и разрешения точки монтирования изменить нельзя.
  • Каждый раз, когда OBS‑том монтируется к workload через PVC, в бэкенде создаётся резидентный процесс. Если workload использует слишком много OBS‑томов или читает и записывает большое количество файлов объектного хранилища, резидентные процессы будут потреблять значительный объём памяти. Чтобы обеспечить стабильную работу workload, убедитесь, что количество используемых OBS‑томов не превышает запрошенную память. Например, если workload запрашивает 4 GiB памяти, количество OBS‑томов должно быть не более 4.
  • Secure containers не поддерживают OBS‑тома.
  • Hard links не поддерживаются при монтировании общих bucket.
  • Read-only не поддерживается, когда OBS PVC монтируется к workload.
  • Несколько PV могут использовать один и тот же OBS‑storage volume при соблюдении следующих ограничений:
    • Не монтируйте несколько 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, которое должно быть уникальным в пространстве имён.

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

      • Если базовое хранилище доступно, создайте 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, чтобы указать политику возврата базового хранилища при удалении 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 tab.
    2. Нажмите Create Workload в правом верхнем углу. На отображаемой странице нажмите Data Storage в области Container Information под Container Settings и выберите Add Volume > PVC.

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

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

      Параметр

      Описание

      PVC

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

      Mount Path

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

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

      ПРИМЕЧАНИЕ:

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

      Subpath

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

      Разрешение

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

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

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

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

Использование существующего OBS Бакета через 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.
      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 StorageClass.

      • Если 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 project.

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

      Как получить: В консоли 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

      No

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

      persistentVolumeReclaimPolicy

      Yes

      Политика возврата поддерживается, когда версия кластера … или более поздняя 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

      Yes

      Ёмкость хранилища, в 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.
      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 корпоративного проекта, к которому относится объектное хранилище.

      хранилище

      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 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 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.
    ПРИМЕЧАНИЕ:

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

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

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

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

Просмотр 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.