Использование хранилища контейнеров Azure с временным SSD

Хранилище контейнеров Azure — это облачная служба управления томами, развертывания и оркестрации, созданная изначально для контейнеров. В этой статье показано, как настроить хранилище контейнеров Azure для использования временных дисков с временным SSD в качестве внутреннего хранилища для рабочих нагрузок Kubernetes. В конце концов у вас будет модуль pod, использующий temp SSD в качестве хранилища.

Что такое временный диск?

Если приложению требуется задержка вложенного хранилища и не требуется устойчивость данных, можно использовать временный диск с хранилищем контейнеров Azure для удовлетворения ваших требований к производительности. Эфемерный означает, что диски развертываются на локальной виртуальной машине, где размещен кластер AKS, и не сохраняются в службе хранилища Azure. Данные будут потеряны на этих дисках при остановке или освобождении виртуальной машины.

Существует два типа эфемерного диска: локальный NVMe и временный SSD. NVMe предназначен для высокоскоростной передачи данных между хранилищем и ЦП. Выберите NVMe, если приложению требуется больше операций ввода-вывода в секунду или пропускная способность, чем временный SSD, или требуется больше места в хранилище. Помните, что хранилище контейнеров Azure поддерживает только синхронную репликацию данных для локального NVMe.

Благодаря эфемерной природе этих дисков хранилище контейнеров Azure поддерживает использование универсальных временных томов по умолчанию при использовании временных дисков. Однако некоторые варианты использования могут вызывать постоянные тома , даже если данные не устойчивы. Например, если вы хотите использовать существующие файлы YAML или шаблоны развертывания, которые жестко закодируются для использования постоянных томов, а рабочая нагрузка поддерживает репликацию на уровне приложения для устойчивости. В таких случаях можно обновить установку хранилища контейнеров Azure и добавить заметку acstor.azure.com/accept-ephemeral-storage=true в определение утверждения постоянного тома для поддержки создания постоянных томов из временных пулов носителей дисков.

Необходимые компоненты

  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

  • Для этой статьи требуется последняя версия (2.35.0 или более поздняя) Azure CLI. Узнайте , как установить Azure CLI. Если вы используете среду Bash в Azure Cloud Shell, то последняя версия уже установлена. Если вы планируете выполнять команды локально, а не в Azure Cloud Shell, обязательно запустите их с правами администратора. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".

  • Вам потребуется клиент командной строки Kubernetes. kubectl Он уже установлен, если вы используете Azure Cloud Shell или вы можете установить его локально, выполнив az aks install-cli команду.

  • Если вы еще не установили хранилище контейнеров Azure, следуйте инструкциям в статье "Использование хранилища контейнеров Azure с Служба Azure Kubernetes".

  • Проверьте, поддерживается ли целевой регион в регионах хранилища контейнеров Azure.

Выбор типа виртуальной машины, поддерживающей временный SSD

Временный диск доступен только в определенных типах виртуальных машин. Убедитесь, что вы выбрали тип виртуальной машины с временным SSD, например виртуальную машину серии Ev3 и Esv3.

Выполните следующую команду, чтобы получить тип виртуальной машины, используемый с пулом узлов. Замените <resource group> и <cluster name> собственными значениями. Вам не нужно указывать значения PoolName или VmSize, поэтому сохраните запрос, как показано здесь.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

Ниже приведен пример выходных данных.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

Рекомендуется использовать не менее четырех виртуальных ЦП, а каждый пул узлов имеет по крайней мере три узла.

Создание и присоединение универсальных временных томов

Выполните следующие действия, чтобы создать и присоединить универсальный эфемерный том.

1. Создание пула носителей

Сначала создайте пул носителей, который является логическим группированием хранилища для кластера Kubernetes, определив его в файле манифеста YAML.

