В этом разделе описывается, как использовать существующий Object Storage Service (OBS) bucket для статического создания PV и PVC для сохранения данных и их совместного использования в workloads.
Параметр | Описание |
|---|---|
Тип PVC | В этом примере выберите OBS. |
Имя PVC | Введите имя PVC, которое должно быть уникальным в пространстве имён. |
Метод создания |
В этом примере выберите 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 |
CAUTION: Если AK/SK будет удалён или отключён случайно, контейнер не сможет использовать OBS‑том. |
Mount Optionsb | Введите пары ключ‑значение параметров монтирования. Для получения подробной информации см. Configuring OBS Mount Options. |
a: Параметр доступен, когда Creation Method установлен в Use existing.
b: Параметр доступен, когда Creation Method установлен в Create new.
Вы можете выбрать Storage в панели навигации и просмотреть созданные PVC и PV на вкладках PVCs и PVs соответственно.
Подключайте и используйте тома хранения. Для получения подробной информации о параметрах см. Table 1. Для остальных параметров см. Workloads.
Параметр | Описание |
|---|---|
PVC | Выберите существующий OBS volume. |
Mount Path | Введите путь монтирования, например, /tmp. Этот параметр указывает путь контейнера, в который будет монтироваться том данных. Не монтируйте том в системный каталог, например / или /var/run. Это может привести к ошибкам контейнера. Монтируйте том в пустой каталог. Если каталог не пуст, убедитесь, что в нём нет файлов, влияющих на запуск контейнера. В противном случае файлы будут заменены, что приведёт к сбоям при запуске контейнера или созданию workload. Если том монтируется в высокорисковый каталог, используйте учётную запись с минимальными правами для запуска контейнера. В противном случае высокорисковые файлы на хосте могут быть повреждены. |
Subpath | Введите под‑путь тома хранения и смонтируйте путь в томе к контейнеру. Таким образом, разные папки одного тома хранения могут использоваться в одном pod. tmp, например, указывает, что данные в пути монтирования контейнера хранятся в папке tmp тома хранения. Если параметр оставить пустым, по умолчанию будет использоваться корневой путь. |
Разрешение |
|
В этом примере диск монтируется в путь /data контейнера. Данные контейнера, созданные в этом пути, сохраняются в OBS‑томе.
После создания рабочей нагрузки данные в каталоге монтирования контейнера будут сохраняться постоянно. Проверьте хранилище, обратившись к Verifying Data Persistence and Sharing.
apiVersion: v1kind: PersistentVolumemetadata:annotations:pv.kubernetes.io/provisioned-by: everest-csi-provisionereverest.io/reclaim-policy: retain-volume-only # (Optional) The underlying volume is retained when the PV is deleted.name: pv-obs # PV namespec: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 mountingfsType: obsfs # Instance typevolumeHandle: <your_volume_id> # Name of the OBS volumevolumeAttributes:storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisionereverest.io/obs-volume-type: STANDARDeverest.io/region: <your_region> # Region where the OBS volume iseverest.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 volumename: <your_secret_name> # Custom secret namenamespace: <your_namespace> # Namespace of the custom secretpersistentVolumeReclaimPolicy: Retain # Reclaim policystorageClassName: csi-obs # StorageClass namemountOptions: [] # Mount options
Параметр | Обязательно | Описание |
|---|---|---|
everest.io/reclaim-policy: retain-volume-only | Нет | Необязательно. Поддерживается только retain-volume-only. Этот параметр действителен только при версии Everest 1.2.9 или более новой и когда политика возврата указана как Delete. Если политика возврата указана как Delete и текущее значение — retain-volume-only, связанный PV будет удалён, а базовый том хранения будет сохранён при удалении PVC. |
fsType | Да | Тип инстанса. Значение может быть obsfs или s3fs.
|
volumeHandle | Да | Имя тома OBS. |
everest.io/obs-volume-type | Да | OBS StorageClass.
|
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. Пример: |
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:
Retain: При удалении PVC как PV, так и базовые ресурсы хранилища сохраняются. Их необходимо удалить вручную. После удаления PVC PV переходит в состояние Released и не может быть привязан к PVC повторно. Если требуется продолжить использование базовых ресурсов хранилища, сначала удалите PV. Затем создайте новый PV и PVC и свяжите их с базовыми ресурсами хранилища. |
storage | Yes | Ёмкость хранилища, в Gi. Для OBS этот параметр используется только для проверки. Он не должен быть пустым или 0, его значение фиксировано на 1. Любое установленное значение не вступит в силу. |
storageClassName | Yes | Имя StorageClass, которое является csi-obs для тома OBS. |
kubectl apply -f pv-obs.yaml
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pvc-obsnamespace: defaultannotations:volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisionereverest.io/obs-volume-type: STANDARDcsi.storage.k8s.io/fstype: obsfscsi.storage.k8s.io/node-publish-secret-name: <your_secret_name> # Custom secret namecsi.storage.k8s.io/node-publish-secret-namespace: <your_namespace> # Namespace of the custom secreteverest.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: 1GistorageClassName: csi-obs # StorageClass name, which must be the same as that of the PVvolumeName: pv-obs # PV name
Параметр | Обязательно | Описание |
|---|---|---|
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. |
kubectl apply -f pvc-obs.yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: web-demonamespace: defaultspec:replicas: 2selector:matchLabels:app: web-demotemplate:metadata:labels:app: web-demospec:containers:- name: container-1image: nginx:latestvolumeMounts:- name: pvc-obs-volume # Volume name, which must be the same as the volume name in the volumes fieldmountPath: /data # Location where the storage volume is mountedimagePullSecrets:- name: default-secretvolumes:- name: pvc-obs-volume # Volume name, which is user-definedpersistentVolumeClaim:claimName: pvc-obs # Name of the created PVC
kubectl apply -f web-demo.yaml
После создания рабочей нагрузки вы можете попробовать Verifying Data Persistence and Sharing.
kubectl get pod -n <namespace> | grep web-demo
Ожидаемый вывод:
kubectl exec -n <namespace> web-demo-846b489584-mjhm9 -- ls /datakubectl exec -n <namespace> web-demo-846b489584-wvv5s -- ls /data
Если для обоих pod'ов не возвращается результат, файл в пути /data отсутствует.
kubectl exec -n <namespace> web-demo-846b489584-mjhm9 -- touch /data/static
kubectl exec -n <namespace> web-demo-846b489584-mjhm9 -- ls /data
Ожидаемый вывод:
static
kubectl delete pod -n <namespace> web-demo-846b489584-mjhm9
Ожидаемый вывод:
pod "web-demo-846b489584-mjhm9" deleted
После удаления контроллер Deployment автоматически создает реплику.
kubectl get pod -n <namespace> | grep web-demo
Ожидаемый вывод выглядит следующим образом, где web-demo-846b489584-d4d4j — новый pod:
kubectl exec -n <namespace> web-demo-846b489584-d4d4j -- ls /data
Ожидаемый вывод:
static
Файл static сохранён, что указывает на возможность постоянного хранения данных.
kubectl get pod -n <namespace> | grep web-demo
Ожидаемый вывод:
kubectl exec -n <namespace> web-demo-846b489584-d4d4j -- touch /data/share
Проверьте файлы в пути /data pod.
Ожидаемый вывод:
sharestatic
kubectl exec -n <namespace> web-demo-846b489584-wvv5s -- ls /data
Ожидаемый вывод:
sharestatic
После создания файла в пути /data pod, если файл также создан в пути /data другого pod, два pod'а используют один и тот же том.
Вы также можете выполнить операции, перечисленные в Table 4.
Операция | Описание | Процедура |
|---|---|---|
Создание тома хранения (PV) | Создайте PV в консоли CCE. |
|
Обновление ключа доступа | Обновите ключ доступа к объектному хранилищу в консоли CCE. |
|
Просмотр событий | Просмотрите имена событий, типы событий, количество вхождений, события Kubernetes, время первого вхождения и время последнего вхождения PVC или PV. |
|
Просмотр YAML‑файла | Просмотрите, скопируйте или загрузите YAML‑файл PVC или PV. |
|
Редактирование Reclaim Policy | Измените Reclaim Policy PV. |
|