Использование хранилища контейнеров 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 с Служба Azure Kubernetes".
Проверьте, поддерживается ли целевой регион в регионах хранилища контейнеров Azure.
- Чтобы использовать хранилище контейнеров Azure с управляемыми дисками Azure, кластер AKS должен иметь пул узлов не менее трех виртуальных машин общего назначения, таких как standard_d4s_v5 для узлов кластера, каждый из которых содержит не менее четырех виртуальных ЦП (виртуальных ЦП).
Создание и присоединение постоянных томов
Выполните следующие действия, чтобы создать и подключить постоянный том.
1. Создание пула носителей
Сначала создайте пул носителей, который является логическим группированием хранилища для кластера Kubernetes, определив его в файле манифеста YAML.
У вас есть следующие параметры для создания пула носителей:
- Создание динамического пула носителей
- Создание предварительно подготовленного пула носителей с помощью предварительно подготовленных управляемых дисков Azure
- Создание динамического пула носителей с помощью собственного ключа шифрования (необязательно)
Если вы включили хранилище контейнеров Azure с помощью az aks create
или az aks update
командами, возможно, у вас уже есть пул носителей. Используется kubectl get sp -n acstor
для получения списка пулов носителей. Если у вас уже есть пул носителей, который вы хотите использовать, можно пропустить этот шаг и перейти к отображению доступных классов хранилища.
Создание динамического пула носителей
Выполните следующие действия, чтобы создать динамический пул носителей для дисков Azure.
Используйте избранный текстовый редактор для создания файла манифеста YAML,
code acstor-storagepool.yaml
например.Вставьте приведенный ниже код. Значение имени пула носителей может быть любым нужным. Для 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
Если вы используете UltraSSD_LRS или PremiumV2_LRS диски, можно задать количество операций ввода-вывода в секунду и пропускную способность с помощью
IOPSReadWrite
MBpsReadWrite
параметров в определении пула носителей.IOPSReadWrite
относится к количеству операций ввода-вывода в секунду, разрешенных для дисков SSD категории "Ультра" и "Премиум" версии 2 LRS. Дополнительные сведения см. в разделе "Ультра- дисковое число операций ввода-вывода в секунду" и SSD уровня "Премиум" версии 2.MBpsReadWrite
относится к пропускной способности, разрешенной для дисков SSD категории "Ультра" и "Премиум" версии 2 LRS. MBps ссылается на миллионы байтов в секунду (МБ/с = 10^6 Байт в секунду). Дополнительные сведения см. в статье "Пропускная способность диска "Ультра" и пропускная способность SSD уровня "Премиум" версии 2.apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: azuredisk namespace: acstor spec: poolType: azureDisk: skuName: PremiumV2_LRS iopsReadWrite: 5000 mbpsReadWrite: 200 resources: requests: storage: 1Ti
Сохраните файл манифеста 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.
Войдите на портал Azure.
Для каждого диска, который вы хотите использовать, перейдите к управляемому диску Azure и выберите "Свойства параметров>". Скопируйте всю строку в идентификатор ресурса и поместите ее в текстовый файл.
Используйте избранный текстовый редактор для создания файла манифеста YAML,
code acstor-storagepool.yaml
например.Вставьте приведенный ниже код. Значение имени пула носителей может быть любым нужным. Замените
<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>
Примените файл манифеста 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 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
Выполните следующие действия, чтобы создать пул носителей с помощью собственного ключа шифрования. Все постоянные тома, созданные из этого пула носителей, будут зашифрованы с помощью одного и того же ключа.
Используйте избранный текстовый редактор для создания файла манифеста YAML,
code acstor-storagepool-cmk.yaml
например.Вставьте следующий код, укажите необходимые параметры и сохраните файл. Значение имени пула носителей может быть любым нужным. Для 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
Примените файл манифеста 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>
об именовании.
2. Отображение доступных классов хранилища
Когда пул носителей готов к использованию, необходимо выбрать класс хранилища, чтобы определить, как хранилище динамически создается при создании утверждений постоянного тома и развертывании постоянных томов.
Запустите kubectl get sc
, чтобы отобразить доступные классы хранилища. Вы увидите класс хранилища с именем acstor-<storage-pool-name>
.
Внимание
Не используйте класс хранилища, помеченный внутренним. Это внутренний класс хранилища, необходимый для работы хранилища контейнеров Azure.
3. Создание утверждения постоянного тома
Утверждение постоянного тома (PVC) используется для автоматической подготовки хранилища на основе класса хранения. Выполните следующие действия, чтобы создать ПВХ с помощью нового класса хранения.
Используйте избранный текстовый редактор для создания файла манифеста YAML,
code acstor-pvc.yaml
например.Вставьте следующий код и сохраните файл. Значение ПВХ
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
Примените файл манифеста YAML для создания ПВХ.
kubectl apply -f acstor-pvc.yaml
Должен отобразиться примерно такой результат:
persistentvolumeclaim/azurediskpvc created
Вы можете проверить состояние ПВХ, выполнив следующую команду:
kubectl describe pvc azurediskpvc
После создания ПВХ он готов к использованию pod.
4. Развертывание модуля pod и подключение постоянного тома
Создайте модуль pod с помощью Fio (гибкий средство тестирования ввода-вывода) для тестирования и моделирования рабочих нагрузок и укажите путь подключения для постоянного тома. Для имени утверждения используйте значение имени , используемое при создании утверждения постоянного тома.
Используйте избранный текстовый редактор для создания файла манифеста YAML,
code acstor-pod.yaml
например.Вставьте следующий код и сохраните файл.
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
Примените файл манифеста YAML для развертывания модуля pod.
kubectl apply -f acstor-pod.yaml
Вы должны увидеть результат, аналогичный приведенному ниже:
pod/fiopod created
Убедитесь, что модуль pod запущен и что утверждение постоянного тома успешно привязано к pod:
kubectl describe pod fiopod kubectl describe pvc azurediskpvc
Проверьте тестирование 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, чтобы быстро увеличивать масштаб и без простоя. Сжатие пулов носителей в настоящее время не поддерживается. Расширение пула носителей не поддерживается для дисков категории "Ультра" или SSD уровня "Премиум" версии 2.
Примечание.
Расширение пула носителей может увеличить затраты на хранилище контейнеров Azure и диски Azure. См. страницу цен на службу хранилища контейнеров Azure и выставление счетов за использование службы хранилища контейнеров Azure.
В настоящее время расширение пула носителей имеет следующее ограничение при использовании Premium_LRS
, Standard_LRS
, StandardSSD_LRS
и StandardSSD_ZRS
Premium_ZRS
SKU:
- Если существующий пул носителей меньше 4 ТиБ (4096 ГиБ), его можно развернуть только до 4095 ГиБ. Чтобы избежать ошибок, не пытайтесь расширить текущий пул носителей за пределами 4095 ГиБ, если он изначально меньше 4 ТиБ (4096 ГиБ). Пулы > носителей 4 ТиБ можно расширить до максимально доступной емкости хранилища.
Следуйте этим инструкциям, чтобы развернуть существующий пул носителей для дисков Azure.
С помощью текстового редактора откройте файл манифеста YAML, который использовался для создания пула носителей, например
code acstor-storagepool.yaml
.Замените указанную запись хранилища в файле манифеста YAML требуемым значением. Это значение должно быть больше текущей емкости пула носителей. Например, если для спецификации задано
storage: 1Ti
значение , измените его наstorage: 2Ti
. Если вы создали предварительно подготовленный пул носителей, не будет записи хранилища , так как пул носителей наследует размер емкости из предварительно подготовленных дисков Azure. Если запись хранилища не отображается в YAML, добавьте следующий код, указав нужную емкость хранилища, а затем сохраните файл манифеста:spec: resources: requests: storage: 2Ti
Примечание.
Если у вас есть два диска в пуле носителей с емкостью 1 ТиБ, и вы редактируете файл манифеста YAML для чтения storage: 4Ti
, оба диска будут развернуты до 2 ТиБ при применении YAML, что дает вам новую общую емкость 4 ТиБ.
Примените файл манифеста YAML для расширения пула носителей.
kubectl apply -f acstor-storagepool.yaml
Выполните эту команду, чтобы проверить состояние пула носителей. Замените
<storage-pool-name>
значением имени пула носителей.kubectl describe sp <storage-pool-name> -n acstor
Должно появиться сообщение, например "пул носителей расширяется". Выполните команду снова через несколько минут, и сообщение должно быть удалено.
Запуск
kubectl get sp -A
и пул носителей должны отражать новый размер.
Удаление пула носителей
Если вы хотите удалить пул носителей, выполните следующую команду. Замените <storage-pool-name>
именем пула носителей.
kubectl delete sp -n acstor <storage-pool-name>