Поделиться через


Создавайте и управляйте постоянными томами (PV) с помощью файлов Azure в службе Azure Kubernetes (AKS).

Если нескольким pod'ам требуется одновременный доступ к тому же тому хранилища, можно использовать Файлы Azure для подключения с помощью протокола SMB или NFS. В этой статье показано, как динамически и статически создать файловое хранилище Azure Files для использования несколькими подами в кластере Службы Azure Kubernetes (AKS) с помощью Azure Files.

Замечание

Драйвер CSI для файлов Azure разрешает только подключение общих папок SMB с помощью ключевой аутентификации (NTLM версии 2), поэтому не поддерживает максимальный профиль безопасности параметров настроек общего доступа к файлам Azure. С другой стороны, подключение общих папок NFS не требует проверки подлинности на основе ключей.

Замечание

Мы рекомендуем FIO при выполнении тестов проверки производительности. Дополнительные сведения см. в статье о средствах и тестах для тестирования.

Предпосылки

Использование встроенных классов хранилища для создания динамических PV с помощью файлов Azure

Классы хранилища определяют, как единица хранилища динамически создается в виде постоянного тома. В учетной записи хранения, которая автоматически создается в группе ресурсов узла, используется класс хранения для управления файловым общим ресурсом службы файлов Azure. При использовании драйверов CSI в AKS существует два дополнительных встроенных StorageClasses драйвера, которые используют драйверы хранилища Azure Files CSI (другие классы хранилища CSI создаются вместе с кластером вместе с классами хранилища по умолчанию в дереве):

  • azurefile-csi: использует службу хранилища Azure уровня "Стандартный" для создания общей папки Azure.
  • azurefile-csi-premium: использует Azure хранилище класса Premium для создания общей папки Azure.

Политика восстановления в обоих классах хранилища гарантирует, что базовый файловый ресурс Файлов Azure удаляется при удалении соответствующего ПВ. Классы хранилища также настраивают масштабируемость общих папок, поэтому для её изменения необходимо просто отредактировать заявку на постоянный том (PVC) с указанием нового размера.

Вы можете выбрать один из следующих вариантов избыточности хранилища Azure SKU для параметра skuname в определении класса хранения.

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

Замечание

Azure Files поддерживает файловые хранилища Azure Premium. Минимальная емкость общей папки составляет 100 ГиБ. Мы рекомендуем использовать общие папки Azure Premium вместо общих папок уровня "Стандартный", так как общие папки уровня "Премиум" обеспечивают более высокую производительность, низкую задержку на диске для рабочих нагрузок с интенсивным вводом-выводом.

Создание настраиваемых классов хранилища для динамических PV, используя Azure Files

Классы хранилища по умолчанию подходят для большинства сценариев. В некоторых случаях может потребоваться настроить собственный класс хранилища с собственными параметрами. Например, может потребоваться настроить mountOptions общую папку.

  1. Создайте файл с именем azure-file-sc.yaml и вставьте в следующий пример манифеста:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: my-azurefile
    provisioner: file.csi.azure.com
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - dir_mode=0640
      - file_mode=0640
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict # https://linux.die.net/man/8/mount.cifs
      - nosharesock
    parameters:
      skuName: Standard_LRS
    
  2. Создайте класс хранилища с помощью kubectl apply команды:

    kubectl apply -f azure-file-sc.yaml
    

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

    storageclass.storage.k8s.io/my-azurefile created
    

Параметры класса хранилища для динамических PV с помощью Файлов Azure

В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранения для утверждений постоянного тома (PVCs) в Azure Files.

