Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если нескольким pod'ам требуется одновременный доступ к тому же тому хранилища, можно использовать Файлы Azure для подключения с помощью протокола SMB или NFS. В этой статье показано, как динамически и статически создать файловое хранилище Azure Files для использования несколькими подами в кластере Службы Azure Kubernetes (AKS) с помощью Azure Files.
Замечание
Драйвер CSI для файлов Azure разрешает только подключение общих папок SMB с помощью ключевой аутентификации (NTLM версии 2), поэтому не поддерживает максимальный профиль безопасности параметров настроек общего доступа к файлам Azure. С другой стороны, подключение общих папок NFS не требует проверки подлинности на основе ключей.
Замечание
Мы рекомендуем FIO при выполнении тестов проверки производительности. Дополнительные сведения см. в статье о средствах и тестах для тестирования.
Предпосылки
- Azure CLI версии 2.0.59 или более поздней версии, установленной и настроенной. Найдите версию с помощью
az --versionкоманды. Чтобы выполнить установку или обновление, см. сведения в статье Установка Azure CLI. - Драйвер CSI файлов Azure включен в кластере AKS.
- Учетная запись хранения Azure.
- При выборе файловых ресурсов уровня "Стандартный" и "Премиум" важно понимать модель предоставления и требования к ожидаемому характеру использования, который планируется на Azure Files. Дополнительные сведения см. в статье Выбор уровня производительности Azure Files на основе шаблонов использования.
Использование встроенных классов хранилища для создания динамических 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 общую папку.
Создайте файл с именем
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Создайте класс хранилища с помощью
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".
Создайте файл с именем
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.Создайте ПВХ с помощью
kubectl applyкоманды.kubectl apply -f azure-file-pvc.yamlПросмотрите состояние ПВХ с помощью
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
Создайте файл с именем
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Создайте pod с помощью команды
kubectl apply.kubectl apply -f azure-pvc-files.yamlПросмотрите состояние 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
Рекомендуемые варианты подключения для общих папок 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
Рекомендуемые параметры подключения для общих папок 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 поддерживает создание моментальных снимков постоянных томов и общих файловых ресурсов.
Создайте класс снимка тома
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Создайте моментальный снимок тома из динамического 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Просмотрите состояние моментального снимка тома с помощью
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 ГиБ.
Проверьте текущий размер ПВХ и файловой системы внутри модуля 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Расширьте 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Убедитесь, что размер ПВХ был успешно изменен, и новый размер отражается в модуле 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Проверьте новый размер файловой системы в контейнере с помощью команды
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: полное доменное имя частной конечной точки учетной записи хранения.
Создайте файл с именем
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Создайте класс хранилища с помощью
kubectl applyкоманды:kubectl apply -f private-azure-file-sc.yamlВыходные данные должны выглядеть примерно так:
storageclass.storage.k8s.io/private-azurefile-csi createdСоздайте файл с именем
private-pvc.yamlи вставьте его в следующий манифест. Убедитесь, чтоstorageClassNameсоответствует имени существующего класса хранилища.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: private-azurefile-pvc spec: accessModes: - ReadWriteMany storageClassName: private-azurefile-csi resources: requests: storage: 100GiСоздайте ПВХ с помощью
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.
Создайте 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Убедитесь, что метки времени записываются в общую папку с помощью следующих
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. Указание значения в манифесте для этих свойств не поддерживается.
Создайте файл с именем
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После редактирования и сохранения файла создайте класс хранилища с помощью
kubectl applyкоманды.kubectl apply -f nfs-sc.yamlВыходные данные должны выглядеть примерно так:
storageclass.storage.k8s.io/azurefile-csi-nfs created
Создание набора с отслеживанием состояния с помощью общей папки с поддержкой NFS
Создайте файл с именем
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Создайте StatefulSet с помощью команды
kubectl apply.kubectl apply -f nfs-ss.yamlВыходные данные должны выглядеть примерно так:
statefulset.apps/statefulset-azurefile createdПроверьте содержимое тома с помощью следующей
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 и файловое хранилище.
Получите имя группы ресурсов узла кластера AKS с помощью
az aks showкоманды с параметром--query nodeResourceGroup.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsvВыходные данные команды будут выглядеть примерно так:
MC_myResourceGroup_myAKSCluster_eastusСоздайте учетную запись хранения с помощью
az storage account createкоманды с параметром--sku. Следующая команда создает учетную запись хранения с помощьюStandard_LRSSKU. Обязательно замените следующие заполнители:-
myAKSStorageAccountс именем учетной записи хранения -
nodeResourceGroupNameс именем группы ресурсов, в которую размещаются узлы кластера AKS. -
locationс именем региона для создания ресурса. Это должен быть тот же регион, что и узлы кластера AKS.
az storage account create --name myAKSStorageAccount --resource-group nodeResourceGroupName --location location --sku Standard_LRS-
Экспорт строки подключения в виде переменной среды, используемой для создания общей папки, с помощью команды [
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.
Создайте общую папку
az storage share createс помощью команды. Обязательно заменитеshareNameсвоим именем для общего доступа.az storage share create --name shareName --connection-string $AZURE_STORAGE_CONNECTION_STRINGЭкспортируйте ключ учетной записи хранилища как переменную среды, используя команду [
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)Выведите имя и ключ учетной записи хранения с помощью следующей команды. Обратите внимание на ключ учетной записи хранения, который вы используете для создания секрета 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
Подключение общей папки в качестве постоянного тома
Создайте новый файл с именем
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Создайте PV, используя команду
kubectl create.kubectl create -f azurefiles-pv.yamlСоздайте файл с именем 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Создайте ПВХ с помощью
kubectl applyкоманды.kubectl apply -f azurefiles-mount-options-pvc.yamlУбедитесь, что ваш ПВХ создан и привязан к PV с помощью
kubectl getкоманды.kubectl get pvc azurefileВыходные данные должны иметь следующий вид: ПВХ находится в
Boundсостоянии, и он привязан к ПВ с именем azurefile.NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5sОбновите спецификацию контейнера, чтобы ссылаться на ПВХ и pod в YAML-файле. Рассмотрим пример.
... volumes: - name: azure persistentVolumeClaim: claimName: azurefileСпецификация pod не может быть обновлена на месте, поэтому удалите модуль pod с помощью
kubectl deleteкоманды и повторно создайте его с помощьюkubectl applyкоманды.kubectl delete pod mypod kubectl apply -f azure-files-pod.yaml
Подключение файловой общой папки в качестве встроенного тома
Замечание
Чтобы избежать проблем с производительностью, рекомендуется использовать постоянный том вместо встроенного тома, когда множество подов обращаются к одному файловому ресурсу. Встроенный том может получать доступ только к секретам в том же пространстве имен, что и pod. Чтобы указать другое пространство имен секрета, используйте постоянный том.
Чтобы подключить общую папку Файлы Azure в модуль pod, настройте том в спецификации контейнера.
Создайте новый файл с именем
azure-files-pod.yamlи вставьте в него следующее содержимое. Если имя общей папки или секретного имени изменено, обновитеshareNameиsecretName. Вы также можете обновитьmountPathпуть, по которому общая папка "Файлы" подключена в модуле pod. Для контейнеров Windows Server укажите путь в формате Windows, напримерmountPathapiVersion: 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Создайте pod с помощью команды
kubectl apply.kubectl apply -f azure-files-pod.yamlПросмотрите состояние pod с помощью
kubectl describeкоманды:kubectl describe pod mypod