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

Использование EVS Disk через динамический PV

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

CCE позволяет указать StorageClass для автоматического создания EVS disk и соответствующего PV. Эта функция применима, когда базовый том хранения недоступен.

Требования

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

Ограничения

  • EVS disks нельзя подключать между AZ и нельзя использовать несколькими рабочими нагрузками, несколькими pod‑ами одной рабочей нагрузки или несколькими задачами. Data sharing общего диска не поддерживается между узлами в кластере CCE. Если EVS disk подключён к нескольким узлам, могут возникнуть конфликты ввода‑вывода и конфликты кэша данных. Поэтому при создании Deployment, использующего EVS disks, выбирайте только один pod.
  • Для кластеров версии ниже v1.19.10, если используется политика HPA для масштабирования рабочей нагрузки с подключёнными EVS volumes, существующие pod‑ы не могут выполнять чтение или запись, когда новый pod планируется на другой узел.

    Для кластеров v1.19.10 и новее, если используется политика HPA для масштабирования рабочей нагрузки с подключёнными EVS volumes, новый pod не может быть запущен, поскольку EVS disks нельзя подключать.

  • К ресурсным тегам можно добавить динамически созданные EVS disks. После создания EVS disks ресурсные теги нельзя обновлять в CCE. Чтобы обновить их, перейдите в Cloud Server Console > Elastic Volume Service. Если вы используете существующий EVS disk для создания PV, также необходимо добавить или обновить ресурсные теги на странице Elastic Volume Service в Cloud Server Console.

Динамическое создание EVS Disk с помощью консоли

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

    1. Choose Storage in the navigation pane. In the right pane, click the PVCs tab. Click Create PVC in the upper right corner. On the slide-out panel, configure PVC parameters.

      Параметр

      Описание

      Тип PVC

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

      Имя PVC

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

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

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

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

      Storage Classes

      Стандартные StorageClasses для дисков EVS: csi-disk и csi-disk-topology.

      ПРИМЕЧАНИЕ:

      Если вы используете StorageClass csi-disk (EVS), PVC и PV будут созданы немедленно. Диск EVS создаётся вместе с PV, после чего PVC привязывается к PV.

      Если вы используете StorageClass csi-disk-topology (EVS, создаваемый с задержкой), PV не будет создан сразу при создании PVC. Сначала планируются pod‑ы, которые будут связаны с PVC, затем создаются диск EVS и PV, и в конце PV привязывается к PVC.

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

      (Optional) Storage Volume Name Prefix

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

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

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

      AZ

      Выберите AZ диска EVS. AZ должен совпадать с AZ узла кластера.

      ПРИМЕЧАНИЕ:

      Диск EVS может быть смонтирован только на узел в том же AZ. После создания диска EVS его AZ изменить нельзя.

      Disk Type

      Выберите тип диска EVS. Типы дисков EVS различаются в зависимости от регионов. Получите доступные типы EVS в консоли.

      Capacity (GiB)

      Ёмкость запрашиваемого тома хранилища.

      Access Mode

      Тома EVS поддерживают только ReadWriteOnce, что означает, что том хранилища может быть смонтирован на один узел в режиме чтения/записи. Подробнее см. Volume Access Modes.

      Encryption

      Настройте, следует ли шифровать базовое хранилище. Если вы выберете Enable, выберите целевой ключ или введите идентификатор ключа. Перед использованием шифрования проверьте, поддерживает ли регион, в котором находится EVS‑диск, шифрование дисков.

      Enterprise Project

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

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

      Resource Tag

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

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

      CCE automatically creates system tags CCE-Cluster-ID=<cluster-ID>, CCE-Cluster-Name=<cluster-name>, and CCE-Namespace=<namespace-name>. These tags cannot be modified.

      ПРИМЕЧАНИЕ:

      После создания динамического PV типа EVS, resource tags нельзя обновить в консоли CCE. Чтобы обновить эти resource tags, перейдите на страницу Elastic Volume Service в Cloud Server Console.

    2. Нажмите Create.

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

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

    1. Выберите Workloads в панели навигации. В правой панели нажмите вкладку StatefulSets.
    2. Click Create Workload in the upper right corner. On the displayed page, click Data Storage in the Container Information area under Container Settings and choose Add Volume > PVC.

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

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

      Параметр

      Описание

      PVC

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

      Том EVS может быть подключен только к одному workload.

      Mount Path

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

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

      ПРИМЕЧАНИЕ:

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

      Subpath

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

      Permission

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

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

      Note

      Необщий диск EVS может быть присоединён только к одному pod'у рабочей нагрузки. Если существует несколько pod'ов, дополнительные pod'ы не могут запуститься корректно. Убедитесь, что количество pod'ов рабочей нагрузки равно 1, если присоединён диск EVS.

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

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