Имя. Значение Доступные значения Обязательно Значение по умолчанию
accountAccessTier Уровень доступа для учетной записи хранения Стандартная учетная запись может выбрать Hot или Cool, а учетная запись Premium может выбрать только Premium. нет Empty. Используйте параметр по умолчанию для различных типов учетных записей хранения.
accountQuota Ограничивает квоту для учетной записи. Можно указать максимальную квоту в ГБ (102400 ГБ по умолчанию). Если учетная запись превышает указанную квоту, драйвер пропускает выбор учетной записи. нет 102400
allowBlobPublicAccess Разрешить или запретить общий доступ ко всем блобам или контейнерам учетной записи хранилища, созданной драйвером. true или false нет false
disableDeleteRetentionPolicy Укажите, отключите ли DeleteRetentionPolicy для учетной записи хранения, созданной драйвером. true или false нет false
folderName Укажите имя папки в общей папке Azure. Существующее имя папки в файловом общем ресурсе Azure. нет Если имя папки не существует в общем доступе, подключение не удается.
getLatestAccount Определяет, следует ли получить последний ключ учетной записи на основе времени создания. Этот драйвер получает первый ключ по умолчанию. true или false нет false
location Укажите регион учетной записи хранилища Azure. Например: eastus. нет Если поле пусто, драйвер использует то же название местоположения, что и текущий кластер AKS.
matchTags Сопоставляет теги, когда драйвер пытается найти подходящую учетную запись хранения. true или false нет false
networkEndpointType Укажите тип сетевой конечной точки для учетной записи хранения, созданной драйвером. Если privateEndpoint задано, для учетной записи хранения создается частная конечная точка. В других случаях конечная точка службы создается по умолчанию. "",privateEndpoint нет ""
protocol Укажите протокол общей папки. smb, nfs нет smb
requireInfraEncryption Укажите, применяет ли служба дополнительный уровень шифрования с управляемыми платформой ключами для неактивных данных для учетной записи хранения, созданной драйвером. true или false нет false
resourceGroup Укажите группу ресурсов для дисков Azure. Имя существующей группы ресурсов нет Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер AKS.
selectRandomMatchingAccount Определяет, следует ли случайным образом выбрать соответствующую учетную запись. По умолчанию драйвер всегда выбирает первую соответствующую учетную запись в алфавитном порядке (примечание. Этот драйвер использует кэш поиска учетных записей, что приводит к неравномерному распределению файлов в нескольких учетных записях). true или false нет false
server Укажите адрес сервера учетной записи хранения Azure. Например, существующий адрес сервера accountname.privatelink.file.core.windows.net. нет Если поле пустое, драйвер использует адрес учетной записи по умолчанию accountname.file.core.windows.net или другой суверенный облачный аккаунт.
shareAccessTier Уровень доступа для общей папки Учетная запись общего назначения версии 2 может выбирать между TransactionOptimized (по умолчанию) Hotи Cool. Тип учетной записи хранения "Премиум" только для общих папок. нет Empty. Используйте параметр по умолчанию для различных типов учетных записей хранения.
shareName Укажите имя общей папки Azure. Существующее или новое имя общей папки Azure. нет Если это пусто, драйвер создает имя общей папки Azure.
shareNamePrefix Укажите префикс имени общей папки Azure, созданный драйвером. Имя общего ресурса может содержать только строчные буквы, цифры, дефисы и длину не более 21 символов. нет
skuName тип учетной записи хранилища Azure Files (псевдоним: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRSStandard_RAGRSStandard_RAGZRSPremium_LRSPremium_ZRSStandardV2_LRSStandardV2_ZRSStandardV2_GRSStandardV2_GZRSPremiumV2_LRSPremiumV2_ZRS нет Standard_LRS
Минимальный размер общей папки для типа учетной записи Premium составляет 100 ГБ.
Тип учетной записи ZRS поддерживается в ограниченных регионах.
Общий файловый ресурс NFS поддерживает только тип аккаунта Премиум.
Имена SKU уровня "Стандартный" версии 2 предназначены для подготовленной модели файлов Azure версии 2.
storageAccount Указывает имя учетной записи хранения Azure. storageAccountName нет Если имя учетной записи хранения не указано, драйвер будет искать подходящую учетную запись хранения, соответствующую параметрам учетной записи в одной группе ресурсов. Если не удается найти соответствующую учетную запись хранения, она создаст новую. Однако если указано имя учетной записи хранения, учетная запись хранения должна существовать.
storageEndpointSuffix Укажите суффикс конечной точки хранилища Azure. core.windows.net, core.chinacloudapi.cnи т. д. нет Если это пусто, драйвер использует суффикс конечной точки хранилища по умолчанию в соответствии с облачной средой. Например: core.windows.net.
tags Теги создаются в новой учетной записи хранения. Формат тега: 'foo=aaa,bar=bbb' нет ""
--- Следующие параметры предназначены только для протокола SMB --- --- ---
subscriptionID Укажите идентификатор подписки Azure, где создается общая папка Azure. Идентификатор подписки Azure нет Если значение не пустое, необходимо указать resourceGroup.
storeAccountKey Укажите, нужно ли сохранять ключ доступа учетной записи в секрет Kubernetes. true или false
false означает, что для получения ключа учетной записи драйвер использует удостоверение kubelet.
нет true
secretName Указывает имя секрета для хранения ключа учетной записи. нет
secretNamespace Укажите пространство имен секрета для хранения ключа учетной записи.

Примечание.
Если secretNamespace не указано, секрет создается в том же пространстве имен, что и pod.
default,kube-system и т. д. нет Пространство имен PVC, например csi.storage.k8s.io/pvc/namespace
useDataPlaneAPI Укажите, следует ли использовать API плоскости данных для создания, удаления или масштабирования файлового ресурса, что может решить проблему ограничения API SRP, поскольку у API плоскости данных почти нет ограничений. Однако, это вызовет ошибку, если в учетной записи хранения настроен брандмауэр или виртуальная сеть. true или false нет false
--- Следующие параметры предназначены только для протокола NFS. --- --- ---
mountPermissions Разрешения смонтированной папки. Значение по умолчанию — 0777. Если установлено значение 0, драйвер не выполняет chmod после подключения 0777 нет
rootSquashType Укажите поведение подавления привилегий суперпользователя для общего доступа. Значение по умолчанию — NoRootSquash. AllSquash, NoRootSquash, RootSquash нет
--- Следующие параметры предназначены только для параметра виртуальной сети (например, NFS, частная конечная точка) --- --- ---
fsGroupChangePolicy Указывает, как драйвер изменяет владение томом. Модуль Pod securityContext.fsGroupChangePolicy игнорируется. OnRootMismatch(по умолчанию), AlwaysNone нет OnRootMismatch
subnetName Имя подсети Существующее имя подсети узла агента. нет Если этот параметр пуст, драйвер использует значение subnetName, указанное в файле конфигурации облака Azure.
vnetName Имя виртуальной сети Существующее имя виртуальной сети. нет Если это пусто, драйвер обновит все подсети в виртуальной сети кластера.
vnetResourceGroup Укажите группу ресурсов виртуальной сети, в которой определена виртуальная сеть. Существующее имя группы ресурсов. нет Если этот параметр пуст, драйвер использует значение vnetResourceGroup, указанное в файле конфигурации облака Azure.

Замечание

Если учетная запись хранения создается драйвером, необходимо указать networkEndpointType: privateEndpoint только параметр в классе хранилища. Драйвер CSI создает частную конечную точку и частную зону DNS (именованную privatelink.file.core.windows.net) вместе с учетной записью. Если у вас есть собственная учетная запись хранения, необходимо создать частную конечную точку для аккаунта хранения. Если вы используете хранилище файлов Azure в изолированном сетевом кластере, необходимо создать пользовательский класс хранилища с помощью networkEndpointType: privateEndpoint. В качестве ссылки можно использовать следующий пример манифеста:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
  networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777  # modify this permission if you want to enhance the security
  - file_mode=0777
  - mfsymlinks
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduce probability of reconnect race
  - actimeo=30  # reduce latency for metadata-heavy workload
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Создание PVC с использованием Azure Files

В заявке на постоянный том используется объект класса хранилища для динамического предоставления общего файла Azure. Пример манифеста YAML в этом разделе можно использовать для создания ПВХ размером 100 ГБ с доступом ReadWriteMany . Дополнительные сведения о режимах доступа см. в разделе "Режимы доступа Kubernetes PV".

  1. Создайте файл с именем azure-file-pvc.yaml и вставьте следующий YAML. Убедитесь, что storageClassName соответствует имени существующего класса хранилища.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: my-azurefile
      resources:
        requests:
          storage: 100Gi
    

    Замечание

    Если используется Premium_LRS номер SKU для класса хранилища, минимальное значение storage должно быть 100Gi.

  2. Создайте ПВХ с помощью kubectl apply команды.

    kubectl apply -f azure-file-pvc.yaml
    
  3. Просмотрите состояние ПВХ с помощью kubectl get команды:

    kubectl get pvc my-azurefile
    

    Ваши выходные данные должны напоминать следующий пример вывода, который показывает, что PVC находится в состоянии Bound, а PV был динамически создан для удовлетворения требования.

    NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    my-azurefile   Bound     pvc-aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb   100Gi       RWX            my-azurefile      5m
    

Использование ПВХ с файлами Azure в модуле pod

Пример манифеста YAML в этом разделе создает pod, который использует PVC my-azurefile для монтирования файлового хранилища Azure Files по пути /mnt/azure. Для контейнеров Windows Server укажите путь в формате Windows, например mountPath

  1. Создайте файл с именем azure-pvc-files.yamlи вставьте следующий файл YAML. Убедитесь, что claimName соответствует имени вашего существующего PVC.

    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: my-azurefile
    
  2. Создайте pod с помощью команды kubectl apply.

    kubectl apply -f azure-pvc-files.yaml
    
  3. Просмотрите состояние pod с помощью kubectl describe команды:

    kubectl describe pod mypod
    

    Выходные данные должны выглядеть примерно так, как показано, что модуль pod запущен и том подключен по правильному пути:

    Containers:
      mypod:
        Container ID:   docker://BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11
        Image:          mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        Image ID:       docker-pullable://nginx@sha256:AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00
        State:          Running
          Started:      Fri, 01 Mar 2019 23:56:16 +0000
        Ready:          True
        Mounts:
          /mnt/azure from volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro)
    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  my-azurefile
        ReadOnly:   false
    [...]
    