Если вы включили хранилище контейнеров Azure с помощью az aks create или az aks update командами, возможно, у вас уже есть пул носителей. Используется kubectl get sp -n acstor для получения списка пулов носителей. Если у вас уже есть пул носителей, который вы хотите использовать, можно пропустить этот раздел и перейти к отображению доступных классов хранилища.

Выполните следующие действия, чтобы создать пул носителей с помощью temp SSD.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-storagepool.yamlнапример.

  2. Вставьте следующий код и сохраните файл. Значение имени пула носителей может быть любым нужным.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    

    После завершения создания пула носителей вы увидите следующее сообщение:

    storagepool.containerstorage.azure.com/ephemeraldisk-temp created
    

    Эту команду можно также запустить, чтобы проверить состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей. В этом примере значение будет временным.

    kubectl describe sp <storage-pool-name> -n acstor
    

При создании пула носителей хранилище контейнеров Azure создаст класс хранилища от вашего имени с помощью соглашения acstor-<storage-pool-name>об именовании.

2. Отображение доступных классов хранилища

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

Запустите kubectl get sc , чтобы отобразить доступные классы хранилища. Вы увидите класс хранилища с именем acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Внимание

Не используйте класс хранилища, помеченный внутренним. Это внутренний класс хранилища, необходимый для работы хранилища контейнеров Azure.

3. Развертывание модуля pod с универсальным временным томом

Создайте модуль pod с помощью Fio (гибкий модуль ввода-вывода Tester) для тестирования и моделирования рабочих нагрузок, использующего универсальный временный том.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pod.yamlнапример.

  2. Вставьте следующий код и сохраните файл.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-ephemeral-volume
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    При изменении размера хранилища томов убедитесь, что размер меньше доступной емкости временного диска одного узла. См. раздел "Проверка емкости диска temp узла".

  3. Примените файл манифеста YAML для развертывания модуля pod.

    kubectl apply -f acstor-pod.yaml
    

    Вы должны увидеть результат, аналогичный приведенному ниже:

    pod/fiopod created
    
  4. Убедитесь, что модуль pod запущен и что утверждение эфемерного тома успешно привязано к pod:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  5. Проверьте тестирование fio, чтобы просмотреть текущее состояние:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Теперь вы развернули модуль pod, использующий temp SSD в качестве хранилища, и его можно использовать для рабочих нагрузок Kubernetes.

Создание и присоединение постоянных томов

Чтобы создать постоянный том из эфемерного пула носителей дисков, необходимо включить заметку в утверждения постоянного тома (PVCs) в качестве защиты, чтобы гарантировать, что вы планируете использовать постоянные тома, даже если данные являются временными. Кроме того, перед созданием утверждений постоянного тома необходимо включить --ephemeral-disk-volume-type флаг со PersistentVolumeWithAnnotation значением в кластере.

Выполните следующие действия, чтобы создать и подключить постоянный том.

1. Обновление установки хранилища контейнеров Azure

Выполните следующую команду, чтобы обновить установку хранилища контейнеров Azure, чтобы разрешить создание постоянных томов из временных пулов носителей дисков.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option Temp --ephemeral-disk-volume-type PersistentVolumeWithAnnotation 

2. Создание пула носителей

Создайте пул носителей, который является логическим группированием хранилища для кластера Kubernetes, определив его в файле манифеста YAML.

Если вы включили хранилище контейнеров Azure с помощью az aks create или az aks update командами, возможно, у вас уже есть пул носителей. Используется kubectl get sp -n acstor для получения списка пулов носителей. Если у вас уже есть пул носителей, который вы хотите использовать, можно пропустить этот раздел и перейти к отображению доступных классов хранилища.

Выполните следующие действия, чтобы создать пул носителей с помощью temp SSD.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-storagepool.yamlнапример.

  2. Вставьте следующий код и сохраните файл. Значение имени пула носителей может быть любым нужным.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    

    После завершения создания пула носителей вы увидите следующее сообщение:

    storagepool.containerstorage.azure.com/ephemeraldisk-temp created
    

    Эту команду можно также запустить, чтобы проверить состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей. В этом примере значение будет временным.

    kubectl describe sp <storage-pool-name> -n acstor
    