Динамическое создание диска EVS с помощью kubectl

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

    1. Создайте файл pvc-evs-auto.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc-evs-auto
      namespace: default
      annotations:
      everest.io/disk-volume-type: SAS # EVS disk type
      everest.io/crypt-key-id: <your_key_id> # (Optional) Encryption key ID. Mandatory for an encrypted disk.
      everest.io/enterprise-project-id: <your_enterprise_project_id> # (Optional) Enterprise project ID of the new EVS disk
      everest.io/disk-volume-tags: '{"key1":"value1","key2":"value2"}' # (Optional) Custom resource tags
      everest.io/csi.volume-name-prefix: test # (Optional) Volume name prefix of the automatically-created underlying storage
      labels:
      failure-domain.beta.kubernetes.io/region: <your_region> # Region of the node where the application is to be deployed
      failure-domain.beta.kubernetes.io/zone: <your_zone> # AZ of the node where the application is to be deployed
      spec:
      accessModes:
      - ReadWriteOnce # The value must be ReadWriteOnce for EVS disks.
      resources:
      requests:
      storage: 10Gi # EVS disk capacity, ranging from 1 to 32768
      storageClassName: csi-disk # The StorageClass is EVS.
      Table 2 Ключевые параметры

      Параметр

      Обязательно

      Описание

      failure-domain.beta.kubernetes.io/region

      Да

      Регион, в котором расположен кластер.

      Для получения подробной информации о его значении см. Regions and Endpoints.

      failure-domain.beta.kubernetes.io/zone

      Да

      AZ, в которой создаётся EVS‑том. Она должна быть той же AZ, что запланирована для рабочей нагрузки.

      Для получения подробной информации о его значении см. Regions and Endpoints.

      everest.io/disk-volume-type

      Да

      Тип EVS‑тома. Все буквы в верхнем регистре.

      • SAS: Высокий I/O
      • SSD: Ультра‑высокий I/O
      • ESSD: Экстремальный SSD

      everest.io/crypt-key-id

      Нет

      Этот параметр обязателен, когда диск EVS зашифрован. Укажите идентификатор ключа шифрования, выбранный при создании диска EVS. Вы можете использовать пользовательский ключ или ключ по умолчанию с именем evs/default.

      Чтобы получить идентификатор ключа, войдите в DEW console, найдите ключ для шифрования и скопируйте идентификатор ключа.

      everest.io/enterprise-project-id

      No

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

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

      everest.io/disk-volume-tags

      No

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

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

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

      CCE автоматически создает системные теги CCE-Cluster-ID=\u003ccluster-ID\u003e, CCE-Cluster-Name=\u003ccluster-name\u003e, и CCE-Namespace=\u003cnamespace-name\u003e. Эти теги нельзя изменить.

      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. Значение — целое число в диапазоне от 1 до 32768.

      Если storage задан в виде десятичного числа, значение будет округлено в большую сторону для EVS‑диска. Например, если storage установлен в 10.1Gi, будет создан EVS‑диск объёмом 11 GiB.

      storageClassName

      Yes

      Имя StorageClass, которое равно csi-disk для EVS‑диска.

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

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

    1. Создайте файл с именем web-evs-auto.yaml. В этом примере том EVS монтируется в путь /data.
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
      name: web-evs-auto
      namespace: default
      spec:
      replicas: 1
      selector:
      matchLabels:
      app: web-evs-auto
      serviceName: web-evs-auto # Headless Service name
      template:
      metadata:
      labels:
      app: web-evs-auto
      spec:
      containers:
      - name: container-1
      image: nginx:latest # Replace it with the correct image path for your application.
      volumeMounts:
      - name: pvc-disk # 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-disk # Volume name, which is user-defined
      persistentVolumeClaim:
      claimName: pvc-evs-auto # Name of the created PVC
      ---
      apiVersion: v1
      kind: Service
      metadata:
      name: web-evs-auto # Headless Service name
      namespace: default
      labels:
      app: web-evs-auto
      spec:
      selector:
      app: web-evs-auto
      clusterIP: None
      ports:
      - name: web-evs-auto
      targetPort: 80
      nodePort: 0
      port: 80
      protocol: TCP
      type: ClusterIP
    2. Выполните следующую команду для создания рабочей нагрузки, к которой монтируется том EVS:
      kubectl apply -f web-evs-auto.yaml

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

Проверка сохранения данных

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

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

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

      web-evs-auto-0 1/1 Running 0 38s

    2. Выполните следующую команду, чтобы проверить, смонтирован ли EVS volume в путь /data:
      kubectl exec web-evs-auto-0 -- df | grep data

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

      /dev/sdc 10255636 36888 10202364 0% /data
    3. Выполните следующую команду, чтобы проверить файлы в пути /data:
      kubectl exec web-evs-auto-0 -- ls /data

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

      lost+found

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

    kubectl exec web-evs-auto-0 -- touch /data/static

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

    kubectl exec web-evs-auto-0 -- ls /data

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

    lost+found
    static

  4. Выполните следующую команду, чтобы удалить pod с именем web-evs-auto-0:

    kubectl delete pod web-evs-auto-0

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

    pod "web-evs-auto-0" deleted

  5. После удаления контроллер StatefulSet автоматически создает реплику с тем же именем. Выполните следующую команду, чтобы проверить, изменились ли файлы в пути /data:

    kubectl exec web-evs-auto-0 -- ls /data

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

    lost+found
    static

    The static file is retained, indicating that the data in the EVS volume can be stored persistently.

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

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

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

Операция

Описание

Процедура

Увеличение ёмкости EVS‑диска

Быстро увеличьте ёмкость подключённого EVS‑тома в консоли CCE.

  1. Выберите Storage в панели навигации. В правой панели нажмите вкладку PVCs. Найдите целевой PVC и выберите More > Scale-out в столбце Operation.
  2. Введите добавляемую ёмкость и нажмите 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.

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

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

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

Синхронизация ёмкости PVC

Если базовое хранилище превышает размер PVC, измените ёмкость PVC в консоли CCE, чтобы она соответствовала новому размеру.

  1. Выберите Storage в панели навигации. В правой панели нажмите вкладку PVCs.
  2. Найдите целевой PVC и нажмите Synchronize в столбце Capacity, чтобы сделать ёмкость PVC согласованной с ёмкостью базового хранилища.

    Synchronize отображается только тогда, когда ёмкость базового хранилища превышает ёмкость PVC.