Параметры монтирования для файлов Azure

Расположение для настройки параметров монтирования (mountOptions) зависит от того, подготавливаете ли вы динамические или статические постоянные тома:

  • Если вы динамически подготавливаете том с классом хранилища, укажите параметры подключения для объекта класса хранилища (тип: StorageClass).
  • Если вы статически подготавливаете том, укажите параметры монтирования для объекта PV (тип: PersistentVolume).
  • Если вы подключаете общую папку в виде встроенного тома, укажите параметры подключения в объекте Pod (тип: Pod).

Дополнительные сведения см. в разделе "Параметры подключения".

Значение по умолчанию для fileMode и dirMode в Kubernetes версии 1.13.0 и более поздней — 0777. В следующем примере задано значение 0777:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
  skuName: Premium_LRS

Рекомендуемые варианты подключения для общих папок SMB приведены в следующем примере класса хранилища:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
    skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
    - dir_mode=0777  # modify this permission if you want to enhance the security
    - file_mode=0777 # modify this permission if you want to enhance the security
    - mfsymlinks    # support symbolic links
    - cache=strict  # https://linux.die.net/man/8/mount.cifs
    - nosharesock  # reduces probability of reconnect race
    - actimeo=30  # reduces latency for metadata-heavy workload
    - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Если вы используете общие папки уровня "Премиум" (SSD) и ваша рабочая нагрузка тяжела, зарегистрируйтесь, чтобы использовать функцию кэширования метаданных для повышения производительности.

Дополнительные сведения см. в статье "Повышение производительности для общих папок SMB Azure".

