Создание и использование тома с дисками 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_LRSPremiumV2_LRSUltraSSD_LRSPremium_ZRSStandardSSD_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, , ReadOnlyReadWrite 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, , DenyAllAllowPrivate 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:

  1. Класс хранения default подготавливает SSD-диск Azure ценовой категории "Стандартный".
    • Диски SSD уровня "Стандартный" возвращают хранилище уровня "Стандартный" и обеспечивают экономичное хранилище, обеспечивая надежную производительность.
  2. Класс хранения managed-csi-premium подготавливает диск Azure ценовой категории "Премиум".
    • Высокопроизводительные диски ssd с низкой задержкой и низкой задержкой возвращают диски уровня "Премиум". Они идеально подходят для виртуальных машин с рабочими нагрузками рабочей среды. При использовании драйвера CSI дисков Azure в AKS можно также использовать managed-csi класс хранилища, который поддерживается локальным избыточным хранилищем SSD (LRS).
  3. Эффективная, начиная с 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 уровня "Стандартный" или "Премиум".

  1. Создайте файл 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.

  1. Создайте утверждение постоянного тома с помощью kubectl apply команды и укажите файл azure-pvc.yaml .

    kubectl apply -f azure-pvc.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    persistentvolumeclaim/azure-managed-disk created
    

Использование постоянного тома

После создания утверждения постоянного тома необходимо проверить состояние Pending. Состояние Pending указывает, что оно готово к использованию модулем pod.

  1. Проверьте состояние ПВХ с помощью kubectl describe pvc команды.

    kubectl describe pvc azure-managed-disk
    

    Выходные данные команды похожи на следующий сжатый пример:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Создайте файл 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
    
  3. Создайте pod с помощью kubectl apply команды.

     kubectl apply -f azure-pvc-disk.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    pod/mypod created
    
  4. Теперь у вас есть работающий 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, , 23 No Пустой (без указания секции)
— Убедитесь, что формат секции похож на следующий: -part1
volumeAttributes.cachingMode Параметр кэша узла диска None, , ReadOnlyReadWrite No ReadOnly

Создание диска Azure

При создании диска Azure для использования с AKS можно создать ресурс диска в группе ресурсов узла. Такой подход позволит кластеру AKS получить доступ к ресурсу диска и управлять им. Если вместо этого вы создадите диск в отдельной группе ресурсов, необходимо предоставить настроенному для кластера управляемому удостоверению Службы Azure Kubernetes (AKS) роль Contributor в группе ресурсов с этим диском.

  1. Определите имя группы ресурсов с помощью az aks show команды и добавьте --query nodeResourceGroup этот параметр.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    Выходные данные команды будут выглядеть примерно так:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Создайте диск с помощью 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
    

Подключите диск в качестве тома

  1. Создайте файл 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
    
  2. Создайте файл 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
    
  3. Создайте PersistentVolume и PersistentVolumeClaim с помощью kubectl apply команды и сослаться на два созданных файла YAML.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Убедитесь, что объект 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
    
  5. Создайте файл 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
    
  6. Примените конфигурацию и подключите том с помощью 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

Следующие шаги