Использование драйвера служба хранилища интерфейса (CSI) контейнера хранилища BLOB-объектов Azure

Драйвер контейнера хранилища BLOB-объектов Azure служба хранилища Interface (CSI) — это драйвер, соответствующий спецификации CSI, используемый Служба Azure Kubernetes (AKS) для управления жизненным циклом хранилища BLOB-объектов Azure. CSI является стандартом для предоставления произвольных блоков и систем хранения файлов контейнерным рабочим нагрузкам на Kubernetes.

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

При подключении хранилища BLOB-объектов Azure в виде файловой системы в контейнер или модуль pod позволяет использовать хранилище BLOB-объектов с рядом приложений, которые работают с большим количеством неструктурированных данных. Например:

  • Данные файла журнала
  • Изображения, документы и потоковое видео или аудио
  • Данные аварийного восстановления

Доступ к данным в хранилище объектов могут получить приложения, использующие BlobFuse или протокол Сетевой файловой системы (NFS) версии 3.0. Перед введением драйвера CSI хранилища BLOB-объектов Azure единственным вариантом было вручную установить неподдерживаемый драйвер для доступа к хранилищу BLOB-объектов из приложения, работающего в AKS. Если драйвер CSI хранилища BLOB-объектов Azure включен в AKS, существует два встроенных класса хранилища: azureblob-fuse-premium и azureblob-nfs-premium.

Сведения о создании кластера AKS с поддержкой драйверов CSI см. в статье Драйверы CSI в AKS. Дополнительные сведения о различиях в доступе между каждым из типов хранилища Azure с использованием протокола NFS см. в статье Сравнение доступа к Файлам Azure, хранилищу BLOB-объектов и Azure NetApp Files с помощью NFS.

Возможности драйвера CSI хранилища BLOB-объектов Azure

Драйвер CSI хранилища BLOB-объектов Azure поддерживает следующие функции:

  • BlobFuse и протокол Сетевой файловой системы (NFS) версии 3.0

Подготовка к работе

Примечание.

Если blobfuse-proxy не включен во время установки драйвера открытый код, удаление драйвера открытый код приведет к нарушению существующих подключений blbfuse. Однако подключения NFS останутся небезопасными.

Включение драйвера CSI в новом или существующем кластере AKS

С помощью Azure CLI можно включить драйвер CSI хранилища BLOB-объектов в новом или существующем кластере AKS, прежде чем настроить постоянный том для использования модулями pod в кластере.

Чтобы включить драйвер в новом кластере, включите параметр --enable-blob-driver при помощи команды az aks create, как показано в следующем примере:

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

Чтобы включить драйвер в существующем кластере, включите параметр --enable-blob-driver при помощи команды az aks update, как показано в следующем примере:

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

Появится запрос на подтверждение того, что драйвер CSI хранилища BLOB-объектов с открытым кодом не установлен. После подтверждения может потребоваться несколько минут для выполнения этого действия. После завершения вы увидите в выходных данных состояние включения драйвера в кластере. В следующем примере показан раздел, указывающий результаты предыдущей команды:

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

Отключение драйвера CSI в существующем кластере AKS

С помощью Azure CLI можно отключить драйвер CSI хранилища BLOB-объектов в существующем кластере AKS после удаления постоянного тома из кластера.

Чтобы отключить драйвер в существующем кластере, включите параметр --disable-blob-driver при помощи команды az aks update, как показано в следующем примере:

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

Использование постоянного тома с хранилищем BLOB-объектов Azure

Постоянный том (PV) — это часть хранилища, которая подготовлена к использованию для модулей pod Kubernetes. Постоянный том может использоваться одним или несколькими модулями pod и может быть подготовлен динамически или статически. Если нескольким модулям требуется одновременный доступ к одному и тому же тому хранилища, можно использовать хранилище BLOB-объектов Azure для подключения с помощью Сетевой файловой системы (NFS) или blobfuse. В этой статье показано, как в кластере AKS с помощью нескольких модулей pod динамически создать хранилище BLOB-объектов Azure.

Дополнительные сведения о томах Kubernetes см. в статье, посвященной возможностям хранения данных приложений в AKS.

Динамическое создание постоянных томов службы "хранилище BLOB-объектов Azure" с помощью встроенных классов хранения

Класс хранения используется для определения способа создания контейнера хранилища BLOB-объектов Azure. Для хранения контейнера хранилища BLOB-объектов Azure учетная запись хранения создается автоматически в группе ресурсов узла для использования с классом хранения. Выберите один из следующих SKU для избыточности хранилища Azure для skuName:

  • Standard_LRS — локально избыточное хранилище ценовой категории "Стандартный";
  • Premium_LRS — локально избыточное хранилище класса Premium.
  • Standard_ZRS: хранилище, избыточное по зонам уровня "Стандартный"
  • Premium_ZRS: избыточное хранилище зоны "Премиум"
  • Standard_GRS — геоизбыточное хранилище ценовой категории "Стандартный";
  • Standard_RAGRS — геоизбыточное хранилище ценовой категории "Стандартный" с доступом на чтение;

При использовании драйверов CSI хранилища в AKS существует два дополнительных встроенных служба хранилища Classes, использующих драйвер хранилища BLOB-объектов Azure CSI.

Политика освобождения емкости в обоих классах хранения гарантирует, что базовое хранилище BLOB-объектов Azure будет удалено при удалении соответствующего постоянного тома. Классы хранения также конфигурируют расширяемость контейнера по умолчанию, поскольку для параметра set allowVolumeExpansion задано значение true.

Используйте команду kubectl get sc, чтобы просмотреть классы хранения. В следующем примере демонстрируются классы хранения azureblob-fuse-premium и azureblob-nfs-premium, доступные для кластера AKS:

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

Чтобы использовать эти классы хранения, создайте PVC и соответствующий модуль, который ссылается на них и использует их. Заявка на постоянный том (PVC) используется для автоматической подготовки хранилища на основе класса хранения. Заявка на постоянный том может использовать один из предварительно созданных классов хранения или определяемый пользователем класс хранения для создания контейнера хранилища BLOB-объектов Azure для нужного SKU, размера и протокола для связи с ним. При создании определения pod указывается заявка на постоянный том для запроса требуемого хранилища.

Использование набора с отслеживанием состояния StatefulSet

Чтобы сохранить том хранилища для рабочей нагрузки, можно использовать StatefulSet. Это упрощает сопоставление существующих томов с новыми модулями Pod, которые приходят на замену вышедших из строя. В следующих примерах показано, как настроить StatefulSet для хранилища BLOB-объектов с помощью Blobfuse или протокола NFS.

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

  • Удостоверение уровня управления кластером AKS (то есть имя кластера AKS) добавляется в роль участника в виртуальной сети и группе безопасности сети.
  1. Создайте файл azure-blob-nfs-ss.yaml и скопируйте в него следующий код YAML.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Создайте StatefulSet с помощью команды kubectl create:

    kubectl create -f azure-blob-nfs-ss.yaml
    

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