При создании пула носителей хранилище контейнеров Azure создаст класс хранилища от вашего имени с помощью соглашения acstor-<storage-pool-name>об именовании.

3. Отображение доступных классов хранилища

Когда пул носителей готов к использованию, необходимо выбрать класс хранилища, чтобы определить, как хранилище динамически создается при создании и развертывании томов.

Запустите kubectl get sc , чтобы отобразить доступные классы хранилища. Вы увидите класс хранилища с именем acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Внимание

Не используйте класс хранилища, помеченный внутренним. Это внутренний класс хранилища, необходимый для работы хранилища контейнеров Azure.

4. Создание утверждения постоянного тома

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

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pvc.yamlнапример.

  2. Вставьте следующий код и сохраните файл. Значение ПВХ name может быть любым, что вы хотите.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
      annotations:
        acstor.azure.com/accept-ephemeral-storage: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    При изменении размера хранилища томов убедитесь, что размер меньше доступной емкости временного диска одного узла. См. раздел "Проверка емкости диска temp узла".

  3. Примените файл манифеста YAML для создания ПВХ.

    kubectl apply -f acstor-pvc.yaml
    

    Должен отобразиться примерно такой результат:

    persistentvolumeclaim/ephemeralpvc created
    

    Вы можете проверить состояние ПВХ, выполнив следующую команду:

    kubectl describe pvc ephemeralpvc
    

После создания ПВХ он готов к использованию pod.

5. Развертывание модуля pod и подключение постоянного тома

Создайте модуль pod с помощью Fio (гибкий средство тестирования ввода-вывода) для тестирования и моделирования рабочих нагрузок и укажите путь подключения для постоянного тома. Для имени утверждения используйте значение имени , используемое при создании утверждения постоянного тома.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pod.yamlнапример.

  2. Вставьте следующий код и сохраните файл.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  3. Примените файл манифеста YAML для развертывания модуля pod.

    kubectl apply -f acstor-pod.yaml
    

    Вы должны увидеть результат, аналогичный приведенному ниже:

    pod/fiopod created
    
  4. Убедитесь, что модуль pod запущен и что утверждение постоянного тома успешно привязано к pod:

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. Проверьте тестирование fio, чтобы просмотреть текущее состояние:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Теперь вы развернули модуль pod, использующий временный SSD, и его можно использовать для рабочих нагрузок Kubernetes.

Управление томами и пулами носителей

В этом разделе вы узнаете, как проверить доступную емкость эфемерного диска для одного узла и как развернуть или удалить пул носителей.

Проверка емкости диска temp узла

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

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

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-temp-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-temp-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

В этом примере доступная емкость временного диска для одного узла составляет 75031990272 байт или 69 ГиБ.

Развертывание пула носителей

Вы можете расширить пулы носителей, поддерживаемые временным SSD, чтобы быстро масштабироваться и без простоя. Сжатие пулов носителей в настоящее время не поддерживается.

Так как пул носителей, поддерживаемый временным диском, использует локальные ресурсы хранилища на узлах кластера AKS (виртуальных машинах), расширение пула носителей требует добавления другого узла в кластер. Следуйте этим инструкциям, чтобы развернуть пул носителей.

  1. Выполните следующую команду, чтобы добавить узел в кластер AKS. Замените <cluster-name>, <nodepool name> и <resource-group-name> собственными значениями. Чтобы получить имя пула узлов, выполните команду kubectl get nodes.

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. Запустите kubectl get nodes и увидите, что узел был добавлен в кластер.

  3. Запустите kubectl get sp -A и убедитесь, что емкость пула носителей увеличилась.

Удаление пула носителей

Если вы хотите удалить пул носителей, выполните следующую команду. Замените <storage-pool-name> именем пула носителей.

kubectl delete sp -n acstor <storage-pool-name>

См. также