Создание и использование тома с дисками Azure в службе Azure Kubernetes (AKS)
Постоянный том представляет собой часть хранилища, подготовленного для использования с модулями pod Kubernetes. Вы можете использовать постоянный том с одним или несколькими модулями pod, и вы можете подготовить его динамически или статически. В этой статье показано, как динамически создавать постоянные тома с дисками Azure в кластере Служба Azure Kubernetes (AKS).
Примечание.
Диск Azure можно подключить только в режиме доступа ReadWriteOnce, то есть он будет доступен только для одного узла AKS. Этот режим доступа по-прежнему позволяет нескольким модулям pod получить доступ к тому при выполнении модулей pod на одном узле. Дополнительные сведения см. в статье о режимах доступа Kubernetes PersistentVolume.
Из этой статьи вы узнаете, как выполнять следующие задачи:
- Работа с динамическим постоянным томом (PV) путем установки драйвера интерфейса хранилища контейнеров (CSI) и динамического создания одного или нескольких управляемых дисков Azure для подключения к pod.
- Работа со статическим PV путем создания одного или нескольких управляемых дисков Azure или использования существующего и подключения его к pod.
Дополнительные сведения о томах Kubernetes см. в статье, посвященной возможностям хранения данных приложений в AKS.
Подготовка к работе
Убедитесь, что вы установили и настроили Azure CLI версии 2.0.59 или более поздней версии. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.Драйвер CSI диска Azure имеет ограничение тома для каждого узла. Количество томов изменяется на основе размера пула узлов или узлов. Выполните команду get kubectl, чтобы определить количество томов, которые можно выделить на узел:
kubectl get CSINode <nodename> -o yaml
Динамическое подготовка тома
В этом разделе содержатся рекомендации для администраторов кластера, которые хотят подготовить один или несколько постоянных томов, включающих сведения о хранилище дисков Azure для использования рабочей нагрузкой. Утверждение постоянного тома (PVC) использует объект класса хранилища для динамической подготовки контейнера хранилища дисков Azure.
Параметры класса хранилища для dynamic PersistentVolumes
В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранилища для объекта PersistentVolumeClaim.
Имя. | Значение | Доступное значение | Обязательно | Default value |
---|---|---|---|---|
skuName | Тип учетной записи хранения дисков Azure (псевдоним: storageAccountType ) |
Standard_LRS , Premium_LRS , StandardSSD_LRS PremiumV2_LRS UltraSSD_LRS Premium_ZRS StandardSSD_ZRS |
No | StandardSSD_LRS |
fsType | Тип файловой системы | ext4 , ext3 , ext2 , xfs , btrfs для Linux, ntfs для Windows |
No | ext4 для Linux, ntfs для Windows |
cachingMode | Параметр кэша узла данных Azure (PremiumV2_LRS и UltraSSD_LRS поддерживает None только режим кэширования) |
None , , ReadOnly ReadWrite |
No | ReadOnly |
resourceGroup | Укажите группу ресурсов для дисков Azure | Имя существующей группы ресурсов | No | Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер AKS. |
DiskIOPSReadWrite | Возможность операций ввода-вывода в секунду для диска UltraSSD или SSD уровня "Премиум" версии 2 (минимум: 2 операций ввода-вывода в секунду или ГиБ) | 100~160000 | No | 500 |
DiskMBpsReadWrite | Возможность пропускной способности диска UltraSSD или SSD уровня "Премиум" версии 2 (минимум: 0,032/ГиБ) | 1~2000 | No | 100 |
Размер логического сектора | Размер логического сектора в байтах для диска категории "Ультра". Поддерживаемые значения: 512 - 4096. Значение по умолчанию — 4096. | 512 , 4096 |
No | 4096 |
tags | Теги диска Azure | Формат тега: key1=val1,key2=val2 |
No | "" |
diskEncryptionSetID | Идентификатор ресурса набора шифрования диска, используемого для включения шифрования неактивных данных | формат: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
No | "" |
diskEncryptionType | Тип шифрования набора шифрования диска. | EncryptionAtRestWithCustomerKey (по умолчанию),EncryptionAtRestWithPlatformAndCustomerKeys |
No | "" |
writeAcceleratorEnabled | Ускоритель записи на дисках Azure | true , false |
No | "" |
networkAccessPolicy | Свойство NetworkAccessPolicy для предотвращения создания универсального кода ресурса (URI) SAS для диска или моментального снимка | AllowAll , , DenyAll AllowPrivate |
No | AllowAll |
diskAccessID | Идентификатор ресурса Azure для ресурса DiskAccess для использования частных конечных точек на дисках | No | `` | |
enableBursting | Включите ускорение по запросу за пределами подготовленного целевого объекта производительности диска. Ускорение по запросу должно применяться только к диску категории "Премиум" и размеру > диска 512 ГБ. Диски ценовой категории "Ультра" и "Общий" не поддерживаются. Ускорение отключено по умолчанию. | true , false |
No | false |
useragent | Агент пользователя, используемый для отслеживания потребления услуг клиентами | No | Созданный useragent в формате driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Укажите идентификатор подписки Azure, в которой создаются диски Azure. | Идентификатор подписки Azure | No | Если значение не пустое, необходимо указать resourceGroup . |
--- | Следующие параметры предназначены только для версии 2 | --- | --- | --- |
Макс. количество общих дисков | Общее количество подключений к общему диску, разрешенных для диска. Установка значения 2 или более включает реплики вложений. | Поддерживаемые значения зависят от размера диска. Сведения о поддерживаемых значениях см. в статье "Общий доступ к управляемому диску Azure". | No | 1 |
maxMountReplicaCount | Количество вложений реплик для обслуживания. | Это значение должно находиться в диапазоне [0..(maxShares - 1)] |
No | Если accessMode имеет значение ReadWriteMany , значение по умолчанию равно 0 . В противном случае значение по умолчанию maxShares - 1 |
Встроенные классы хранения
Классы хранилища определяют, как единица хранилища динамически создается с постоянным томом. Дополнительные сведения о классах хранения Kubernetes см. в разделе Классы хранения Kubernetes.
Каждый кластер AKS включает четыре предварительно созданных класса хранилища, два из которых настроены для работы с дисками Azure:
- Класс хранения default подготавливает SSD-диск Azure ценовой категории "Стандартный".
- Диски SSD уровня "Стандартный" возвращают хранилище уровня "Стандартный" и обеспечивают экономичное хранилище, обеспечивая надежную производительность.
- Класс хранения managed-csi-premium подготавливает диск Azure ценовой категории "Премиум".
- Высокопроизводительные диски ssd с низкой задержкой и низкой задержкой возвращают диски уровня "Премиум". Они идеально подходят для виртуальных машин с рабочими нагрузками рабочей среды. При использовании драйвера CSI дисков Azure в AKS можно также использовать
managed-csi
класс хранилища, который поддерживается локальным избыточным хранилищем SSD (LRS).
- Высокопроизводительные диски ssd с низкой задержкой и низкой задержкой возвращают диски уровня "Премиум". Они идеально подходят для виртуальных машин с рабочими нагрузками рабочей среды. При использовании драйвера CSI дисков Azure в AKS можно также использовать
- Эффективная, начиная с Kubernetes версии 1.29, при развертывании кластеров Служба Azure Kubernetes (AKS) в нескольких зонах доступности AKS теперь использует хранилище, избыточное между зонами (ZRS), для создания управляемых дисков в встроенных классах хранилища.
- ZRS обеспечивает синхронную репликацию управляемых дисков Azure в нескольких зонах доступности Azure в выбранном регионе. Эта стратегия избыточности повышает устойчивость приложений и защищает данные от сбоев центра обработки данных.
- Однако важно отметить, что хранилище, избыточное между зонами (ZRS), приходится на более высокую стоимость по сравнению с локальным избыточным хранилищем (LRS). Если оптимизация затрат является приоритетом, можно создать класс хранилища с параметром имени SKU LRS и использовать его в утверждении постоянного тома (PVC).
Уменьшение размера ПВХ не поддерживается из-за риска потери данных. Можно изменить существующий класс хранилища с помощью kubectl edit sc
команды или создать собственный пользовательский класс хранилища. Например, если вы хотите использовать диск размером 4 ТиБ, необходимо создать класс хранения, который определяет cachingmode: None
, так как кэширование дисков не поддерживается для дисков 4 ТиБ и больше. Дополнительные сведения о классах хранения и создании собственного класса хранения см. в статье Параметры хранилища для приложений в AKS.
Классы предварительно созданного kubectl get sc
хранилища можно просмотреть с помощью команды. В следующем примере показаны готовые классы хранилища, доступные в кластере AKS:
kubectl get sc
Выходные данные команды будут выглядеть примерно так:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Примечание.
Утверждения постоянных томов указаны в ГиБ, но счета за использование управляемых дисков Azure выставляются по номеру SKU для определенного размера. Эти номера SKU варьируются от 32 ГиБ для дисков S4 или P4 и до 32 ТиБ для дисков S80 или P80 (в предварительной версии). Число операций ввода-вывода в секунду и пропускная способность управляемого диска уровня "Премиум" зависят как от номера SKU, так и от размера экземпляров узлов в кластере AKS. Дополнительные сведения см. на странице Цены на управляемые диски.
Создание заявки на доступ к постоянному тому
Утверждение постоянного тома (ПВХ) автоматически подготавливает хранилище на основе класса хранения. В этом случае ПВХ может использовать один из предварительно созданных классов хранилища для создания управляемого диска Azure уровня "Стандартный" или "Премиум".
Создайте файл
azure-pvc.yaml
и скопируйте в него следующий манифест. Утверждение запрашивает дискazure-managed-disk
с именем 5 ГБ с доступом ReadWriteOnce . managed-csi указан как класс хранения.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5Gi
Совет
Чтобы создать диск, который использует хранилище уровня "Премиум", используйте класс storageClassName: managed-csi-premium
вместо managed-csi.
Создайте утверждение постоянного тома с помощью
kubectl apply
команды и укажите файл azure-pvc.yaml .kubectl apply -f azure-pvc.yaml
Выходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/azure-managed-disk created
Использование постоянного тома
После создания утверждения постоянного тома необходимо проверить состояние Pending
. Состояние Pending
указывает, что оно готово к использованию модулем pod.
Проверьте состояние ПВХ с помощью
kubectl describe pvc
команды.kubectl describe pvc azure-managed-disk
Выходные данные команды похожи на следующий сжатый пример:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
Создайте файл
azure-pvc-disk.yaml
и скопируйте в него следующий манифест. Этот манифест создает базовый модуль POD NGINX, который использует утверждение постоянного тома с именем azure-managed-disk для подключения диска Azure по пути/mnt/azure
. Для контейнеров Windows Server укажите mountPath в формате пути Windows, например "D:".kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/azure" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-managed-disk
Создайте pod с помощью
kubectl apply
команды.kubectl apply -f azure-pvc-disk.yaml
Выходные данные команды будут выглядеть примерно так:
pod/mypod created
Теперь у вас есть работающий pod с диском Azure, подключенным к каталогу
/mnt/azure
. Проверьте конфигурацию pod с помощьюkubectl describe
команды.kubectl describe pod mypod
Выходные данные команды будут выглядеть примерно так:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: azure-managed-disk ReadOnly: false default-token-smm2n: Type: Secret (a volume populated by a Secret) SecretName: default-token-smm2n Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned mypod to aks-nodepool1-79590246-0 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242" [...]
Использование дисков Azure ценовой категории "Ультра"
Сведения об использовании диска Azure ценовой категории "Ультра" см. в статье "Использование дисков ультра" в Служба Azure Kubernetes (AKS).
Использование тегов Azure
Дополнительные сведения об использовании тегов Azure см. в разделе Использование тегов Azure в кластере Службы Azure Kubernetes (AKS).
Статическая подготовка тома
В этом разделе содержатся рекомендации для администраторов кластера, которые хотят создать один или несколько постоянных томов, включающих сведения о дисках Azure для использования рабочей нагрузкой.
Статические параметры подготовки для постоянного тома
В следующей таблице приведены параметры, которые можно использовать для определения постоянного тома.
Имя. | Значение | Доступное значение | Обязательно | Default value |
---|---|---|---|---|
volumeHandle | URI диска Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Да | Н/П |
volumeAttributes.fsType | Тип файловой системы | ext4 , ext3 , ext2 , xfs , btrfs для Linux, ntfs для Windows |
No | ext4 для Linux, ntfs для Windows |
volumeAttributes.partition | Номер секции существующего диска (поддерживается только в Linux) | 1 , , 2 3 |
No | Пустой (без указания секции) — Убедитесь, что формат секции похож на следующий: -part1 |
volumeAttributes.cachingMode | Параметр кэша узла диска | None , , ReadOnly ReadWrite |
No | ReadOnly |
Создание диска Azure
При создании диска Azure для использования с AKS можно создать ресурс диска в группе ресурсов узла. Такой подход позволит кластеру AKS получить доступ к ресурсу диска и управлять им. Если вместо этого вы создадите диск в отдельной группе ресурсов, необходимо предоставить настроенному для кластера управляемому удостоверению Службы Azure Kubernetes (AKS) роль Contributor
в группе ресурсов с этим диском.
Определите имя группы ресурсов с помощью
az aks show
команды и добавьте--query nodeResourceGroup
этот параметр.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
Выходные данные команды будут выглядеть примерно так:
MC_myResourceGroup_myAKSCluster_eastus
Создайте диск с помощью
az disk create
команды. Укажите имя группы ресурсов узла и имя ресурса диска, например myAKSDisk. В следующем примере создается диск размером 20 ГиБ и выводится идентификатор созданного диска. Если вы намерены использовать этот диск с контейнерами Windows Server, добавьте параметр--os-type windows
для правильного форматирования диска.az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv
Примечание.
Диски Azure выставляются по номеру SKU для определенного размера. Эти номера SKU варьируются от 32 ГиБ для дисков S4 или P4 и до 32 ТиБ для дисков S80 или P80 (в предварительной версии). Число операций ввода-вывода в секунду и пропускная способность управляемого диска (цен. категория "Премиум") зависят как от номера SKU, так и от размера экземпляров узлов в кластере AKS. Дополнительные сведения см. на странице Цены на управляемые диски.
Идентификатор ресурса диска отображается после успешного завершения команды, как показано в следующем примере выходных данных. Идентификатор диска используется для подключения диска в следующем разделе.
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
Подключите диск в качестве тома
Создайте файл pv-azuredisk.yaml с PersistentVolume. Обновите
volumeHandle
с использованием идентификатора ресурса диска из предыдущего шага. Для контейнеров Windows Server укажите ntfs для параметра fsType.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: disk.csi.azure.com name: pv-azuredisk spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: managed-csi csi: driver: disk.csi.azure.com volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk volumeAttributes: fsType: ext4
Создайте файл pvc-azuredisk.yaml с заявкой PersistentVolumeClaim для тома PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi
Создайте PersistentVolume и PersistentVolumeClaim с помощью
kubectl apply
команды и сослаться на два созданных файла YAML.kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml
Убедитесь, что объект PersistentVolumeClaim создается и привязан к PersistentVolume с помощью
kubectl get pvc
команды.kubectl get pvc pvc-azuredisk
Выходные данные команды будут выглядеть примерно так:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
Создайте файл azure-disk-pod.yaml, чтобы ссылаться на файл PersistentVolumeClaim. Для контейнеров Windows Server укажите mountPath в формате пути Windows, например "D:".
apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: azure mountPath: /mnt/azure volumes: - name: azure persistentVolumeClaim: claimName: pvc-azuredisk
Примените конфигурацию и подключите том с помощью
kubectl apply
команды.kubectl apply -f azure-disk-pod.yaml
Очистка ресурсов
После завершения работы с ресурсами, созданными в этой статье, их можно удалить с помощью kubectl delete
команды.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Следующие шаги
- Сведения об использовании драйвера CSI для хранилища дисков Azure см. в статье "Использование хранилища дисков Azure с драйвером CSI".
- Соответствующие рекомендации см. в разделе Рекомендации по хранению и резервному копированию в AKS.
Azure Kubernetes Service