Рекомендуемые параметры подключения для общих папок NFS приведены в следующем примере класса хранилища:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: azurefile-csi-nfs
provisioner: file.csi.azure.com
parameters:
    protocol: nfs
    skuName: Premium_LRS     # available values: Premium_LRS, Premium_ZRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
    - nconnect=4  # improves performance by enabling multiple connections to share
    - noresvport  # improves availability
    - actimeo=30  # reduces latency for metadata-heavy workloads

Увеличьте размер предварительного чтения, чтобы повысить пропускную способность чтения.

Хотя Azure Files поддерживает установку значения nconnect до максимума 16, мы рекомендуем настроить параметры подключения с оптимальным значением nconnect=4. В настоящее время в реализации nconnect для Azure Files нет преимуществ, превышающих четыре канала.

Создание моментального снимка тома из ПВХ с помощью файлов Azure

Драйвер CSI для файлов Azure поддерживает создание моментальных снимков постоянных томов и общих файловых ресурсов.

  1. Создайте класс снимка томаkubectl apply с помощью команды:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yaml
    

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

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc created
    
  2. Создайте моментальный снимок тома из динамического PVC, созданного ранее в этом руководстве, с помощью команды kubectl apply.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yaml
    

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

    volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot created
    
  3. Просмотрите состояние моментального снимка тома с помощью kubectl describe команды:

    kubectl describe volumesnapshot azurefile-volume-snapshot
    

    Выходные данные должны выглядеть примерно так, как показано, что моментальный снимок тома не готов к использованию, так как драйвер по-прежнему создает моментальный снимок базового файлового ресурса Azure:

    Name:         azurefile-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1beta1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T22:37:41Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  955091
      Self Link:         /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot
      UID:               00aa00aa-bb11-cc22-dd33-44ee44ee44ee
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azurefile
      Volume Snapshot Class Name:      csi-azurefile-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-00aa00aa-bb11-cc22-dd33-44ee44ee44ee
      Ready To Use:                        false
    Events:                                <none>
    

Изменение размера постоянного тома с помощью файлов Azure

Замечание

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

The persistentVolumeClaim "pvc-azurefile" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

Вы можете запросить больший объем для ПВХ, изменив объект ПВХ, чтобы указать больший размер. Это изменение активирует расширение базового тома, которое производит резервное копирование постоянного тома. Новый постоянный том (Persistent Volume, PV) никогда не будет создан для удовлетворения запроса. Вместо этого изменяется размер существующего тома.

В AKS встроенный managed-csi класс хранилища уже поддерживает расширение, поэтому вы можете использовать динамический PVC, который был создан ранее в этом руководстве. PVC запросил область хранения на 100 ГиБ.

  1. Проверьте текущий размер ПВХ и файловой системы внутри модуля pod с помощью kubectl exec команды для выполнения df -h команды внутри модуля pod:

    kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
    

    Выходные данные должны выглядеть примерно так, как показано, что файловая система имеет размер 100 ГБ:

    Filesystem                                                                                      Size  Used Avail Use% Mounted on
    //a123b4c567de89fghi01jk2.file.core.windows.net/pvc-00aa00aa-bb11-cc22-dd33-44ee44ee44ee  100G  128K  100G   1% /mnt/azurefile
    
  2. Расширьте PVC, увеличив поле spec.resources.requests.storage с помощью команды kubectl patch. В этом примере мы увеличим общую папку до 200 ГиБ:

    kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'
    

    Выходные данные должны выглядеть примерно следующим образом, что показывает успешное исправление PVC:

    persistentvolumeclaim/pvc-azurefile patched
    
  3. Убедитесь, что размер ПВХ был успешно изменен, и новый размер отражается в модуле pod с помощью kubectl get pvc команды и df -h команды внутри модуля pod:

    kubectl get pvc pvc-azurefile
    

    Выходные данные должны выглядеть примерно так, как показано, что ПВХ по-прежнему находится в Bound состоянии, и емкость была обновлена до 200 ГиБ:

    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
    pvc-azurefile   Bound    pvc-00aa00aa-bb11-cc22-dd33-44ee44ee44ee   200Gi      RWX            azurefile-csi   64m
    
  4. Проверьте новый размер файловой системы в контейнере с помощью команды kubectl exec, чтобы выполнить команду df -h внутри контейнера:

    kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
    

    Выходные данные должны выглядеть примерно так, как показано, что размер файловой системы составляет 200 ГБ:

    Filesystem                                                                                Size  Used Avail Use% Mounted on
    //a123b4c567de89fghi01jk2.file.core.windows.net/pvc-bbbbbbbb-1111-2222-3333-cccccccccccc  200G  128K  200G   1% /mnt/azurefile
    

Использование постоянного тома с частным хранилищем Файлов Azure (частная конечная точка)

