Использование предварительной версии контейнера Azure служба хранилища с управляемыми дисками Azure

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

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

  • Если у вас нет подписки 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, кластер AKS должен иметь пул узлов не менее трех виртуальных машин общего назначения, таких как standard_d4s_v5 для узлов кластера, каждый из которых содержит не менее четырех виртуальных ЦП (виртуальных ЦП).

Доступность в регионах

Контейнер Azure служба хранилища доступен только для подмножества регионов Azure:

  • Северная часть ЮАР (Африка)
  • "Восточная Австралия" (Азиатско-Тихоокеанский регион);
  • (Азиатско-Тихоокеанский регион) Восточная Азия
  • (Азиатско-Тихоокеанский регион) Восточная Япония
  • (Азиатско-Тихоокеанский регион) Республика Корея, центральный регион
  • Юго-Восточная Азия (Азиатско-Тихоокеанский регион)
  • "Центральная Индия" (Азиатско-Тихоокеанский регион);
  • (Европа) Центральная Франция
  • Центрально-Западная Германия (Европа)
  • "Северная Европа" (Европа);
  • "Западная Европа" (Европа).
  • (Европа) Южная часть Соединенного Королевства
  • (Европа) Центральная Швеция;
  • Северная Швейцария (Европа)
  • Северная часть ОАЭ (Ближний Восток)
  • (Северная Америка) Восточная часть США;
  • (Северная Америка) Восточная часть США 2;
  • (Северная Америка) Западная часть США
  • (Северная Америка) Западная часть США 2;
  • (Северная Америка) Западная часть США 3;
  • (Северная Америка) Центральная часть США;
  • (Северная Америка) Северная часть США
  • (Северная Америка) Центрально-южная часть США;
  • (Северная Америка) Западная часть США
  • (Северная Америка) Центральная Канада;
  • (Северная Америка) Восточная Канада
  • Южная Бразилия (Южная Америка)

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

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

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

Внимание

Если вы хотите использовать собственные ключи для шифрования томов вместо использования ключей, управляемых Корпорацией Майкрософт, не создавайте пул носителей, выполнив действия, описанные в этом разделе. Вместо этого перейдите к разделу "Включить шифрование на стороне сервера" с помощью ключей , управляемых клиентом, и следуйте инструкциям.

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

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

  2. Вставьте приведенный ниже код. Значение имени пула носителей может быть любым нужным. Для skuName укажите уровень производительности и избыточности. Допустимые значения: Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS и StandardSSD_ZRS. Для хранилища укажите объем емкости хранилища для пула в Gi или Ti. Сохраните файл.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    
  3. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    

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

    storagepool.containerstorage.azure.com/azuredisk created
    

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

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

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

Создание предварительно подготовленного пула носителей

Если у вас уже подготовленные управляемые диски Azure, можно создать предварительно подготовленный пул носителей с помощью этих дисков. Так как диски уже подготовлены, вам не нужно указывать skuName или емкость хранилища при создании пула носителей.

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

  1. Войдите на портал Azure.

  2. Для каждого используемого диска перейдите к управляемому диску Azure и выберите Параметры> Properties. Скопируйте всю строку в идентификатор ресурса и поместите ее в текстовый файл.

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

  4. Вставьте приведенный ниже код. Значение имени пула носителей может быть любым нужным. Замените <resource-id> идентификатором ресурса каждого управляемого диска. Сохраните файл.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    

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

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

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

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

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

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

Если вы уже создали пул носителей или предпочитаете использовать ключи шифрования, управляемые корпорацией Майкрософт, пропустите этот раздел и перейдите к просмотру доступных классов хранилища.

Все данные в учетной записи хранения Azure шифруются неактивных данных. По умолчанию данные шифруются с помощью ключей, управляемых Майкрософт. Для получения большего контроля над ключами шифрования можно предоставить управляемые клиентом ключи (CMK) для шифрования постоянных томов, создаваемых из пула носителей дисков Azure.

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

При создании пула носителей необходимо определить параметры CMK. Обязательные параметры шифрования CMK:

  • keyVersion указывает версию ключа для использования.
  • keyName — это имя ключа.
  • keyVaultUri — это универсальный идентификатор ресурса Azure Key Vault, например https://user.vault.azure.net
  • Удостоверение указывает управляемое удостоверение с доступом к хранилищу, например /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

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

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

  2. Вставьте следующий код, укажите необходимые параметры и сохраните файл. Значение имени пула носителей может быть любым нужным. Для skuName укажите уровень производительности и избыточности. Допустимые значения: Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS и StandardSSD_ZRS. Для хранилища укажите объем емкости хранилища для пула в Gi или Ti. Обязательно укажите параметры шифрования CMK.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

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

    storagepool.containerstorage.azure.com/azuredisk created
    

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

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

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

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

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

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

Внимание

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

Создание заявки на доступ к постоянному тому

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

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

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. Примените файл манифеста YAML для создания ПВХ.

    kubectl apply -f acstor-pvc.yaml
    

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

    persistentvolumeclaim/azurediskpvc created
    

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

    kubectl describe pvc azurediskpvc
    

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

Развертывание модуля 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: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. Примените файл манифеста YAML для развертывания модуля pod.

    kubectl apply -f acstor-pod.yaml
    

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

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

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  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, использующий диски Azure в качестве хранилища, и его можно использовать для рабочих нагрузок Kubernetes.

Отключение и повторное подключение постоянного тома

Чтобы отключить постоянный том, удалите модуль pod, к которому подключен постоянный том. Замените <pod-name> именем pod, например fiopod.

kubectl delete pods <pod-name>

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

Чтобы проверка, к которому привязан постоянный том, к которому привязано утверждение постоянного тома, выполните командуkubectl get pvc <persistent-volume-claim-name>.

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

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

Примечание.

Расширение пула носителей может увеличить затраты на контейнер Azure служба хранилища и диски Azure. См. страницу цен на контейнер Azure служба хранилища.

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

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

  2. Замените указанную запись хранилища в файле манифеста YAML требуемым значением. Это значение должно быть больше текущей емкости пула носителей. Например, если для спецификации задано storage: 1Tiзначение , измените его на storage: 2Ti. Если вы создали предварительно подготовленный пул носителей, не будет записи хранилища , так как пул носителей наследует размер емкости из предварительно подготовленных дисков Azure. Если запись хранилища не отображается в YAML, добавьте следующий код, указав нужную емкость хранилища, а затем сохраните файл манифеста:

    spec:
      resources:
        requests:
          storage: 2Ti
    
  3. Примените файл манифеста YAML для расширения пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    
  4. Выполните эту команду, чтобы проверка состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей.

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

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

  5. Запуск kubectl get sp -A и пул носителей должны отражать новый размер.

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

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

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

См. также