Использование предварительной версии контейнера 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 служба хранилища с управляемыми дисками Azure, кластер AKS должен иметь пул узлов не менее трех виртуальных машин общего назначения, таких как standard_d4s_v5 для узлов кластера, каждый из которых содержит не менее четырех виртуальных ЦП (виртуальных ЦП).
Доступность в регионах
Контейнер Azure служба хранилища доступен только для подмножества регионов Azure:
- Северная часть ЮАР (Африка)
- "Восточная Австралия" (Азиатско-Тихоокеанский регион);
- (Азиатско-Тихоокеанский регион) Восточная Азия
- (Азиатско-Тихоокеанский регион) Восточная Япония
- (Азиатско-Тихоокеанский регион) Республика Корея, центральный регион
- Юго-Восточная Азия (Азиатско-Тихоокеанский регион)
- "Центральная Индия" (Азиатско-Тихоокеанский регион);
- (Европа) Центральная Франция
- Центрально-Западная Германия (Европа)
- "Северная Европа" (Европа);
- "Западная Европа" (Европа).
- (Европа) Южная часть Соединенного Королевства
- (Европа) Центральная Швеция;
- Северная Швейцария (Европа)
- Северная часть ОАЭ (Ближний Восток)
- (Северная Америка) Восточная часть США;
- (Северная Америка) Восточная часть США 2;
- (Северная Америка) Западная часть США
- (Северная Америка) Западная часть США 2;
- (Северная Америка) Западная часть США 3;
- (Северная Америка) Центральная часть США;
- (Северная Америка) Северная часть США
- (Северная Америка) Центрально-южная часть США;
- (Северная Америка) Западная часть США
- (Северная Америка) Центральная Канада;
- (Северная Америка) Восточная Канада
- Южная Бразилия (Южная Америка)
Создание пула носителей
Сначала создайте пул носителей, который является логическим группированием хранилища для кластера Kubernetes, определив его в файле манифеста YAML.
Если вы включили служба хранилища контейнера Azure или az aks create
az aks update
команды, возможно, у вас уже есть пул носителей. Используется kubectl get sp -n acstor
для получения списка пулов носителей. Если у вас уже есть пул носителей, который вы хотите использовать, можно пропустить этот раздел и перейти к отображению доступных классов хранилища. Если у вас уже подготовленные управляемые диски Azure, можно создать предварительно подготовленный пул носителей с помощью этих дисков.
Внимание
Если вы хотите использовать собственные ключи для шифрования томов вместо использования ключей, управляемых Корпорацией Майкрософт, не создавайте пул носителей, выполнив действия, описанные в этом разделе. Вместо этого перейдите к разделу "Включить шифрование на стороне сервера" с помощью ключей , управляемых клиентом, и следуйте инструкциям.
Выполните следующие действия, чтобы создать пул носителей для дисков 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
Примените файл манифеста 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 и выберите Параметры> Properties. Скопируйте всю строку в идентификатор ресурса и поместите ее в текстовый файл.
Используйте избранный текстовый редактор для создания файла манифеста 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.
Чтобы использовать собственный ключ, необходимо иметь 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>
об именовании.
Отображение доступных классов хранилища
Когда пул носителей готов к использованию, необходимо выбрать класс хранилища, чтобы определить, как хранилище динамически создается при создании утверждений постоянного тома и развертывании постоянных томов.
Запустите kubectl get sc
, чтобы отобразить доступные классы хранилища. Вы увидите класс хранилища с именем acstor-<storage-pool-name>
.
Внимание
Не используйте класс хранилища, помеченный внутренним. Это внутренний класс хранилища, необходимый для работы служба хранилища контейнера Azure.
Создание заявки на доступ к постоянному тому
Утверждение постоянного тома (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.
Развертывание модуля 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, чтобы быстро увеличивать масштаб и без простоя. Сжатие пулов носителей в настоящее время не поддерживается.
Примечание.
Расширение пула носителей может увеличить затраты на контейнер Azure служба хранилища и диски Azure. См. страницу цен на контейнер Azure служба хранилища.
Следуйте этим инструкциям, чтобы развернуть существующий пул носителей для дисков Azure.
С помощью текстового редактора откройте файл манифеста YAML, который использовался для создания пула носителей, например
code acstor-storagepool.yaml
.Замените указанную запись хранилища в файле манифеста YAML требуемым значением. Это значение должно быть больше текущей емкости пула носителей. Например, если для спецификации задано
storage: 1Ti
значение , измените его наstorage: 2Ti
. Если вы создали предварительно подготовленный пул носителей, не будет записи хранилища , так как пул носителей наследует размер емкости из предварительно подготовленных дисков Azure. Если запись хранилища не отображается в YAML, добавьте следующий код, указав нужную емкость хранилища, а затем сохраните файл манифеста:spec: resources: requests: storage: 2Ti
Примените файл манифеста 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>