Если ресурсы Файлы Azure защищены с помощью частной конечной точки, необходимо создать собственный класс хранилища. Убедитесь, что параметры DNS настроены для разрешения IP-адреса частной конечной точки в полное доменное имя строка подключения. При создании класса хранилища с помощью драйвера CSI файлов Azure необходимо указать параметр networkEndpointType со значением privateEndpoint, а также предоставить следующие параметры:

  • resourceGroup: группа ресурсов, в которой развернута учетная запись хранения.
  • storageAccount: имя учетной записи хранения.
  • server: полное доменное имя частной конечной точки учетной записи хранения.
  1. Создайте файл с именем private-azure-file-sc.yaml и вставьте следующий манифест. Убедитесь, что вы заменили заполнители <resourceGroup> и <storageAccountName>.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: private-azurefile-csi
    provisioner: file.csi.azure.com
    allowVolumeExpansion: true
    parameters:
      resourceGroup: <resourceGroup>
      storageAccount: <storageAccountName>
      server: <storageAccountName>.file.core.windows.net
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict  # https://linux.die.net/man/8/mount.cifs
      - nosharesock  # reduce probability of reconnect race
      - actimeo=30  # reduce latency for metadata-heavy workload
    
  2. Создайте класс хранилища с помощью kubectl apply команды:

    kubectl apply -f private-azure-file-sc.yaml
    

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

    storageclass.storage.k8s.io/private-azurefile-csi created
    
  3. Создайте файл с именем private-pvc.yaml и вставьте его в следующий манифест. Убедитесь, что storageClassName соответствует имени существующего класса хранилища.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: private-azurefile-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: private-azurefile-csi
      resources:
        requests:
          storage: 100Gi
    
  4. Создайте ПВХ с помощью kubectl apply команды.

    kubectl apply -f private-pvc.yaml
    

Использование файлов Azure с контейнерами Windows

Драйвер CSI для Azure Files также поддерживает узлы и контейнеры Windows. Чтобы использовать контейнеры Windows, см. статью Краткое руководство по контейнерам Windows, чтобы добавить пул узлов Windows. После того как у вас есть пул узлов Windows, можно использовать встроенные классы хранения, например azurefile-csi или создать пользовательский. Пример набора с состоянием, работающего на Windows в этом разделе сохраняет метки времени в файл data.txt каждую секунду, который монтируется в общий ресурс Azure с помощью драйвера CSI для Azure Files.

  1. Создайте StatefulSet с помощью команды kubectl apply.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yaml
    

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

    statefulset.apps/busybox-azurefile created
    
  2. Убедитесь, что метки времени записываются в общую папку с помощью следующих kubectl exec команд для выполнения cat команды внутри pod:

    kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux/MacOS Bash
    kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell/CMD
    

    Ваши выходные данные должны выглядеть следующим образом, показывая, что метки времени записываются в общую папку каждую секунду:

    2020-08-27 22:11:01Z
    2020-08-27 22:11:02Z
    2020-08-27 22:11:04Z
    (...)
    

Использование протокола NFS с файлами Azure

Служба "Файлы Azure" поддерживает протокол NFS версии 4.1. Поддержка версии NFS 4.1 для файлов Azure предоставляет полностью управляемую файловую систему NFS как услугу, построенную на высокодоступной и надежной распределенной платформе хранения данных.

Этот параметр оптимизирован для рабочих нагрузок произвольного доступа с обновлениями данных на месте и обеспечивает полную поддержку файловой системы POSIX. В этом разделе показано, как использовать общие папки NFS с драйвером CSI Azure Files в кластере AKS.

Предварительные требования для использования общих папок NFS с файлами Azure

  • Идентификатор плоскости управления вашего кластера AKS (то есть, имя вашего кластера AKS) добавляется к роли Contributor в виртуальной сети и NetworkSecurityGroup.
  • Для кластеров AKS, служебный принципал или управляемое удостоверение службы (MSI) должны быть добавлены в роль Участника к аккаунту хранилища.

Замечание

Вы можете использовать частную конечную точку вместо предоставления доступа к выбранной виртуальной сети.

Оптимизация параметров размера чтения и записи

В этом разделе содержатся сведения по оптимизации производительности NFS с драйвером CSI файлов Azure с параметрами rsize и wsize. Опции rsize и wsize устанавливают максимальный размер передачи для операций NFS. Если rsize или wsize не указано при подключении, клиент и сервер договариваются о наибольшем размере, поддерживаемом обоими. В настоящее время как файлы Azure, так и современные дистрибутивы Linux поддерживают размеры чтения и записи размером 1 048 576 байт (1 МиБ).

Оптимальная производительность основана на эффективном обмене данными между клиентом и сервером. Увеличение или уменьшение значений размера опций чтения и записи может повысить производительность NFS. Размер пакетов чтения и записи, передаваемых между клиентом и сервером, по умолчанию — 8 КБ для NFS версии 2 и 32 КБ для NFS версии 3 и 4. Эти значения по умолчанию могут быть слишком большими или слишком маленькими. Уменьшение rsize и wsize может улучшить производительность NFS в перегруженной сети за счет отправки более мелких пакетов для каждого ответа на чтение NFS и запроса на запись. Однако это может увеличить количество пакетов, необходимых для отправки данных по сети, что увеличивает общий сетевой трафик и использование ЦП на клиенте и сервере.

Важно выполнить тестирование, чтобы найти rsize и wsize, которые поддерживают эффективную передачу пакетов и не уменьшают пропускную способность и не увеличивают задержку.

Следующий пример манифеста настраивает раздел mountOptions в классе хранилища с максимальным значением rsize и wsize, равным 256 КиБ.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30
  - rsize=262144
  - wsize=262144

