При развертывании приложений в CCE кластере обычно требуется постоянное объектное хранилище для данных сервиса. В сценариях, таких как миграция данных, может потребоваться повторное использование существующего OBS bucket вместо создания нового хранилища. В таких случаях вы можете вручную создать PV и PVC для объявления и привязки существующего тома хранилища. Этот подход обеспечивает точный контроль над сопоставлением ресурсов хранилища. В этом разделе описывается, как статически создать PV и PVC для существующего OBS bucket, обеспечивая постоянство данных и их совместное использование между рабочими нагрузками.
Чтобы статически создать OBS‑том, необходимо иметь существующий OBS bucket. Затем вы вручную создаёте PV и PVC для сопоставления и привязки ресурсов хранилища. Основной процесс выглядит следующим образом.
Статическое предоставление для существующих OBS Bucket | Описание |
|---|---|
|
|
Параметр | Описание |
|---|---|
Тип PVC | В этом примере выберите OBS. |
PVC Name | Введите имя PVC, которое должно быть уникальным в пространстве имён. |
Creation Method |
В этом примере выберите 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 |
ВНИМАНИЕ: Если 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.
Parameter | Description |
|---|---|
PVC | Выберите существующий том OBS. |
Mount Path | Введите путь монтирования, например, /tmp. Этот параметр указывает путь контейнера, в который будет смонтирован том данных. Не монтируйте том в системный каталог, такой как / или /var/run. Это может привести к ошибкам контейнера. Монтируйте том в пустой каталог. Если каталог не пуст, убедитесь, что в нём нет файлов, влияющих на запуск контейнера. В противном случае файлы будут заменены, что приведёт к сбоям при запуске контейнера или создании рабочей нагрузки. Если том смонтирован в каталог с высоким уровнем риска, используйте учётную запись с минимальными правами для запуска контейнера. В противном случае файлы с высоким уровнем риска на хосте могут быть повреждены. |
Subpath | Введите подкаталог тома хранилища и смонтируйте путь в томе к контейнеру. Таким образом, разные папки одного тома хранилища могут использоваться в одном pod. tmp, например, указывает, что данные в пути монтирования контейнера хранятся в папке tmp тома хранилища. Если этот параметр оставить пустым, по умолчанию будет использоваться корневой путь. |
Permission |
|
В этом примере диск смонтирован в путь /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 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 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 of the OBS volume. Ensure that the enterprise project ID specified during PVC creation is the same as that in the PV. Otherwise, the PVC cannot be bound to the 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 | Да | Регион, в котором развернут бакет OBS. Подробную информацию о его значении см. в Regions and Endpoints. |
everest.io/enterprise-project-id | Нет | Введите ID enterprise project, в котором создан том OBS. Это применимо только к enterprise accounts с включенными enterprise projects. Если указан ID enterprise project, при создании PVC необходимо указать тот же ID enterprise project. В противном случае PVC не может привязаться к PV. How to obtain: В консоли OBS выберите Buckets или Parallel File Systems в панели навигации. Нажмите имя OBS bucket, чтобы открыть страницу его деталей. В области 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 и свяжите их с базовыми ресурсами хранилища. |
хранилище | Да | Ёмкость хранилища, в Gi. Для OBS этот параметр используется только для проверки. Он не должен быть пустым или 0, а его значение фиксировано на 1. Любое установленное вами значение не вступит в силу. |
storageClassName | Да | Имя 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 of the OBS volume. Ensure that the enterprise project ID specified during PVC creation is the same as that in the PV. Otherwise, the PVC cannot be bound to the PV.spec:accessModes:- ReadWriteMany # The value must be ReadWriteMany for OBS volumes.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 | Нет | Имя пользовательского секрета, указанного в PV. |
csi.storage.k8s.io/node-publish-secret-namespace | Нет | Пространство имён пользовательского секрета, указанного в PV. |
everest.io/enterprise-project-id | Нет | Введите идентификатор проекта предприятия, в котором создан том OBS. Применяется только к корпоративным аккаунтам с включёнными проектами предприятия. Как получить: В консоли OBS выберите Buckets или Parallel File Systems в панели навигации. Нажмите имя OBS bucket, чтобы открыть страницу его сведений. В области Basic Information найдите проект предприятия и нажмите его, чтобы открыть консоль проекта предприятия. Скопируйте соответствующий идентификатор, чтобы получить ID проекта предприятия, к которому относится объектное хранилище. |
хранилище | Да | Запрашиваемая ёмкость в PVC, в Gi. Для OBS этот параметр используется только для проверки. Он не должен быть пустым или 0, а его значение фиксировано на 1. Любое установленное значение не вступит в силу. |
storageClassName | Да | Имя StorageClass, которое должно совпадать с StorageClass PV в 1. Имя StorageClass, которое равно csi-obs для OBS‑тома. |
volumeName | Да | Имя 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
Если для обоих pods не возвращается результат, файл в пути /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
статический файл сохраняется, указывая, что данные могут храниться постоянно.
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 | Измените политику возврата PV. |
|