Облачная платформа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 volume, существующие pod‑ы не могут выполнять чтение или запись, когда новый pod планируется на другой узел.

    Для кластеров v1.19.10 и более новых, если используется политика HPA для масштабирования рабочей нагрузки с подключёнными EVS volume, новый 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. Выберите Storage в панели навигации. В правой панели нажмите вкладку PVCs. Нажмите Create PVC в правом верхнем углу. На выдвижной панели настройте параметры PVC.

      Параметр

      Описание

      Тип 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 и задать его политику возврата и режим привязки. Подробности см. в Creating a StorageClass Through the Console.

      (Необязательно) 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)

      Ёмкость запрашиваемого storage volume.

      Access Mode

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

      Encryption

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

      Enterprise Project

      Этот параметр доступен только для корпоративных аккаунтов с включёнными enterprise projects. enterprise project может быть проектом по умолчанию, проектом, в котором находится кластер, или проектом, указанным в StorageClass.

      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 ресурсы тегов нельзя обновить в консоли 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.

      Mount and use storage volumes. For details about the parameters, see Table 1. For other parameters, see Workloads.

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

      Параметр

      Описание

      PVC

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

      Том EVS может быть подключен только к одной рабочей нагрузке.

      Mount Path

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

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

      ПРИМЕЧАНИЕ:

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

      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
      everest.io/disk-volume-tags: '{"key1":"value1","key2":"value2"}' # (Optional) Custom resource tags
      everest.io/csi.volume-name-prefix: test # (Optional) Storage 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

      Да

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

      For details about its value, see Regions and Endpoints.

      failure-domain.beta.kubernetes.io/zone

      Yes

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

      For details about its value, see Regions and Endpoints.

      everest.io/disk-volume-type

      Yes

      Тип диска EVS. Все буквы записаны заглавными.

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

      everest.io/crypt-key-id

      No

      This parameter is mandatory when an EVS disk is encrypted. Enter the encryption key ID selected during EVS disk creation. You can use a custom key or the default key named evs/default.

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

      everest.io/enterprise-project-id

      Нет

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

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

      everest.io/disk-volume-tags

      Нет

      (Optional) Этот параметр поддерживается, когда версия 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.

      everest.io/csi.volume-name-prefix

      Нет

      (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.

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

    Файл static сохраняется, что указывает на возможность постоянного хранения данных в EVS volume.

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

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

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

Operation

Description

Procedure

Увеличение ёмкости диска 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.