Для списка поддерживаемых mountOptions см. параметры подключения NFS.

Создание класса хранения общей папки NFS

Замечание

vers, minorversion, sec настраиваются драйвером CSI файлов Azure. Указание значения в манифесте для этих свойств не поддерживается.

  1. Создайте файл с именем nfs-sc.yaml и вставьте его в следующий манифест. Обязательно укажите protocol: nfs в разделе параметров и настройте необходимые mountOptions параметры для рабочей нагрузки.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azurefile-csi-nfs
    provisioner: file.csi.azure.com
    allowVolumeExpansion: true
    parameters:
      protocol: nfs
    mountOptions:
      - nconnect=4
      - noresvport
      - actimeo=30
    
  2. После редактирования и сохранения файла создайте класс хранилища с помощью kubectl apply команды.

    kubectl apply -f nfs-sc.yaml
    

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

    storageclass.storage.k8s.io/azurefile-csi-nfs created
    

Создание набора с отслеживанием состояния с помощью общей папки с поддержкой NFS

  1. Создайте файл с именем nfs-ss.yaml и вставьте его в следующий манифест. Эта конфигурация сохраняет метки времени в файл data.txt.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-azurefile
      labels:
        app: nginx
    spec:
      podManagementPolicy: Parallel  # default is OrderedReady
      serviceName: statefulset-azurefile
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-azurefile
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              command:
                - "/bin/bash"
                - "-c"
                - set -euo pipefail; while true; do echo $(date) >> /mnt/azurefile/outfile; sleep 1; done
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/azurefile
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azurefile-csi-nfs
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Создайте StatefulSet с помощью команды kubectl apply.

    kubectl apply -f nfs-ss.yaml
    

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

    statefulset.apps/statefulset-azurefile created
    
  3. Проверьте содержимое тома с помощью следующей kubectl exec команды, чтобы выполнить df -h команду внутри pod:

    kubectl exec -it statefulset-azurefile-0 -- df -h
    

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

    Filesystem      Size  Used Avail Use% Mounted on
    ...
    /dev/sda1                                                                                 29G   11G   19G  37% /etc/hosts
    accountname.file.core.windows.net:/accountname/pvc-cccccccc-2222-3333-4444-dddddddddddd  100G     0  100G   0% /mnt/azurefile
    ...
    

    Так как общая папка NFS находится в учетной записи хранения класса Premium, минимальный размер общей папки составляет 100 ГиБ. Если вы создаете PVC с небольшим размером хранилища, вы можете столкнуться с примерно такой ошибкой: Не удалось создать общую папку ... размер (5)....

Шифрование при передаче (EiT) для общих папок NFS (предварительная версия)

Замечание

Функция EiT теперь доступна в предварительной версии, начиная с AKS версии 1.33. Обратите внимание, что узлы Ubuntu 20.04, Azure Linux, arm64 и Windows в настоящее время не поддерживаются.

Эта функция поддерживается для следующих дистрибутивов Linux в этих поддерживаемых регионах.

Шифрование при передаче (EiT) гарантирует, что все операции чтения и записи в общие папки NFS в виртуальной сети шифруются, обеспечивая дополнительный уровень безопасности.

Задав encryptInTransit: "true" параметры класса хранилища, вы можете включить шифрование данных в транзитном режиме для общих папок Azure NFS. Рассмотрим пример.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
  encryptInTransit: "true"
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30

Использование управляемого удостоверения для доступа к хранилищу файлов Azure (предварительная версия)

Теперь служба "Файлы Azure" поддерживает аутентификацию на основе управляемых удостоверений для доступа SMB. Это позволяет приложениям безопасно получать доступ к файлам Azure без хранения учетных данных или управления ими.

Замечание

Поддержка управляемых удостоверений для файлов Azure в AKS доступна в предварительной версии, начиная с AKS версии 1.34 на узлах Linux.

Предварительные требования для использования управляемого удостоверения для доступа к хранилищу файлов Azure

  • Убедитесь, что удостоверение Kubelet, назначаемое пользователем , имеет Storage File Data SMB MI Admin роль в учетной записи хранения.
    • Если вы используете собственную учетную запись хранения, необходимо назначить Storage File Data SMB MI Admin роль назначенному пользователем удостоверению Kubelet в этой учетной записи хранения.
    • Если учетная запись хранения создается драйвером CSI, предоставьте Storage File Data SMB MI Admin роль группе ресурсов, в которой находится учетная запись хранения.
    • Если вы просто используете назначаемое пользователем по умолчанию встроенное удостоверение Kubelet, оно уже имеет необходимую Storage File Data SMB MI Admin роль в группе ресурсов управляемого узла.

Включите управляемую идентичность для динамических постоянных томов с помощью Azure Files

Чтобы включить управляемое удостоверение для динамически подготовленных томов, необходимо создать новый класс хранилища с параметрами: mountWithManagedIdentity, "true" и развернуть StatefulSet, используя этот класс хранилища.

