Создание и использование тома с хранилищем BLOB-объектов Azure в Служба Azure Kubernetes (AKS)
Контейнерные приложения часто требуются для обращения к данным и их хранения во внешнем томе данных. Если нескольким pod требуется одновременный доступ к одному и тому же тому хранилища, можно использовать хранилище больших двоичных объектов Azure для подключения с помощью blobfuse или Сетевой файловой системы (NFS).
Из этой статьи вы узнаете, как выполнять следующие задачи:
- Работа с динамическим постоянным томом (PV) путем установки драйвера интерфейса хранилища контейнеров (CSI) и динамического создания контейнера хранилища BLOB-объектов Azure для подключения к pod.
- Работа со статическим PV путем создания контейнера хранилища BLOB-объектов Azure или использования существующего и подключения его к pod.
Дополнительные сведения о томах Kubernetes см. в статье, посвященной возможностям хранения данных приложений в AKS.
Подготовка к работе
Включите драйвер CSI хранилища BLOB-объектов в кластере AKS.
Чтобы поддерживать учетную запись хранения Azure DataLake 2-го поколения при использовании подключения blobfuse, необходимо выполнить следующее:
- Чтобы создать учетную запись ADLS с помощью драйвера в динамической подготовке, укажите
isHnsEnabled: "true"
в параметрах класса хранилища. - Чтобы включить доступ blbfuse к учетной записи ADLS в статической подготовке, укажите параметр
--use-adls=true
подключения в постоянном томе. - Если вы собираетесь включить учетную запись хранения с иерархическим пространством имен, существующие постоянные тома следует повторно подключить с
--use-adls=true
параметром подключения.
- Чтобы создать учетную запись ADLS с помощью драйвера в динамической подготовке, укажите
Сведения о кэше blbfuse
- По умолчанию кэш blbfuse находится в каталоге
/mnt
. Если номер SKU виртуальной машины предоставляет временный диск,/mnt
каталог подключается к временному диску. Однако если номер SKU виртуальной машины не предоставляет временный диск,/mnt
каталог подключен на диске ОС, можно задать--tmp-path=
параметр подключения для указания другого каталога кэша.
- По умолчанию кэш blbfuse находится в каталоге
Динамическое подготовка тома
В этом разделе содержатся рекомендации для администраторов кластера, которые хотят подготовить один или несколько постоянных томов, включающих сведения о хранилище BLOB-объектов для использования рабочей нагрузкой. Утверждение постоянного тома (PVC) использует объект класса хранения для динамической подготовки контейнера хранилища больших двоичных объектов Azure.
Параметры класса хранилища для динамических постоянных томов
В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранилища для утверждения постоянного тома.
Имя | Описание: | Пример | Обязательно | Default value |
---|---|---|---|---|
skuName | Указывает тип учетной записи хранения Azure (псевдоним: storageAccountType ). |
Standard_LRS , , Premium_LRS Standard_GRS Standard_RAGRS |
No | Standard_LRS |
расположение | Укажите расположение Azure. | eastus |
No | Если он пуст, драйвер будет использовать то же имя расположения, что и текущий кластер. |
resourceGroup | Указывает имя группы ресурсов Azure. | myResourceGroup | No | Если он пуст, драйвер будет использовать то же имя группы ресурсов, что и текущий кластер. |
storageAccount | Указывает имя учетной записи хранения Azure. | storageAccountName | Нет | Если имя учетной записи хранения не указано, драйвер будет искать подходящую учетную запись хранения, соответствующую параметрам учетной записи в одной группе ресурсов. Если не удается найти соответствующую учетную запись хранения, она создаст новую. Однако если указано имя учетной записи хранения, учетная запись хранения должна существовать. |
networkEndpointType | Укажите тип сетевой конечной точки для учетной записи хранения, созданной драйвером. Если указан privateEndpoint, для учетной записи хранения создается частная конечная точка . В других случаях для протокола NFS будет создана конечная точка службы.1 | privateEndpoint |
No | Для кластера AKS добавьте имя кластера AKS в роль участника в группе ресурсов, где размещена виртуальная сеть. |
protocol | Указывает подключение blobfuse или подключение NFS версии 3. | fuse , nfs |
No | fuse |
containerName | Указывает имя существующего контейнера (каталога). | контейнер | No | Если этот параметр пуст, драйвер создает имя нового контейнера, начиная с pvc-fuse для blobfuse или pvc-nfs для NFS версии 3. |
containerNamePrefix | Указывает префикс каталога хранилища Azure, созданный драйвером. | my | Может содержать только строчные буквы, цифры и дефисы, а длина не должна превышать 21 символ. | No |
server | Указывает доменное имя учетной записи хранения Azure. | Существующее доменное имя службы доменных имен (DNS) учетной записи хранения, например, <storage-account>.privatelink.blob.core.windows.net . |
No | Если этот параметр пуст, драйвер использует доменное имя по умолчанию <storage-account>.blob.core.windows.net или другое доменное имя службы доменных имен (DNS) учетной записи хранения национального облака. |
allowBlobPublicAccess | Разрешает или запрещает общий доступ ко всем большим двоичным объектам или контейнерам для учетной записи хранения, созданной драйвером. | true ,false |
No | false |
storageEndpointSuffix | Указывает суффикс конечной точки хранилища Azure. | core.windows.net |
No | Если этот параметр пуст, драйвер будет использовать суффикс конечной точки хранилища по умолчанию в соответствии с облачной средой. |
tags | Теги будут созданы в новой учетной записи хранения. | Формат тега: 'foo=aaa,bar=bbb' | No | "" |
matchTags | Сопоставляет теги, когда драйвер пытается найти подходящую учетную запись хранения. | true ,false |
No | false |
--- | Следующие параметры предназначены только для blobfuse | --- | --- | --- |
subscriptionID | Указывает идентификатор подписки Azure, в которой будет создан каталог хранилища больших двоичных объектов. | Идентификатор подписки Azure | No | Если значение не пустое, необходимо указать resourceGroup . |
storeAccountKey | Указывает ключ учетной записи хранения для секрета Kubernetes. Примечание. false означает, что для получения ключа учетной записи драйвер использует удостоверение kubelet. |
true ,false |
No | true |
secretName; | Указывает имя секрета для хранения ключа учетной записи. | No | ||
secretNamespace | Указывает пространство имен секрета для хранения ключа учетной записи. | default ,kube-system и т. д. |
No | Пространство имен заявки на постоянный том |
isHnsEnabled | Включите Hierarchical namespace учетную запись хранения Azure Data Lake. |
true ,false |
No | false |
--- | Следующие параметры предназначены только для протокола NFS | --- | --- | --- |
mountPermissions | Укажите разрешения подключенной папки. | Значение по умолчанию — 0777 . Если задано значение 0 , драйвер не будет выполнять chmod после подключения. |
0777 |
No |
1 Если учетная запись хранения создается драйвером, необходимо указать networkEndpointType: privateEndpoint
только параметр в классе хранилища. Драйвер CSI создает частную конечную точку вместе с учетной записью. При наличии собственной учетной записи хранения необходимо создать частную конечную точку для учетной записи хранения.
Создает утверждение постоянного тома с помощью встроенного класса хранения
Утверждение постоянного тома (PVC) использует объект класса хранения для динамической подготовки контейнера хранилища больших двоичных объектов Azure. Следующий код YAML можно использовать, чтобы создать утверждение постоянного тома в размере 5 ГБ с доступом ReadWriteMany. Дополнительные сведения о режимах доступа см. в документации по постоянным томам Kubernetes.
Создайте файл
blob-nfs-pvc.yaml
и скопируйте в него следующий код YAML.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5Gi
Создайте утверждение постоянного тома с помощью команды create kubectl:
kubectl create -f blob-nfs-pvc.yaml
После ее выполнения будет создан контейнер хранилища больших двоичных объектов. Вы можете использовать команду kubectl get, чтобы просмотреть состояние PVC.
kubectl get pvc azure-blob-storage
Выходные данные команды будут выглядеть примерно так:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
azure-blob-storage Bound pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68 5Gi RWX azureblob-nfs-premium 92m
Использование утверждения постоянного тома
Следующий код YAML создает pod, использующий утверждение постоянного тома azure-blob-storage для подключения хранилища больших двоичных объектов Azure по пути /mnt/blob.
Создайте файл
blob-nfs-pv
и скопируйте в него следующий код YAML. Убедитесь, что claimName соответствует утверждению постоянного тома, созданному на предыдущем шаге.kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/blob" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-blob-storage
Создайте модуль pod с помощью команды kubectl apply.
kubectl apply -f blob-nfs-pv.yaml
Когда pod перейдет в рабочее состояние, выполните следующую команду, чтобы создать новый файл с именем
test.txt
.kubectl exec mypod -- touch /mnt/blob/test.txt
Чтобы проверить, правильно ли подключен диск, выполните следующую команду и убедитесь, что файл
test.txt
отображается в выходных данных:kubectl exec mypod -- ls /mnt/blob
Выходные данные команды будут выглядеть примерно так:
test.txt
Создание пользовательского класса хранения
Классы хранения по умолчанию соответствуют наиболее распространенным сценариям, но не всем. В некоторых случаях может потребоваться настроить собственный класс хранилища с помощью собственных параметров. В этом разделе приведены два примера. Первый использует протокол NFS, а второй использует blobfuse.
Класс хранения, использующий протокол NFS
В этом примере следующий манифест настраивает подключение контейнера хранилища больших двоичных объектов с помощью протокола NFS. Используйте его для добавления параметра тегов.
Создайте файл с именем
blob-nfs-sc.yaml
и вставьте в него следующий пример манифеста.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azureblob-nfs-premium provisioner: blob.csi.azure.com parameters: protocol: nfs tags: environment=Development volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - nconnect=4
Создайте класс хранения с помощью команды kubectl apply.
kubectl apply -f blob-nfs-sc.yaml
Выходные данные команды будут выглядеть примерно так:
storageclass.storage.k8s.io/blob-nfs-premium created
Класс хранения, использующий blobfuse
В этом примере следующий манифест настраивает использование blobfuse и подключает контейнер хранилища BLOB-объектов. Используйте его для обновления параметра skuName.
Создайте файл с именем
blobfuse-sc.yaml
и вставьте в него следующий пример манифеста.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azureblob-fuse-premium provisioner: blob.csi.azure.com parameters: skuName: Standard_GRS # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - -o allow_other - --file-cache-timeout-in-seconds=120 - --use-attr-cache=true - --cancel-list-on-mount-seconds=10 # prevent billing charges on mounting - -o attr_timeout=120 - -o entry_timeout=120 - -o negative_timeout=120 - --log-level=LOG_WARNING # LOG_WARNING, LOG_INFO, LOG_DEBUG - --cache-size-mb=1000 # Default will be 80% of available memory, eviction will happen beyond that.
Создайте класс хранения с помощью команды kubectl apply.
kubectl apply -f blobfuse-sc.yaml
Выходные данные команды будут выглядеть примерно так:
storageclass.storage.k8s.io/blob-fuse-premium created
Статическая подготовка тома
В этом разделе содержатся рекомендации для администраторов кластера, которые хотят создать один или несколько постоянных томов, включающих сведения о хранилище BLOB-объектов для использования рабочей нагрузкой.
Статические параметры подготовки для постоянных томов
В следующей таблице приведены параметры, которые можно использовать для определения постоянного тома.
Имя | Описание: | Пример | Обязательно | Default value |
---|---|---|---|---|
volumeHandle | Укажите значение, которое драйвер может использовать для уникальной идентификации контейнера BLOB-объектов хранилища в кластере. | Рекомендуемый способ создать уникальное значение — объединить глобально уникальное имя учетной записи хранения и имя контейнера: {account-name}_{container-name} Примечание. # / Символ зарезервирован для внутреннего использования и не может использоваться в дескрипторе тома. |
Да | |
volumeAttributes.resourceGroup | Укажите имя группы ресурсов Azure. | myResourceGroup | No | Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер. |
volumeAttributes.storageAccount | Укажите существующее имя учетной записи хранения Azure. | storageAccountName | Да | |
volumeAttributes.containerName | Укажите имя существующего контейнера. | контейнер | Да | |
volumeAttributes.protocol | Укажите подключение blobfuse или подключение NFS версии 3. | fuse , nfs |
No | fuse |
--- | Следующие параметры предназначены только для blobfuse | --- | --- | --- |
volumeAttributes.secretName | Имя секрета, включающее имя и ключ учетной записи хранения (применяется только для SMB). | No | ||
volumeAttributes.secretNamespace | Укажите пространство имен секрета для хранения ключа учетной записи. | default |
No | Пространство имен утверждения постоянного тома |
nodeStageSecretRef.name | Укажите имя секрета, которое хранит одно из следующих элементов:azurestorageaccountkey azurestorageaccountsastoken msisecret azurestoragespnclientsecret . |
No | Имя существующего секрета Kubernetes | |
nodeStageSecretRef.namespace | Укажите пространство имен секрета. | Пространство имен Kubernetes | Да | |
--- | Следующие параметры предназначены только для протокола NFS | --- | --- | --- |
volumeAttributes.mountPermissions | Укажите разрешения подключенной папки. | 0777 |
No | |
--- | Следующие параметры предназначены только для конфигурации с виртуальной сетью NFS | --- | --- | --- |
vnetResourceGroup | Укажите группу ресурсов виртуальной сети, в которой размещена виртуальная сеть. | myResourceGroup | No | Если этот параметр пуст, драйвер использует значение vnetResourceGroup , указанное в файле конфигурации облака Azure. |
vnetName | Укажите имя виртуальной сети. | aksVNet | No | Если этот параметр пуст, драйвер использует значение vnetName , указанное в файле конфигурации облака Azure. |
subnetName | Укажите имя существующей подсети узла агента. | aksSubnet | No | Если этот параметр пуст, драйвер использует значение subnetName , указанное в файле конфигурации облака Azure. |
--- | Следующие параметры предназначены только для следующего компонента: blobfuse Управляемое удостоверение и проверка подлинности на основе субъекта-службы |
--- | --- | --- |
volumeAttributes.AzureStorageAuthType | Укажите тип проверки подлинности. | Key , , SAS MSI SPN |
No | Key |
volumeAttributes.AzureStorageIdentityClientID | Укажите идентификатор клиента удостоверения. | No | ||
volumeAttributes.AzureStorageIdentityResourceID | Укажите идентификатор ресурса удостоверения. | No | ||
volumeAttributes.MSIEndpoint | Укажите конечную точку MSI. | No | ||
volumeAttributes.AzureStorageSPNClientID | Укажите идентификатор клиента для имени субъекта-службы Azure. | No | ||
volumeAttributes.AzureStorageSPNTenantID | Укажите идентификатор арендатора для имени субъекта-службы Azure. | No | ||
volumeAttributes.AzureStorageAADEndpoint | Укажите конечную точку Microsoft Entra. | No | ||
--- | Следующие параметры предназначены только для следующих компонентов: ключ учетной записи чтения blobfuse и маркер SAS из хранилища ключей | --- | --- | --- |
volumeAttributes.keyVaultURL | Укажите DNS-имя Azure Key Vault. | {имя_хранилища}.vault.azure.net | No | |
volumeAttributes.keyVaultSecretName | Укажите имя секрета Azure Key Vault. | Имя существующего секрета Azure Key Vault. | No | |
volumeAttributes.keyVaultSecretVersion | Версия секрета Azure Key Vault. | Существующая версия | No | Если этот параметр пуст, драйвер использует текущую версию. |
Создание контейнера хранилища BLOB-объектов
При создании ресурса хранилища BLOB-объектов Azure для использования с AKS можно создать ресурс в группе ресурсов узла. Такой подход позволит кластеру AKS получить доступ к ресурсу хранилища BLOB-объектов и управлять им.
В рамках этой статьи создайте контейнер в группе ресурсов узла. Сначала получите имя группы ресурсов, выполнив команду az aks show и добавив параметр запроса --query nodeResourceGroup
. В приведенном ниже примере показано, как получить группу ресурсов узла для кластера AKS myAKSCluster в группе ресурсов myResourceGroup:
az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
Выходные данные команды будут выглядеть примерно так:
MC_myResourceGroup_myAKSCluster_eastus
Затем создайте контейнер для хранения BLOB-объектов, выполнив действия, описанные в разделе Управление хранилищем BLOB-объектов, чтобы авторизовать доступ и создать контейнер.
Подключение тома
В этом разделе описано, как подключить постоянный том с помощью протокола NFS или Blobfuse.
При подключении хранилища BLOB-объектов с помощью протокола NFS версии 3 не выполняется проверка подлинности с помощью ключа учетной записи. Ваш кластер AKS должен располагаться в той же виртуальной сети, что и узел агента, или в пиринговой виртуальной сети. Единственный способ защитить данные в учетной записи хранения — настроить виртуальную сеть и другие параметры безопасности сети. Дополнительные сведения о настройке доступа NFS к учетной записи хранения см. в разделе Подключение хранилища BLOB-объектов с использованием протокола NFS 3.0.
В следующем примере показано, как подключить контейнер хранилища BLOB-объектов в качестве постоянного тома с использованием протокола NFS.
Создайте файл
pv-blob-nfs.yaml
и скопируйте в него следующий код YAML. В объектеstorageClass
изменитеresourceGroup
,storageAccount
иcontainerName
.Примечание.
volumeHandle
значение должно быть уникальным идентификатором тома для каждого идентичного контейнера BLOB-объектов хранилища в кластере. Символ#
и/
зарезервирован для внутреннего использования и не может использоваться.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: blob.csi.azure.com name: pv-blob spec: capacity: storage: 1Pi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain # If set as "Delete" container would be removed after pvc deletion storageClassName: azureblob-nfs-premium mountOptions: - nconnect=4 csi: driver: blob.csi.azure.com # make sure volumeid is unique for every identical storage blob container in the cluster # character `#` and `/` are reserved for internal use and cannot be used in volumehandle volumeHandle: account-name_container-name volumeAttributes: resourceGroup: resourceGroupName storageAccount: storageAccountName containerName: containerName protocol: nfs
Примечание.
Хотя атрибут емкости API Kubernetes является обязательным, это значение не используется драйвером CSI хранилища BLOB-объектов Azure, так как вы можете гибко записывать данные, пока не достигнете предела емкости учетной записи хранения. Значение атрибута
capacity
используется только для сопоставления размера между PersistentVolumes и PersistentVolumeClaims. Рекомендуется использовать вымышленное высокое значение. Модуль pod видит подключенный том с вымышленным размером 5 Петабайт.Выполните следующую команду, чтобы создать постоянный том с помощью команды kubectl create , ссылающейся на файл YAML, созданный ранее:
kubectl create -f pv-blob-nfs.yaml
pvc-blob-nfs.yaml
Создайте файл с помощью PersistentVolumeClaim. Например:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premium
Выполните следующую команду, чтобы создать утверждение постоянного тома с помощью команды kubectl create , ссылающейся на файл YAML, созданный ранее:
kubectl create -f pvc-blob-nfs.yaml
Использование постоянного тома
Следующий YAML создает модуль pod, использующий постоянный том или утверждение постоянного тома с именем ПВХ-BLOB, созданное /mnt/blob
ранее, для подключения хранилища BLOB-объектов Azure на пути.
Создайте файл
nginx-pod-blob.yaml
и скопируйте в него следующий код YAML. При создании постоянного тома для NFS или Blobfuse убедитесь в том, что параметр claimName совпадает с утверждением постоянного тома, созданного на предыдущем шаге при создании постоянного тома для NFS или Blobfuse.kind: Pod apiVersion: v1 metadata: name: nginx-blob spec: nodeSelector: "kubernetes.io/os": linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine name: nginx-blob volumeMounts: - name: blob01 mountPath: "/mnt/blob" readOnly: false volumes: - name: blob01 persistentVolumeClaim: claimName: pvc-blob
Выполните следующую команду, чтобы создать pod и подключить ПВХ с помощью команды kubectl create , ссылающейся на файл YAML, созданный ранее:
kubectl create -f nginx-pod-blob.yaml
Выполните следующую команду, чтобы создать интерактивный сеанс оболочки с объектом pod и проверить подключенное хранилище BLOB-объектов:
kubectl exec -it nginx-blob -- df -h
Выходные данные команды будут выглядеть примерно так:
Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...
Следующие шаги
- Сведения об использовании драйвера CSI для хранилища BLOB-объектов Azure см. в разделе Использование хранилища BLOB-объектов Azure с драйверами CSI.
- Соответствующие рекомендации см. в разделе Рекомендации по хранению и резервному копированию в AKS.
Azure Kubernetes Service