В следующем примере манифеста настраивается класс хранилища для использования управляемого удостоверения для доступа к файлам Azure:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: azurefile-csi
provisioner: file.csi.azure.com
parameters:
   resourceGroup: EXISTING_RESOURCE_GROUP_NAME   # optional, node resource group by default if it's not provided
   storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided
   mountWithManagedIdentity: "true"
   # optional, clientID of the managed identity, kubelet identity would be used by default if it's not provided
   clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx"
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
   - dir_mode=0777  # modify this permission if you want to enhance the security
   - file_mode=0777
   - uid=0
   - gid=0
   - mfsymlinks
   - cache=strict  # https://linux.die.net/man/8/mount.cifs
   - nosharesock  # reduce probability of reconnect race
   - actimeo=30  # reduce latency for metadata-heavy workload
   - nobrl  # disable sending byte range lock requests to the server

Включение управляемой идентификации для статических PV в Azure Files.

Чтобы включить управляемое удостоверение для статических томов, необходимо создать PV с mountWithManagedIdentity: "true" и подключить PV к модулю pod вашего приложения.

В следующем примере манифеста настраивается PV для использования управляемой идентичности для доступа к файлам Azure.

apiVersion: v1
kind: PersistentVolume
metadata:
   name: pv-azurefile
spec:
   capacity:
   storage: 100Gi
   accessModes:
   - ReadWriteMany
   persistentVolumeReclaimPolicy: Retain
   storageClassName: azurefile-csi
   mountOptions:
   - dir_mode=0777  # modify this permission if you want to enhance the security
   - file_mode=0777
   - uid=0
   - gid=0
   - mfsymlinks
   - cache=strict  # https://linux.die.net/man/8/mount.cifs
   - nosharesock  # reduce probability of reconnect race
   - actimeo=30  # reduce latency for metadata-heavy workload
   - nobrl  # disable sending byte range lock requests to the server
   csi:
   driver: file.csi.azure.com
   # make sure volumeHandle is unique for every identical share in the cluster
   volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"
   volumeAttributes:
       resourceGroup: EXISTING_RESOURCE_GROUP_NAME   # optional, node resource group by default if it's not provided
       storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided
       shareName: EXISTING_FILE_SHARE_NAME
       mountWithManagedIdentity: "true"
       # optional, clientID of the managed identity, kubelet identity would be used by default if it's empty
       clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx"

Создание статического PV с помощью файлов Azure

В следующих разделах приведены инструкции по созданию статического ПВ с помощью файлов Azure. Статический ПВ — это постоянный том, который администратор создает вручную. Этот PV доступен для использования модулями pod в кластере. Чтобы использовать статический PV, создайте ПВХ, который ссылается на PV, а затем создадите модуль pod, который ссылается на ПВХ.

Параметры класса хранилища для статических PV в Azure Files

В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранилища для статических PVC с помощью файлов Azure:

Имя. Значение Доступные значения Обязательно Значение по умолчанию
volumeAttributes.resourceGroup Указывает имя группы ресурсов Azure. myResourceGroup нет Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер.
volumeAttributes.storageAccount Укажите существующее имя учетной записи хранения Azure. storageAccountName Да
volumeAttributes.shareName Укажите имя общей папки Azure. fileShareName Да
volumeAttributes.folderName Укажите имя папки в общей папке Azure. folderName нет Если имя папки не существует в общей папке, подключение завершится ошибкой.
volumeAttributes.protocol Укажите протокол общей папки. smb, nfs нет smb
volumeAttributes.server Указание адреса сервера учетной записи хранения Azure Например, существующий адрес сервера accountname.privatelink.file.core.windows.net. нет Если поле пустое, драйвер использует адрес учетной записи по умолчанию accountname.file.core.windows.net или другой суверенный облачный аккаунт.
--- Следующие параметры предназначены только для протокола SMB --- --- ---
volumeAttributes.secretName Укажите секретное имя, которое хранит имя и ключ учетной записи хранения. нет
volumeAttributes.secretNamespace Укажите пространство имен секрета. default,kube-system и т. д. нет Пространство имен ПВХ (csi.storage.k8s.io/pvc/namespace)
nodeStageSecretRef.name Укажите секретное имя, которое хранит имя и ключ учетной записи хранения. Существующее имя секрета. нет Если это пусто, драйвер использует удостоверение kubelet для получения ключа учетной записи.
nodeStageSecretRef.namespace Укажите пространство имен секрета. Пространство имен Kubernetes нет
--- Следующие параметры предназначены только для протокола NFS. --- --- ---
volumeAttributes.fsGroupChangePolicy Указывает, как драйвер изменяет владение томом. Модуль Pod securityContext.fsGroupChangePolicy игнорируется. OnRootMismatch(по умолчанию), AlwaysNone нет OnRootMismatch
volumeAttributes.mountPermissions Укажите разрешения смонтированной папки. Значение по умолчанию — 0777. нет

Создание общего файлового хранилища Azure

Прежде чем использовать файловое хранилище Azure Files в качестве тома Kubernetes, необходимо создать учетную запись хранилища Azure и файловое хранилище.

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

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

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

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Создайте учетную запись хранения с помощью az storage account create команды с параметром --sku . Следующая команда создает учетную запись хранения с помощью Standard_LRS SKU. Обязательно замените следующие заполнители:

    • myAKSStorageAccount с именем учетной записи хранения
    • nodeResourceGroupName с именем группы ресурсов, в которую размещаются узлы кластера AKS.
    • location с именем региона для создания ресурса. Это должен быть тот же регион, что и узлы кластера AKS.
    az storage account create --name myAKSStorageAccount --resource-group nodeResourceGroupName --location location --sku Standard_LRS
    
  3. Экспорт строки подключения в виде переменной среды, используемой для создания общей папки, с помощью команды [az storage account show-connection-string][az-storage-account-show-connection-string]. Обязательно замените storageAccountName на имя учетной записи хранения и resourceGroupName на имя группы ресурсов.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name storageAccountName --resource-group resourceGroupName -o tsv)
    

    Замечание

    Строки подключения должны быть защищены путём ротации ключей или хранения в Azure Key Vault. Дополнительные сведения о строках подключения см. в разделе "Настройка строк подключения службы хранилища Azure " и "Управление ключами доступа к учетной записи хранения". Для рабочих сред корпорация Майкрософт рекомендует использовать проверку подлинности идентификатора Microsoft Entra. Дополнительные сведения см. в статье Авторизация доступа к данным в службе хранилища Azure.

  4. Создайте общую папку az storage share create с помощью команды. Обязательно замените shareName своим именем для общего доступа.

    az storage share create --name shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. Экспортируйте ключ учетной записи хранилища как переменную среды, используя команду [az storage account keys list][az-storage-account-keys-list]. Обязательно замените storageAccountName на имя вашей учетной записи хранения, а resourceGroupName на имя группы ресурсов.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. Выведите имя и ключ учетной записи хранения с помощью следующей команды. Обратите внимание на ключ учетной записи хранения, который вы используете для создания секрета Kubernetes на следующем шаге.

    echo Storage account key: $STORAGE_KEY
    

Создайте секрет Kubernetes

Kubernetes требуются учетные данные для доступа к файловому ресурсу, который был создан на предыдущем шаге. Эти учетные данные хранятся в секрете Kubernetes, на который ссылается при создании модуля Pod Kubernetes.

  • Создайте секрет с помощью kubectl create secret команды. В следующем примере создается секрет с именем azure-secret и заполняется azurestorageaccountname и azurestorageaccountkey из предыдущего шага. Чтобы использовать существующую учетную запись Azure, укажите имя и ключ учетной записи.

    kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
    

Подключение общей папки в качестве постоянного тома

  1. Создайте новый файл с именем azurefiles-pv.yaml и вставьте в него следующее содержимое. В объекте csi измените resourceGroup, volumeHandle и shareName. Для параметров подключения значение fileMode по умолчанию и dirMode равно 0777.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
        driver: file.csi.azure.com
        volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"  # make sure this volumeid is unique for every identical share in the cluster
        volumeAttributes:
          shareName: aksshare
        nodeStageSecretRef:
          name: azure-secret
          namespace: default
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - uid=0
        - gid=0
        - mfsymlinks
        - cache=strict
        - nosharesock
        - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    
  2. Создайте PV, используя команду kubectl create.

    kubectl create -f azurefiles-pv.yaml
    
  3. Создайте файл с именем azurefiles-mount-options-pvc.yaml и вставьте в следующее содержимое. Убедитесь, что storageClassName совпадает с именем существующего класса хранилища, и volumeName совпадает с именем PV, созданного на предыдущем шаге.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. Создайте ПВХ с помощью kubectl apply команды.

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. Убедитесь, что ваш ПВХ создан и привязан к PV с помощью kubectl get команды.

    kubectl get pvc azurefile
    

    Выходные данные должны иметь следующий вид: ПВХ находится в Bound состоянии, и он привязан к ПВ с именем azurefile.

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. Обновите спецификацию контейнера, чтобы ссылаться на ПВХ и pod в YAML-файле. Рассмотрим пример.

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. Спецификация pod не может быть обновлена на месте, поэтому удалите модуль pod с помощью kubectl delete команды и повторно создайте его с помощью kubectl apply команды.

    kubectl delete pod mypod
    kubectl apply -f azure-files-pod.yaml
    

Подключение файловой общой папки в качестве встроенного тома

Замечание

Чтобы избежать проблем с производительностью, рекомендуется использовать постоянный том вместо встроенного тома, когда множество подов обращаются к одному файловому ресурсу. Встроенный том может получать доступ только к секретам в том же пространстве имен, что и pod. Чтобы указать другое пространство имен секрета, используйте постоянный том.

Чтобы подключить общую папку Файлы Azure в модуль pod, настройте том в спецификации контейнера.

  1. Создайте новый файл с именем azure-files-pod.yaml и вставьте в него следующее содержимое. Если имя общей папки или секретного имени изменено, обновите shareName и secretName. Вы также можете обновить mountPathпуть, по которому общая папка "Файлы" подключена в модуле pod. Для контейнеров Windows Server укажите путь в формате Windows, например mountPath

    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
              readOnly: false
      volumes:
        - name: azure
          csi:
            driver: file.csi.azure.com
            volumeAttributes:
              secretName: azure-secret  # required
              shareName: aksshare  # required
              mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock,nobrl'  # optional
    
  2. Создайте pod с помощью команды kubectl apply.

    kubectl apply -f azure-files-pod.yaml
    
  3. Просмотрите состояние pod с помощью kubectl describe команды:

    kubectl describe pod mypod