Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер CSI для хранения BLOB-объектов Azure — это драйвер, соответствующий спецификации CSI, используемый Службой Azure Kubernetes (AKS) для управления жизненным циклом хранения BLOB-объектов Azure. CSI является стандартом для предоставления контейнерным рабочим нагрузкам в Kubernetes доступа к произвольным системам блочного и файлового хранения.
После внедрения и использования CSI AKS теперь может записывать, развертывать и итеративно обновлять подключаемые модули для демонстрации новых или улучшения существующих систем хранения в Kubernetes. Использование драйверов CSI в AKS позволяет избежать вмешательства в основной код Kubernetes и ожидания его циклов выпуска.
При подключении хранилища BLOB-объектов Azure в виде файловой системы в контейнер или модуль pod позволяет использовать хранилище BLOB-объектов со многими приложениями, которые работают с большим объемом неструктурированных данных. Рассмотрим пример.
- Данные файла журнала
- Изображения, документы и потоковое видео или аудио
- Данные аварийного восстановления
Приложения получают доступ к данным, хранящимся в хранилище BLOB-объектов Azure, с помощью протокола BLOBFuse или сетевой файловой системы (NFS) 3.0. До внедрения драйвера CSI для хранения BLOB в Azure единственным вариантом была установка вручную неподдерживаемого драйвера для доступа к хранилищу BLOB из приложения, работающего в AKS. Если драйвер CSI хранилища объектов Blob в Azure включен в среде AKS, имеются два встроенных класса хранилища:
- azureblob-fuse-Premium
- azureblob-nfs-premium
Сведения о создании кластера AKS с поддержкой драйверов CSI см. в статье Драйверы CSI в AKS. Дополнительные сведения о различиях в доступе между каждым из типов хранилища Azure с использованием протокола NFS см. в статье Сравнение доступа к Файлам Azure, хранилищу BLOB-объектов и Azure NetApp Files с помощью NFS.
Драйвер интерфейса хранилища контейнеров Azure (CSI) — это драйвер, совместимый со спецификацией CSI, используемый службой Azure Kubernetes (AKS) для управления жизненным циклом диска Azure.
CSI является стандартом для предоставления контейнерным рабочим нагрузкам в Kubernetes доступа к произвольным системам блочного и файлового хранения. После внедрения и использования CSI AKS теперь может записывать, развертывать и итеративно обновлять подключаемые модули для демонстрации новых или улучшения существующих систем хранения в Kubernetes. Использование драйверов CSI в AKS позволяет избежать вмешательства в основной код Kubernetes и ожидания его циклов выпуска. Сведения о создании кластера AKS с поддержкой драйвера CSI см. в разделе "Включение драйвера CSI" в AKS.
Для получения дополнительной информации о томах Kubernetes см. варианты хранения для приложений в AKS.
Замечание
Драйверы в дереве относятся к текущим драйверам хранилища, которые являются частью основного кода Kubernetes, а также к новым драйверам CSI, которые являются подключаемыми модулями.
Драйвер интерфейса хранилища контейнеров Azure (CSI) — это драйвер, совместимый со спецификацией CSI, используемый службой Azure Kubernetes (AKS) для управления жизненным циклом общих папок Azure. CSI является стандартом для предоставления контейнерным рабочим нагрузкам в Kubernetes доступа к произвольным системам блочного и файлового хранения.
После внедрения и использования CSI AKS теперь может записывать, развертывать и итеративно обновлять подключаемые модули для демонстрации новых или улучшения существующих систем хранения в Kubernetes. Использование драйверов CSI в AKS позволяет избежать вмешательства в основной код Kubernetes и ожидания его циклов выпуска.
Сведения о создании кластера AKS с поддержкой драйверов CSI см. в статье Включение драйверов CSI в AKS.
Замечание
Драйверы в дереве относятся к текущим драйверам хранилища, которые являются частью основного кода Kubernetes, а также к новым драйверам CSI, которые являются подключаемыми модулями.
Функции драйвера Azure CSI
Драйвер CSI хранилища BLOB-объектов Azure поддерживает следующие функции:
- BlobFuse
- Протокол NFS 3.0
В дополнение к функциям драйвера в дереве драйвер Azure Disk CSI поддерживает следующие функции:
Улучшения производительности во время параллельного подключения к диску и отсоединения
- Драйверы в дереве присоединяют или отсоединяют диски в последовательном режиме, а драйверы CSI присоединяют или отсоединяют диски в пакетном режиме. Существует значительное улучшение при наличии нескольких дисков, присоединенных к одному узлу.
Поддерживаются SSD уровня "Премиум" версии 1 и версии 2.
-
PremiumV2_LRSподдерживает только режим кэшированияNone
-
Поддержка дисков с зональной избыточностью (ZRS)
-
Premium_ZRSПоддерживаютсяStandardSSD_ZRSтипы дисков. Диск ZRS можно запланировать на узловом или не-зоновом узле без условия, что том диска должен быть размещен в той же зоне, что и соответствующий узел. Дополнительные сведения, включая поддерживаемые регионы, см. в разделе "Хранение с избыточностью по зонам" для управляемых дисков.
-
Замечание
В зависимости от используемой категории SKU виртуальной машины, драйвер CSI диска Azure может иметь ограничение объема на узел. Для некоторых мощных виртуальных машин (например, 16 ядер) ограничение составляет 64 тома на узел. Чтобы определить ограничение на номер SKU виртуальной машины, просмотрите столбец "Максимальное количество дисков данных" для каждого предлагаемого номера SKU виртуальной машины. Список предлагаемых номеров SKU виртуальных машин и их соответствующих подробных ограничений емкости см. в разделе "Размеры виртуальных машин общего назначения".
Предпосылки
Необходимо установить и настроить Azure CLI версии 2.42 или более поздней версии. Чтобы узнать версию, выполните команду
az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI". Если вы установили расширение Azure CLIaks-preview, обязательно обновите расширение до последней версии, вызвав вызовaz extension update --name aks-preview.Выполните следующие действия, чтобы очистить драйвер с открытым исходным кодом , если вы ранее установили драйвер хранилища BLOB-объектов CSI с открытым кодом для доступа к хранилищу BLOB-объектов Azure из кластера.
Удостоверение уровня управления кластером AKS (имя кластера AKS) добавляется в роль участника в виртуальной сети и группе безопасности сети.
Чтобы поддерживать [учетную запись Azure Data Lake Storage 2-го поколения][azure-datalake-storage-account] (ADLS) при использовании подключения BLOBFuse, выполните следующие действия:
- Чтобы создать учетную запись ADLS с помощью драйвера в динамической подготовке, укажите
isHnsEnabled: "true"в параметрах класса хранилища. - Чтобы разрешить доступ BlobFuse к учетной записи ADLS при статическом провижининге, укажите параметр монтирования
--use-adls=trueв постоянном томе. - Если вы собираетесь включить учетную запись хранения с иерархическим пространством имен, существующие постоянные тома (PV) следует повторно подключить с
--use-adls=trueпараметром подключения.
- Чтобы создать учетную запись ADLS с помощью драйвера в динамической подготовке, укажите
По умолчанию кэш BLOBFuse находится в каталоге
/mnt. Если SKU виртуальной машины предоставляет временный диск, каталог/mntподключается к временному диску. Однако, если SKU ВМ не предоставляет временный диск, каталог/mntмонтирован на диск ОС. Вы можете задать параметр монтирования--tmp-path=, чтобы указать другой каталог кэша.
Замечание
Если blobfuse-proxy не включен во время установки драйвера с открытым исходным кодом, удаление драйвера с открытым исходным кодом нарушает существующие подключения blbfuse. Однако подключения NFS остаются неизменными.
У вас должен быть кластер AKS с включенным драйвером CSI диска Azure. Драйвер CSI включен по умолчанию в кластерах AKS под управлением Kubernetes версии 1.21 или более поздней.
Azure CLI версии 2.37.0 или более поздней версии устанавливается и настраивается. Чтобы узнать версию, выполните команду
az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".Средство
kubectlкомандной строки установлено и настроено для подключения к кластеру AKS.Класс хранилища, настроенный для использования драйвера CSI диска Azure (
disk.csi.azure.com).Драйвер CSI диска Azure имеет ограничение тома для каждого узла. Количество томов изменяется на основе размера пула узлов или узлов. Выполните команду get kubectl, чтобы определить количество томов, которые можно выделить на узел:
kubectl get CSINode <nodename> -o yamlЕсли ограничение тома для каждого узла является проблемой для рабочей нагрузки, рассмотрите возможность использования хранилища контейнеров Azure для постоянных томов вместо драйверов CSI.
Общие требования:
У вас должен быть кластер AKS с включенным драйвером CSI для файлов Azure. Драйвер Azure Files CSI включен по умолчанию в кластерах AKS, работающих под управлением Kubernetes версии 1.21 или более поздней.
Azure CLI версии 2.37.0 или более поздней версии устанавливается и настраивается. Чтобы проверить версию, выполните команду
az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".Средство
kubectlкомандной строки установлено и настроено для подключения к кластеру AKS.Класс хранилища, настроенный для использования драйвера CSI Azure Files (
file.csi.azure.com).При выборе между файловыми хранилищами уровня "Стандартный" и "Премиум" важно понимать модель предоставления и требования к ожидаемому характеру использования, который вы планируете использовать в Azure Files. Дополнительные сведения см. в статье Выбор уровня производительности Azure Files на основе шаблонов использования.
Требования к сетевой общей папке (NFS):
Удостоверение уровня управления кластером AKS (имя кластера AKS) добавляется в роль участника в виртуальной сети и NetworkSecurityGroup.
Принципал службы вашего кластера AKS или управляемая идентичность службы (MSI) должна быть добавлена в роль Сотрудник для учетной записи хранения.
Требования к управляемому удостоверению:
Убедитесь, что удостоверению 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роль в группе ресурсов управляемого узла.
Замечание
Драйвер CSI для файлов Azure разрешает только подключение общих папок SMB с помощью ключевой аутентификации (NTLM версии 2), поэтому не поддерживает максимальный профиль безопасности параметров настроек общего доступа к файлам Azure. С другой стороны, подключение общих папок NFS не требует проверки подлинности на основе ключей.
Включение драйвера CSI в новом или существующем кластере AKS
С помощью Azure CLI можно включить драйвер CSI для Blob-хранилища в новом или существующем кластере AKS перед настройкой постоянного тома для использования подами в кластере.
Чтобы включить драйвер в новом кластере, включите параметр
--enable-blob-driverпри помощи командыaz aks create, как показано в следующем примере:az aks create \ --enable-blob-driver \ --name myAKSCluster \ --resource-group myResourceGroup \ --generate-ssh-keysЧтобы включить драйвер в существующем кластере, включите параметр
--enable-blob-driverпри помощи командыaz aks update, как показано в следующем примере:az aks update --enable-blob-driver --name myAKSCluster --resource-group myResourceGroup
Вам будет предложено подтвердить, что драйвер CSI BLOB-объектов с открытым кодом не установлен. После подтверждения может потребоваться несколько минут для выполнения этого действия. После завершения вы увидите в выходных данных состояние включения драйвера в кластере. В следующем примере показан раздел, указывающий результаты предыдущей команды:
"storageProfile": {
"blobCsiDriver": {
"enabled": true
},
...
}
Отключение драйвера CSI в существующем кластере AKS
С помощью Azure CLI можно отключить драйвер CSI хранилища Blob в существующем кластере AKS после того, как вы удалите постоянный том из кластера.
Чтобы отключить драйвер в существующем кластере, включите параметр
--disable-blob-driverпри помощи командыaz aks update, как показано в следующем примере:az aks update --disable-blob-driver --name myAKSCluster --resource-group myResourceGroup
Используйте постоянный том для хранения
Kubernetes назначает постоянный том (PV) в качестве ресурса хранилища одному или нескольким модулям pod. Вы можете динамически подготавливать PV через Kubernetes или статически в качестве администратора.
Если нескольким pod требуется одновременный доступ к одному тому хранилища, можно использовать хранилище Azure Blob для подключения с помощью NFS или BlobFuse. В этой статье показано, как в кластере AKS с помощью нескольких модулей pod динамически создать хранилище BLOB-объектов Azure.
Для получения дополнительной информации о томах Kubernetes см. варианты хранения для приложений в AKS.
Эта статья демонстрирует, как динамически создать PV с диском Azure для одного pod в кластере AKS.
Если нескольким модулям pod требуется одновременный доступ к одному тому хранилища, можно использовать файлы Azure для подключения с помощью блока сообщений сервера (SMB) или сетевой файловой системы (NFS). В этой статье показано, как динамически создавать общую папку Files Azure для использования несколькими подами в кластере AKS.
Динамически подготовленный том: Используйте этот подход, если требуется, чтобы Kubernetes автоматически создавал ресурсы хранилища и управлял ими. Это идеально подходит для сценариев, в которых требуется масштабирование по требованию, предпочитайте инфраструктуру как код и хотите свести к минимуму действия по настройке вручную.
Статически подготовленный том: Выберите этот метод, если у вас уже есть учетная запись Blob-хранилища Azure или контейнер, который вы хотите использовать. Он обеспечивает больший контроль над настройкой хранилища, доступом и жизненным циклом, а также подходит для подключения к существующим ресурсам или повторному использованию хранилища в нескольких кластерах или рабочих нагрузках.
В этом разделе содержатся рекомендации для администраторов кластера, которые хотят подготовить один или несколько постоянных томов, включающих сведения о Blob Storage для использования работой. Запрос на создание постоянного тома (PVC) использует объект класса хранилища для динамического выделения контейнера Blob-хранилища Azure.
Чтобы подготовить постоянный том с использованием Azure Blob Storage и заданного класса хранилища, выполните следующие действия.
StorageClassСоздайте манифест, сохранив следующий YAML в файл с именемblob-fuse-sc.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: blob-fuse provisioner: blob.csi.azure.com parameters: skuName: Premium_LRS # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS protocol: fuse2 networkEndpointType: privateEndpoint 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 specified value.Чтобы создать класс хранилища в кластере, выполните
StorageClassследующую команду:kubectl apply -f blob-fuse-sc.yaml
Создание ПВХ с помощью встроенного класса хранилища
Класс хранения используется для определения способа создания контейнера хранилища BLOB-объектов Azure. Для хранения контейнера хранилища BLOB-объектов Azure учетная запись хранения создается автоматически в группе ресурсов узла для использования с классом хранения. Выберите одно из следующих SKU избыточности хранилища Azure для skuName:
Замечание
Изменение любого ресурса в группе ресурсов узла в кластере AKS является неподдерживаемым действием и приведет к сбоям операции кластера. Дополнительные сведения см. в разделе Почему с AKS создаются две группы ресурсов?
- Standard_LRS — стандартное локально избыточное хранилище.
- Premium_LRS — локально избыточное хранилище класса Premium.
- Standard_ZRS: стандартное хранилище с зональной избыточностью
- Premium_ZRS: избыточное хранилище зоны "Премиум"
- Standard_GRS — стандартное геоизбыточное хранилище
- Standard_RAGRS — стандартное геоизбыточное хранилище с доступом только для чтения;
При использовании драйверов CSI хранилища в AKS имеются два других встроенных драйвера для объектов BLOB Azure.
Политика освобождения емкости в обоих классах хранения гарантирует, что базовое хранилище Azure Blob будет удалено при удалении соответствующего постоянного тома. Классы хранения также конфигурируют расширяемость контейнера по умолчанию, поскольку для параметра set allowVolumeExpansion задано значение true.
Замечание
Сжатие постоянных томов не поддерживается.
Используйте команду kubectl get sc, чтобы просмотреть классы хранения. В следующем примере демонстрируются классы хранения azureblob-fuse-premium и azureblob-nfs-premium, доступные для кластера AKS:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
azureblob-fuse-premium blob.csi.azure.com Delete Immediate true 23h
azureblob-nfs-premium blob.csi.azure.com Delete Immediate true 23h
Чтобы использовать эти классы хранения, создайте PVC и соответствующий модуль, который ссылается на них и использует их. ПВХ используется для автоматического выделения хранилища на основе класса хранения. Вы можете создать ПВХ с помощью одного из встроенных классов хранилища или пользовательского класса хранения. Этот ПВХ создает контейнер хранилища BLOB-объектов Azure с указанным номером SKU, размером и протоколом. При создании определения pod указывается PVC для запроса требуемого объема хранилища.
Запрос постоянного тома (PVC) использует объект класса хранилища для динамического выделения контейнера для BLOB-объектов Azure. Следующий YAML можно использовать для создания 5 ГиБ PVC с доступом 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Создайте ПВХ с помощью команды создания kubectl :
kubectl create -f blob-nfs-pvc.yaml
После его завершения создается контейнер хранилища BLOB-объектов. Команду kubectl get можно использовать для просмотра состояния ПВХ:
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 Blob по пути /mnt/blob.
Создайте файл с именем
blob-nfs-pvи скопируйте следующий YAML. Убедитесь, что имя утверждения соответствует ПВХ, созданному на предыдущем шаге.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
Создайте пользовательский класс хранения Azure Blob
Классы хранения по умолчанию соответствуют наиболее распространенным сценариям, но не всем. В некоторых случаях может потребоваться настроить собственный класс хранилища с собственными параметрами. В этом разделе приведены два примера с первым с помощью протокола NFS, а второй — с помощью BLOBFuse.
В этом примере следующий манифест настраивает монтирование контейнера объектного хранилища Blob с помощью протокола NFS. Используйте его для добавления tags параметра.
Создайте файл с именем
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
Монтирование NFS или BlobFuse PV
В этом разделе вы подключаете PV с помощью протокола NFS или BlobFuse.
Подключение хранилища Blob с помощью протокола NFS версии 3 не поддерживает аутентификацию с использованием ключа учетной записи. Кластер AKS должен находиться в той же или одноранговой виртуальной сети, что и узел агента. Единственным способом защиты данных в учетной записи хранения является использование виртуальной сети и других параметров безопасности сети. Для получения дополнительной информации о настройке доступа к учетной записи хранения через NFS см. статью «Монтирование Blob-хранилища с использованием протокола Network File System (NFS) 3.0».
В следующем примере показано, как подключить контейнер хранилища Blob как постоянный том с помощью протокола NFS.
Создайте файл
pv-blob-nfs.yamlи скопируйте в него следующий код YAML. В объектеstorageClassизменитеresourceGroup,storageAccountиcontainerName.Замечание
Значение
volumeHandleв вашем YAML должно быть уникальным идентификатором тома для каждого аналогичного контейнера объектов 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используется только для сопоставления размера между PVs и PVCs. Рекомендуется использовать вымышленное высокое значение. Модуль pod видит подключенный том с вымышленным размером 5 Петабайт.Выполните следующую команду, чтобы создать постоянный том с помощью команды kubectl create , ссылающейся на файл YAML, созданный ранее:
kubectl create -f pv-blob-nfs.yamlpvc-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
Создание модуля pod
Следующий YAML создает pod, использующий PV или PVC с именем pvc-blob, созданный ранее, для подключения хранилища Azure Blob по пути /mnt/blob.
Создайте файл
nginx-pod-blob.yamlи скопируйте в него следующий код YAML. Убедитесь, что имя утверждения соответствует ПВХ, созданному на предыдущем шаге при создании PV для 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 и подключить PVC с помощью команды kubectl create:
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 ...
Создайте StatefulSet
Чтобы рабочая нагрузка сохраняла объём хранилища при перезапусках или заменах модулей, используйте "StatefulSet". StatefulSets упрощает процесс связывания постоянного хранилища с модулями pod, чтобы новые модули pod, созданные для замены неудачных модулей, могли автоматически получать доступ к тем же томам хранилища. В следующих примерах показано, как настроить StatefulSet для хранилища BLOB-объектов с помощью протокола BLOBFuse или протокола NFS.
Создайте файл
azure-blob-nfs-ss.yamlи скопируйте в него следующий код YAML.apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-blob-nfs labels: app: nginx spec: serviceName: statefulset-blob-nfs replicas: 1 template: metadata: labels: app: nginx spec: nodeSelector: "kubernetes.io/os": linux containers: - name: statefulset-blob-nfs image: mcr.microsoft.com/azurelinux/base/nginx:1.25 volumeMounts: - name: persistent-storage mountPath: /mnt/blob updateStrategy: type: RollingUpdate selector: matchLabels: app: nginx volumeClaimTemplates: - metadata: name: persistent-storage spec: storageClassName: azureblob-nfs-premium accessModes: ["ReadWriteMany"] resources: requests: storage: 100GiСоздайте StatefulSet с
kubectl createпомощью команды:kubectl create -f azure-blob-nfs-ss.yaml
Параметры класса хранилища Динамического ПВХ
В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранения для динамического ПВХ.
| Имя | Description | Example | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| skuName | Укажите тип учетной записи хранения Azure (псевдоним: storageAccountType). |
Standard_LRS
Premium_LRS
Standard_GRS
Standard_RAGRS
|
нет | Standard_LRS |
| location | Укажите расположение Azure. | eastus |
нет | Если это пусто, драйвер использует то же имя расположения, что и текущий кластер. |
| resourceGroup | Указывает имя группы ресурсов Azure. | myResourceGroup | нет | Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер. |
| storageAccount | Указывает имя учетной записи хранения Azure. | storageAccountName | нет | Если имя определенной учетной записи хранения не указано, драйвер ищет подходящую учетную запись хранения, соответствующую параметрам учетной записи в той же группе ресурсов. Если не удается найти соответствующую учетную запись хранения, она создает новую. Однако если указано имя учетной записи хранения, учетная запись хранения должна существовать. |
| networkEndpointType 1 | Укажите тип сетевой конечной точки для учетной записи хранения, созданной драйвером. Если указан privateEndpoint, для учетной записи хранения создается частная конечная точка . В других случаях для протокола NFS создается конечная точка службы. | privateEndpoint |
нет | Для кластера AKS добавьте имя кластера AKS в роль участника в группе ресурсов, где размещена виртуальная сеть. |
| protocol | Укажите подключение BLOBFuse или подключение NFSv3. |
fuse, nfs |
нет | fuse |
| containerName | Укажите имя существующего каталога (контейнера). | container | нет | Если это пусто, драйвер создает новое имя контейнера, начиная с pvc-fuse BLOBFuse или pvc-nfs для NFS версии 3. |
| containerNamePrefix | Укажите префикс каталога хранилища Azure, созданный драйвером. | мой | нет | Может содержать только строчные буквы, цифры, дефисы и длину не более 21 символов. |
| server | Укажите доменное имя учетной записи хранения Azure. | Например <storage-account>.blob.core.windows.net, существующее доменное имя учетной записи хранения DNS. |
нет | Если пусто, драйвер использует доменное имя DNS учетной записи хранения по умолчанию <storage-account>.blob.core.windows.net или другое доменное имя суверенного облачного хранилища. |
| allowBlobPublicAccess | Разрешить или запретить общий доступ ко всем блобам или контейнерам учетной записи хранилища, созданной драйвером. |
true,false |
нет | false |
| storageEndpointSuffix | Укажите суффикс конечной точки хранилища Azure. | core.windows.net |
нет | Если это пусто, драйвер использует суффикс конечной точки хранилища по умолчанию в соответствии с облачной средой. |
| tags | [Теги][az-tags] будут созданы в новой учетной записи хранения. | Формат тега: 'foo=aaa,bar=bbb' | нет | "" |
| matchTags | Сопоставляет теги, когда драйвер пытается найти подходящую учетную запись хранения. |
true,false |
нет | false |
1 Если учетная запись хранения создается драйвером, необходимо указать networkEndpointType: privateEndpoint только параметр в классе хранилища. Драйвер CSI создает частную конечную точку и частную зону DNS (именованную privatelink.blob.core.windows.net) вместе с учетной записью. Если у вас есть собственная учетная запись хранения, необходимо создать частную конечную точку для аккаунта хранения. Если вы используете хранилище BLOB-объектов Azure в изолированном сетевом кластере, необходимо создать пользовательский класс хранилища с помощью networkEndpointType: privateEndpoint.
Параметры подготовки статических ПВ
В следующей таблице приведены параметры, которые можно использовать для определения статического ПВ.
| Имя | Description | Example | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| volumeHandle | Укажите значение, которое драйвер может использовать для уникальной идентификации контейнера объектов BLOB в кластере. | Рекомендуемый способ создать уникальное значение — объединить глобально уникальное имя учетной записи хранения и имя контейнера: {account-name}_{container-name} Символы # и / зарезервированы для внутреннего использования и не могут использоваться в дескрипторе тома. |
Да | |
| volumeAttributes.resourceGroup | Укажите имя группы ресурсов Azure. | myResourceGroup | нет | Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер. |
| volumeAttributes.storageAccount | Укажите существующее имя учетной записи хранения Azure. | storageAccountName | Да | |
| volumeAttributes.containerName | Укажите существующее имя контейнера. | container | Да | |
| volumeAttributes.protocol | Укажите подключение BLOBFuse или подключение NFS версии 3. |
fuse, nfs |
нет | fuse |
Создание PV дисков Azure с помощью встроенных классов хранилища
Класс хранилища используется для определения динамического создания единицы хранилища с помощью PV. Дополнительные сведения о классах хранения Kubernetes см. в разделе Классы хранения Kubernetes.
При использовании драйвера CSI дисков Azure в AKS есть ещё два дополнительных встроенных драйвера, использующих драйвер хранилища Azure Disk CSI. Дополнительные классы хранения CSI создаются вместе с кластером наряду с классами хранения по умолчанию в дереве.
managed-csi: создает управляемые диски на базе SSD Azure Standard с локально избыточным хранилищем (LRS). С помощью Kubernetes версии 1.29 для кластеров AKS, развернутых в нескольких зонах доступности, в этом классе хранилища применяется зонально-избыточное хранилище Azure Standard SSD (ZRS) для создания управляемых дисков.managed-csi-premium: Подготавливает управляемые диски с помощью Azure Premium LRS. Начиная с Kubernetes версии 1.29 для кластеров AKS, охватывающих несколько зон доступности, этот класс хранилища автоматически использует Azure Premium ZRS для создания управляемых дисков.
Эффективно начиная с Kubernetes версии 1.29, при развертывании кластеров Службы Azure Kubernetes (AKS) в нескольких зонах доступности, AKS теперь использует хранилище с избыточностью по зонам (ZRS) для создания управляемых дисков во встроенных классах хранилища.
ZRS обеспечивает синхронную репликацию управляемых дисков Azure в нескольких зонах доступности Azure в выбранном регионе. Эта стратегия избыточности повышает устойчивость приложений и защищает данные от сбоев центра обработки данных.
Однако важно отметить, что хранилище с избыточностью между зонами (ZRS) обходится дороже, чем локальное избыточное хранилище (LRS). Если оптимизация затрат является приоритетом, можно создать класс хранилища с параметром имени SKU LRS и использовать его в утверждении постоянного тома.
Уменьшение размера ПВХ не поддерживается из-за риска потери данных. Можно изменить существующий класс хранилища с помощью kubectl edit sc команды или создать собственный пользовательский класс хранилища. Например, если вы хотите использовать диск размером 4 ТиБ, необходимо создать класс хранилища, определяющий cachingmode: None , так как [кэширование дисков не поддерживается для дисков 4 ТиБ и большего размера][параметр кэша диска]. Дополнительные сведения о классах хранения и создании собственного класса хранения см. в статье Параметры хранилища для приложений в AKS.
Политика восстановления в обоих классах хранилища гарантирует, что базовые диски Azure удаляются при удалении соответствующего ПВ. Классы хранилища также настраивают PV для расширения. Вам просто нужно изменить ПВХ с новым размером.
Чтобы использовать эти классы хранения, создайте PVC и соответствующий pod, который ссылается на них и использует их. Заявка на постоянный том (PVC) используется для автоматической подготовки хранилища на основе класса хранения. ПВХ может использовать один из предварительно созданных классов хранилища или определяемый пользователем класс хранилища для создания управляемого Azure диска для требуемого SKU и размера. При создании определения pod указывается PVC для запроса требуемого объема хранилища.
Замечание
Запросы на постоянные тома указываются в GiB, но управляемые диски Azure выставляются с учетом SKU для определенного размера. Эти номера SKU варьируются от 32 ГиБ для дисков S4 или P4 и до 32 ТиБ для дисков S80 или P80 (в предварительной версии). Число операций ввода-вывода в секунду и пропускная способность управляемого диска (цен. категория "Премиум") зависят как от номера SKU, так и от размера экземпляров узлов в кластере AKS. Дополнительные сведения см. на странице Цены на управляемые диски.
Классы предварительно созданного kubectl get sc хранилища можно просмотреть с помощью команды. В следующем примере показаны готовые классы хранилища, доступные в кластере AKS:
kubectl get sc
Выходные данные команды будут выглядеть примерно так:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
ПВХ автоматически подготавливает хранилище на основе класса хранения. В этом случае ПВХ может использовать один из предварительно созданных классов хранилища для создания управляемого диска Azure уровня "Стандартный" или "Премиум".
Создайте файл
azure-pvc.yamlи скопируйте в него следующий манифест. Запрос на диск с именемazure-managed-disk, размером5 GBи доступомReadWriteOnce. managed-csi указан как класс хранения.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5GiПодсказка
Чтобы создать диск, который использует хранилище уровня "Премиум", используйте класс
storageClassName: managed-csi-premiumвместо managed-csi.Создайте утверждение постоянного тома с помощью
kubectl applyкоманды и укажите файл azure-pvc.yaml .kubectl apply -f azure-pvc.yamlВыходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/azure-managed-disk created
Применение PVC к модулю pod
После создания утверждения постоянного тома необходимо проверить состояние Pending. Состояние Pending указывает, что оно готово к использованию модулем pod.
Проверьте состояние ПВХ с помощью
kubectl describe pvcкоманды.kubectl describe pvc azure-managed-diskВыходные данные команды похожи на следующий сжатый пример:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]Создайте файл
azure-pvc-disk.yamlи скопируйте в него следующий манифест. Этот манифест создает базовый модуль NGINX pod, который использует запрос постоянного тома с именемazure-managed-diskдля монтирования диска Azure в путь/mnt/azure. Для контейнеров Windows Server укажитеmountPathсоглашение о пути Windows, например "D:".kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/azure" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-managed-diskСоздайте pod с помощью команды
kubectl apply.kubectl apply -f azure-pvc-disk.yamlВыходные данные команды будут выглядеть примерно так:
pod/mypod createdТеперь у вас есть работающий pod с диском Azure, подключенным к каталогу
/mnt/azure. Проверьте конфигурацию pod с помощьюkubectl describeкоманды.kubectl describe pod mypodВыходные данные команды будут выглядеть примерно так:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: azure-managed-disk ReadOnly: false default-token-smm2n: Type: Secret (a volume populated by a Secret) SecretName: default-token-smm2n Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned mypod to aks-nodepool1-79590246-0 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242" [...]
Параметры динамического класса хранилища для PVCs
В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранилища для pvCs.
| Имя | Meaning | Доступное значение | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| skuName | Тип учетной записи хранения дисков Azure (псевдоним: storageAccountType) |
Standard_LRS, Premium_LRS, StandardSSD_LRSPremiumV2_LRSUltraSSD_LRSPremium_ZRSStandardSSD_ZRS |
нет | StandardSSD_LRS |
| fsType | Тип файловой системы |
ext4, ext3, ext2, xfs, btrfs для Linux, ntfs для Windows |
нет |
ext4для Linux, ntfs для Windows |
| cachingMode | [Параметр кэша узла диска данных Azure][параметр disk-host-cache-setting](PremiumV2_LRS и UltraSSD_LRS поддерживают только режим кэширования None) |
None
ReadOnly
ReadWrite
|
нет | ReadOnly |
| resourceGroup | Укажите группу ресурсов для дисков Azure | Имя существующей группы ресурсов | нет | Если это пусто, драйвер использует то же имя группы ресурсов, что и текущий кластер AKS. |
| DiskIOPSReadWrite | [Диск UltraSSD][ультра-ssd-disks] или [Premium SSD версии 2][premiumv2_lrs_disks] Возможность ввода-вывода в секунду (минимум: 2 операций ввода-вывода в секунду/ГиБ) | 100~160000 | нет | 500 |
| DiskMBpsReadWrite | [Диск UltraSSD][ультра-ssd-disks] или [Premium SSD v2][premiumv2_lrs_disks] Пропускная способность (минимум: 0.032/ГиБ) | 1~2000 | нет | 100 |
| Размер логического сектора | Размер логического сектора в байтах для диска категории "Ультра". Поддерживаемые значения: 512 - 4096. Значение по умолчанию — 4096. |
512, 4096 |
нет | 4096 |
| tags | Диск Azure [теги][azure-tags] | Формат тега: key1=val1,key2=val2 |
нет | "" |
| diskEncryptionSetID | ResourceId набора шифрования дисков, который используется для [включения шифрования в состоянии покоя][шифрование диска] | формат: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
нет | "" |
| diskEncryptionType | Тип шифрования набора шифрования диска. |
EncryptionAtRestWithCustomerKey (по умолчанию) EncryptionAtRestWithPlatformAndCustomerKeys |
нет | "" |
| writeAcceleratorEnabled | [Ускоритель записи на дисках Azure][azure-disk-write-accelerator] |
true, false |
нет | "" |
| networkAccessPolicy | Свойство NetworkAccessPolicy для предотвращения создания универсального кода ресурса (URI) SAS для диска или моментального снимка |
AllowAll
DenyAll
AllowPrivate
|
нет | AllowAll |
| diskAccessID | Идентификатор ресурса Azure для ресурса DiskAccess для использования частных конечных точек на дисках | нет | `` | |
| enableBursting | [Включение бёрстинга по запросу][бёрстинг по запросу] за пределами заданного уровня производительности диска. Ускорение по запросу должно применяться только к диску категории "Премиум" и размеру > диска 512 ГБ. Диски ценовой категории "Ультра" и "Общий" не поддерживаются. Ускорение отключено по умолчанию. |
true, false |
нет | false |
| userAgent | Агент пользователя используется для [атрибутирования использования клиентами][customer-usage-attribution] | нет | Созданный агент пользователя отформатирован как driverName/driverVersion compiler/version (OS-ARCH) |
|
| subscriptionID | Укажите идентификатор подписки Azure, в которой создаются диски Azure. | Идентификатор подписки Azure | нет | Если значение не пустое, необходимо указать resourceGroup. |
Статические параметры подготовки для PV
В следующей таблице приведены параметры, которые можно использовать для определения pv.
| Имя | Meaning | Доступное значение | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| volumeHandle | URI диска Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Да | N/A |
| volumeAttributes.fsType | Тип файловой системы |
ext4, ext3, ext2, xfs, btrfs для Linux, ntfs для Windows |
нет |
ext4для Linux, ntfs для Windows |
| volumeAttributes.partition | Номер секции существующего диска (поддерживается только в Linux) |
1
2
3
|
нет | Пустой (без указания секции) — Убедитесь, что формат секции похож на следующий: -part1 |
| volumeAttributes.cachingMode | [Настройка кэша дискового хоста][настройка кэша дискового хоста] |
None
ReadOnly
ReadWrite
|
нет | ReadOnly |
Создание пользовательского класса хранилища диска Azure
Классы хранилища по умолчанию подходят для наиболее распространенных сценариев. В некоторых случаях может потребоваться настроить собственный класс хранения с собственными параметрами. Например, может потребоваться изменить volumeBindingMode класс.
Вы можете использовать volumeBindingMode: Immediate класс, который гарантирует его немедленное выполнение сразу после создания запроса на постоянный том (ПВХ). Если пулы узлов ограничены топологией, например при использовании зон доступности, PVs будет привязан или подготовлен без знаний о требованиях к планированию pod.
Для решения этого сценария можно использовать volumeBindingMode: WaitForFirstConsumer, что задерживает привязку и подготовку PV до создания модуля pod, использующего ПВХ. Этот подход гарантирует, что постоянный том (PV) подготавливается в той же зоне доступности или топологии, что и требует ограничения планирования пода. Классы хранилища по умолчанию используют volumeBindingMode: WaitForFirstConsumer класс.
Создайте файл с именем
sc-azuredisk-csi-waitforfirstconsumer.yamlи вставьте следующий манифест. Класс хранилища совпадает сmanaged-csiклассом хранилища, но с другимvolumeBindingModeклассом. Рассмотрим пример.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azuredisk-csi-waitforfirstconsumer provisioner: disk.csi.azure.com parameters: skuname: StandardSSD_LRS allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumerСоздайте класс хранилища, выполнив команду kubectl apply и укажите
sc-azuredisk-csi-waitforfirstconsumer.yamlфайл:kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yamlВыходные данные команды будут выглядеть примерно так:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
Узнайте о моментальных снимках тома
Драйвер CSI диска Azure поддерживает моментальные снимки томов, что позволяет записывать состояние постоянных томов в определенный момент времени для операций резервного копирования и восстановления. Снимки томов позволяют создавать копии постоянных данных на определенный момент времени без прерывания выполнения приложений. Эти моментальные снимки можно использовать для создания новых томов или восстановления существующих в предыдущем состоянии.
Вы можете создать два типа моментальных снимков:
Полные моментальные снимки: запечатление полного состояния диска.
Добавочные моментальные снимки: фиксируйте только изменения с момента последнего моментального снимка, обеспечивая лучшую эффективность хранения и экономию затрат. Инкрементные снимки — это поведение по умолчанию, когда параметр
incrementalустановлен наtrueв вашем VolumeSnapshotClass.
В следующей таблице приведены сведения об этих параметрах.
| Имя | Meaning | Доступное значение | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| resourceGroup | Группа ресурсов для хранения снимков. | СУЩЕСТВУЮЩАЯ ГРУППА РЕСУРСОВ | нет | Если это не указано, снимки хранятся в той же группе ресурсов, что и исходные диски Azure. |
| постепенный | Создайте полный или инкрементный моментальный снимок |
true, false |
нет | true |
| tags | Теги дисков Azure | Формат тега: "key1=val1,key2=val2" | нет | "" |
| userAgent | Агент пользователя, используемый для отслеживания потребления услуг клиентами | нет | Созданный useragent в формате driverName/driverVersion compiler/version (OS-ARCH) |
|
| subscriptionID | Укажите идентификатор подписки Azure, в которой создаются диски Azure | Идентификатор подписки Azure | нет | Если значение не пустое, resourceGroup необходимо указать, incremental должно быть установлено как false. |
Снимки состояния томов поддерживают следующие сценарии:
- Резервное копирование и восстановление: Создание моментальных снимков данных приложений, сохраняющих состояние, и их восстановление при необходимости.
- Клонирование данных. Клонирование существующих томов для создания новых постоянных томов с теми же данными.
- Аварийное восстановление: быстрое восстановление после потери или повреждения данных.
Создание моментального снимка тома
Замечание
Прежде чем продолжить, убедитесь, что приложение не записывает данные на исходный диск.
Например, создайте класс моментального снимка тома с помощью команды kubectl apply :
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yamlВыходные данные команды будут выглядеть примерно так:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc createdСоздайте моментальный снимок тома из ПВХ, созданного ранее в этой статье.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yamlВыходные данные команды будут выглядеть примерно так:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot createdЧтобы убедиться, что моментальный снимок был создан корректно, введите следующую команду:
kubectl describe volumesnapshot azuredisk-volume-snapshotВыходные данные команды будут выглядеть примерно так:
Name: azuredisk-volume-snapshot Namespace: default Labels: <none> Annotations: API Version: snapshot.storage.k8s.io/v1 Kind: VolumeSnapshot Metadata: Creation Timestamp: 2020-08-27T05:27:58Z Finalizers: snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection snapshot.storage.kubernetes.io/volumesnapshot-bound-protection Generation: 1 Resource Version: 714582 Self Link: /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot UID: dd953ab5-6c24-42d4-ad4a-f33180e0ef87 Spec: Source: Persistent Volume Claim Name: pvc-azuredisk Volume Snapshot Class Name: csi-azuredisk-vsc Status: Bound Volume Snapshot Content Name: snapcontent-dd953ab5-6c24-42d4-ad4a-f33180e0ef87 Creation Time: 2020-08-31T05:27:59Z Ready To Use: true Restore Size: 10Gi Events: <none>
Создание нового ПВХ на основе моментального снимка тома
Вы можете создать новый PVC на основе моментального снимка тома.
Используйте моментальный снимок, созданный на предыдущем шаге, и создайте новый ПВХ и новый модуль pod для его использования:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yamlВыходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created pod/nginx-restored createdЧтобы убедиться, что это тот же ПВХ, созданный ранее, проверьте содержимое, выполнив следующую команду:
kubectl exec nginx-restored -- ls /mnt/azurediskВыходные данные команды будут выглядеть примерно так:
lost+found outfile test.txt
Мы, как ожидалось, по-прежнему видим созданный ранее файл test.txt.
Клонирование томов
Клонированный том определяется как дубликат существующего тома Kubernetes. Дополнительные сведения о клонирование томов в Kubernetes см. в разделе клонирование томов.
Создайте клонированный том из созданного ранее тома
azuredisk-pvcи новый под для его использования.kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yamlВыходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/pvc-azuredisk-cloning created pod/nginx-restored-cloning createdВы можете проверить содержимое клонированного тома, выполнив следующую команду и убедившись, что файл
test.txtсоздан:kubectl exec nginx-restored-cloning -- ls /mnt/azurediskВыходные данные команды будут выглядеть примерно так:
lost+found outfile test.txt
Изменение размера диска Azure PV без простоя
Для PVC можно запросить больший объем. Измените объект PVC и укажите больший размер. Это изменение активирует расширение базового тома, которое производит резервное копирование постоянного тома.
Замечание
Новый постоянный том (Persistent Volume, PV) никогда не будет создан для удовлетворения запроса. Вместо этого изменяется размер существующего тома.
В AKS встроенный managed-csi класс хранилища уже поддерживает расширение, поэтому используйте созданный ранее класс хранилища. ПВХ попросил 10-Ги постоянный том. Чтобы подтвердить, выполните следующую команду:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Выходные данные команды будут выглядеть примерно так:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 9.8G 42M 9.8G 1% /mnt/azuredisk
Увеличьте PV, изменив
spec.resources.requests.storageполе, выполнив следующую команду:kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'Замечание
Сжатие PV в настоящее время не поддерживается. Попытка исправления существующего ПВХ с меньшим размером, чем текущий, приводит к следующему сообщению об ошибке:
The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.Выходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/pvc-azuredisk patchedВыполните следующую команду, чтобы убедиться, что размер тома увеличился:
kubectl get pvВыходные данные команды будут выглядеть примерно так:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO Delete Bound default/pvc-azuredisk managed-csi 2d2h (...)И через несколько минут выполните следующие команды, чтобы подтвердить размер ПВХ:
kubectl get pvc pvc-azurediskВыходные данные команды будут выглядеть примерно так:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO managed-csi 2d2hВыполните следующую команду, чтобы проверить размер диска внутри пода.
kubectl exec -it nginx-azuredisk -- df -h /mnt/azurediskВыходные данные команды будут выглядеть примерно так:
Filesystem Size Used Avail Use% Mounted on /dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Если в поде есть несколько контейнеров, можно указать, какой именно контейнер, выполнив следующую команду:
kubectl exec -it nginx-azuredisk -c <ContainerName> -- df -h /mnt/azuredisk
Контейнеры Windows
Драйвер CSI диска Azure поддерживает узлы и контейнеры Windows. Если вы хотите использовать контейнеры Windows, следуйте краткому руководству по добавлению пула узлов Windows.
После создания пула узлов Windows теперь можно использовать встроенные классы хранения, такие как
managed-csi. Вы можете развернуть пример набор состояния Windows, который сохраняет метки времени в файлеdata.txt, выполнив следующую команду kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yamlВыходные данные команды будут выглядеть примерно так:
statefulset.apps/busybox-azuredisk createdЧтобы проверить содержимое тома, выполните следующую команду:
kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"Выходные данные команды будут выглядеть примерно так:
2020-08-27 08:13:41Z 2020-08-27 08:13:42Z 2020-08-27 08:13:44Z (...)
Динамическое увеличение ресурсов по запросу
Модель всплеска производительности дисков по запросу позволяет увеличивать производительность диска в тех случаях, когда потребности диска превышают его текущую емкость. Эта модель создает дополнительные расходы в любой момент, когда диск рвется. Ускорение по запросу доступно только для SSD уровня "Премиум" размером более 512 ГиБ. Дополнительные сведения о премиум SSD с настройкой IOPS и обеспечиваемой пропускной способностью на каждый диск см. в разделе Размер премиум SSD. Кроме того, кредитный взрыв на основе кредитов заключается в том, где диск будет рваться только в том случае, если он накопил кредиты, накопленные в своем кредитном контейнере. Ускорение на основе кредитов не приводит к дополнительным затратам при всплеске диска. Кредитное увеличение доступно только для SSD премиум-класса объемом 512 ГиБ и меньшего размера, а также для стандартных SSD объемом 1024 ГиБ и меньше. Дополнительные сведения о всплеске по запросу см. в статье о всплеске по запросу.
Это важно
Класс хранилища по умолчанию managed-csi-premium имеет отключённый режим всплесковой нагрузки по требованию и использует всплесковую нагрузку на основе кредитов. Любые SSD уровня Premium, динамически созданные на основании запроса на выделение постоянного тома в соответствии с классом хранилища по умолчанию managed-csi-premium, также имеют отключенное ускорение по запросу.
Чтобы создать постоянный том SSD класса "Премиум" с включённым всплеском по запросу, создайте новый класс хранилища с параметром enableBurstingtrue, как показано в следующем шаблоне YAML. Дополнительные сведения о включении всплеска по запросу см. в разделе Всплеск по запросу. Дополнительные сведения о создании собственного класса хранилища с включенным ускорением по запросу см. в статье Создание класса хранилища CSI Premium с возможностью ускорения.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
skuname: Premium_LRS
enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Очистите ресурсы
После завершения работы с ресурсами, созданными в этой статье, их можно удалить с помощью kubectl delete команды.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Подготовка PV файлов Azure
Azure Files поддерживает файловые хранилища Azure Premium. Минимальная емкость общей папки составляет 100 ГиБ. Мы рекомендуем использовать общие папки Azure Premium вместо общих папок уровня "Стандартный", так как общие папки уровня "Премиум" обеспечивают более высокую производительность, низкую задержку на диске для рабочих нагрузок с интенсивным вводом-выводом. В общих папках Azure нет ограничений на то, сколько можно подключить к узлу. Для получения дополнительной информации о томах Kubernetes см. варианты хранения для приложений в AKS.
При использовании драйверов CSI хранилища в AKS имеются дополнительно два встроенных компонента, использующих драйверы хранения Azure Files CSI. Дополнительные классы хранения CSI создаются вместе с кластером наряду с классами хранения по умолчанию в дереве.
azurefile-csi: использует службу хранилища Azure уровня "Стандартный" для создания общей папки Azure.azurefile-csi-premium: использует Azure хранилище класса Premium для создания общей папки Azure.
Политика восстановления в обоих классах хранилища гарантирует, что базовая файловая общая папка Azure удаляется при удалении соответствующего PV. Поскольку классы хранения данных также настраивают общие ресурсы для расширения, вам просто нужно изменить PVC с новым размером.
Замечание
Чтобы получить лучший опыт работы с файлами Azure, следуйте этим рекомендациям. Расположение для настройки параметров монтирования (mountOptions) зависит от того, подготавливаете ли вы динамические или статические постоянные тома.
- Если вы динамически подготавливаете том с классом хранилища, укажите параметры подключения для объекта класса хранилища (тип:
StorageClass). - Если вы статически предоставляете том, укажите параметры монтирования для объекта PersistentVolume (тип:
PersistentVolume). - Если вы подключаете общую папку в виде встроенного тома, укажите параметры подключения в объекте Pod (тип:
Pod).
Мы рекомендуем FIO при выполнении тестов проверки производительности. Дополнительные сведения см. в статье о средствах и тестах для тестирования.
Класс хранения используется для определения того, как создается файловое хранилище Azure. Хранилищная учетная запись автоматически создается в группе ресурсов узлов для использования с классом хранилища для хранения общего ресурса файлов Azure. Выберите один из следующих вариантов избыточности хранилища Azure для skuName:
Замечание
Изменение любого ресурса в группе ресурсов узла в кластере AKS является неподдерживаемым действием и приведет к сбоям операции кластера. Дополнительные сведения см. в разделе Почему с AKS создаются две группы ресурсов?
- Standard_LRS — стандартное локально избыточное хранилище.
- Standard_GRS — стандартное геоизбыточное хранилище
- Standard_ZRS: стандартное зонально-избыточное хранилище
- Standard_RAGRS — стандартное геоизбыточное хранилище с доступом только для чтения;
- Standard_RAGZRS: стандартное хранилище с геозонной избыточностью для чтения
- Premium_LRS — локально избыточное хранилище класса Premium.
- Premium_ZRS: избыточное зональное хранилище уровня "премиум"
Дополнительные сведения о классах хранения Kubernetes для файлов Azure см. в разделе о классах хранения Kubernetes.
Создайте файл под названием
azure-file-sc.yamlи скопируйте в него следующий пример манифеста. Дополнительные сведения смmountOptions. в разделе "Параметры подключения ".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Создайте класс хранилища с помощью
kubectl applyкоманды.kubectl apply -f azure-file-sc.yaml
Создание ПВХ
В заявке на постоянный том используется объект класса хранилища для динамического предоставления общего файла Azure. Чтобы создать PVC размером 100 ГБ с доступом ReadWriteMany, используйте следующий YAML. Дополнительные сведения о режимах доступа см. в разделе "Постоянный том Kubernetes".
Создайте файл
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После завершения будет создан общий файловый ресурс. Также будет создан секрет Kubernetes, содержащий сведения о подключении и учетные данные. Вы можете использовать
kubectl getкоманду для просмотра состояния ПВХ:kubectl get pvc my-azurefileВыходные данные команды будут выглядеть примерно так:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-azurefile Bound pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477 100Gi RWX my-azurefile 5m
Установите ПВХ
В следующем YAML создается модуль pod, использующий файл PVC my-azurefile для подключения общей папки файлов Azure по пути /mnt/azure . Для контейнеров Windows Server укажите mountPath с использованием формата пути Windows, например "D:".
Создайте файл
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 с общим файлом Azure Files, подключенным в каталоге /mnt/azure . Эту конфигурацию можно увидеть, когда вы проверяете pod с помощью команды
kubectl describe. В следующем сжатом примере выходных данных показан том, подключенный к контейнеру.Containers: mypod: Container ID: docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e Image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine Image ID: docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424 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 [...]
Параметры подключения
Для версий Kubernetes 1.13.0 и более поздних значения по умолчанию для fileMode и dirMode установлены как 0777. При динамической подготовке PV с помощью класса хранилища можно определить параметры подключения непосредственно в манифесте класса хранилища. Дополнительные сведения см. в разделе "Параметры подключения". В следующем примере показано, как задать эти разрешения 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
Параметры класса хранилища для динамических томов
В следующей таблице приведены параметры, которые можно использовать для определения пользовательского класса хранения для ПВХ.
| Имя | Meaning | Доступное значение | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| accountAccessTier | Уровень доступа для учетной записи хранения | Стандартная учетная запись может выбрать Hot или Cool, а учетная запись Premium может выбрать только Premium. |
нет | Empty. Используйте параметр по умолчанию для различных типов учетных записей хранения. |
| accountQuota | Ограничивает квоту для учетной записи. Можно указать максимальную квоту в ГБ (102 400 ГБ по умолчанию). Если учетная запись превышает указанную квоту, драйвер пропускает выбор учетной записи. | нет | 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 1 | Укажите тип сетевой конечной точки для учетной записи хранения, созданной драйвером. Если 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' | нет | "" |
1 Если учетная запись хранения создается драйвером, необходимо указать 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
Параметры статической подготовки для PV
В следующей таблице приведены параметры, которые можно использовать для определения pv.
| Имя | Meaning | Доступное значение | Mandatory | Значение по умолчанию |
|---|---|---|---|---|
| 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 или другой суверенный облачный аккаунт. |
Создать класс моментальных снимков PV
Драйвер 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-azurefile).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 volumesnapshot azurefile-volume-snapshotВыходные данные команды будут выглядеть примерно так:
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: c359a38f-35c1-4fb1-9da9-2c06d35ca0f4 Spec: Source: Persistent Volume Claim Name: pvc-azurefile Volume Snapshot Class Name: csi-azurefile-vsc Status: Bound Volume Snapshot Content Name: snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4 Ready To Use: false Events: <none>
Изменение размера файлов Azure PV
Для PVC можно запросить больший объем. Измените объект PVC и укажите больший размер. Это изменение активирует расширение базового тома, которое производит резервное копирование постоянного тома.
Замечание
Новый постоянный том (Persistent Volume, PV) никогда не будет создан для удовлетворения запроса. Вместо этого изменяется размер существующего тома. Сжатие постоянных томов в настоящее время не поддерживается.
В AKS встроенный azurefile-csi класс хранилища уже поддерживает расширение, поэтому используйте ПВХ, созданный ранее с этим классом хранения. PVC запросил область хранения на 100 ГиБ. Это можно проверить, запустив:
kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
Выходные данные команды будут выглядеть примерно так:
Filesystem Size Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 100G 128K 100G 1% /mnt/azurefile
Расширьте PVC, увеличив поле
spec.resources.requests.storage:kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'Выходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/pvc-azurefile patchedУбедитесь, что как в PVC, так и в файловой системе внутри pod'а отображается новый размер.
kubectl get pvc pvc-azurefile NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azurefile Bound pvc-5e5d9980-da38-492b-8581-17e3cad01770 200Gi RWX azurefile-csi 64m kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile Filesystem Size Used Avail Use% Mounted on //f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 200G 128K 200G 1% /mnt/azurefile
Использование PV с частным хранилищем файлов Azure (частная конечная точка)
Если ресурсы Файлы Azure защищены с помощью частной конечной точки, необходимо создать собственный класс хранилища. Обязательно настройте параметры DNS для разрешения IP-адреса частной конечной точки в полное доменное имя строки подключения.
Настройте следующие параметры:
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и вставьте следующий пример манифеста в файл: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 (предварительная версия)
Теперь Azure Files поддерживает аутентификацию на основе управляемой идентичности для доступа к SMB. Благодаря этой возможности приложения, работающие в AKS, могут безопасно получать доступ к общим папкам Azure без необходимости хранить ключи или учетные данные учетной записи хранения или управлять ими. Управляемые удостоверения обеспечивают упрощенный и безопасный механизм проверки подлинности, упрощая управление доступом и уменьшая риск, связанный с воздействием учетных данных. Вы можете создать динамический том или статический том.
Замечание
Поддержка управляемых удостоверений для файлов Azure в AKS доступна в предварительной версии, начиная с AKS версии 1.34 на узлах Linux.
Чтобы включить управляемую идентификацию для динамически создаваемых томов, выполните следующие действия.
Создайте класс хранилища с активированным управляемым удостоверением с помощью YAML-файла, например,
azurefile-csi-managed-identity.yamlс таким содержанием. УстановитеmountWithManagedIdentity: "true"в разделеparameters.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Примените этот класс хранилища, выполнив следующую команду:
kubectl apply -f azurefile-csi-managed-identity.yamlРазверните StatefulSet или рабочую нагрузку, используя новый класс хранилища, который ссылается на этот том запроса на постоянный том (PVC), чтобы обеспечить подготовку тома с использованием аутентификации управляемой идентичности. В манифесте ПВХ установите
storageClassName: azurefile-csi-managed-identity. Рассмотрим пример.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile-managed-identity-pvc spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi-managed-identity resources: requests: storage: 100Gi
Сведения о службе "Файлы Azure" NFS
Файлы Azure поддерживают протокол NFS версии 4.1. Поддержка NFS версии 4.1 для файлов Azure предоставляет полностью управляемую систему NFS в качестве услуги, созданную на платформе высокодоступного, высокопрочного распределенного надежного хранилища.
Этот параметр оптимизирован для рабочих нагрузок произвольного доступа с обновлениями данных на месте и обеспечивает полную поддержку файловой системы POSIX. В этом разделе показано, как использовать общие папки NFS с драйвером CSI Azure Files в кластере AKS.
Замечание
Вы можете использовать частную конечную точку вместо предоставления доступа к выбранной виртуальной сети.
В этом разделе объясняется, как повысить производительность и безопасность при использовании Azure Files NFS 4.1 с AKS. Узнайте, как:
Оптимизация NFS параметров размера чтения и записи
Создание и настройка класса хранилища NFS
Развертывание рабочих нагрузок, использующих тома на базе NFS
Включите шифрование в транзитном режиме (EiT) для защиты данных при перемещении между кластером AKS и файлами Azure.
В этом разделе содержатся сведения о подходе к настройке производительности 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, которые поддерживают эффективную передачу пакетов, не снижая пропускную способность и не увеличивая задержку.
Например, чтобы настроить максимально rsize и wsize на 256-КиБ, настройте класс хранилища 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
- rsize=262144
- wsize=262144
Примеры других классов хранилища
Контейнеры Windows
Драйвер CSI для Azure Files также поддерживает узлы и контейнеры Windows. Чтобы использовать контейнеры Windows, см. статью Краткое руководство по контейнерам Windows, чтобы добавить пул узлов Windows.
После создания пула узлов Windows используйте встроенные классы хранения, например
azurefile-csi, или создайте настраиваемый. Вы можете развернуть пример набора с отслеживанием состояния на основе Windows, который сохранит метки времени в файлеdata.txt, выполнив команду 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 :
kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux or MacOS Bash kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell or CMDВыходные данные команд будут выглядеть примерно так:
2020-08-27 22:11:01Z 2020-08-27 22:11:02Z 2020-08-27 22:11:04Z (...)
Дальнейшие шаги
- Параметры драйвера CSI для Azure Files см. "Параметры драйвера CSI".
- Дополнительные сведения о решениях хранилища на основе дисков см. в разделе "Решения на основе дисков" в AKS.
- Дополнительные сведения о рекомендациях по хранению см. в рекомендациях по хранению и резервному копированию в службе Azure Kubernetes.
- Дополнительные сведения о дисках Azure Ultra см. в статье [Использование дисков Ultra в службе Azure Kubernetes (AKS)][использование ультра-дисков].
- Дополнительные сведения о тегах Azure см. в статье "Использование тегов Azure" в службе Azure Kubernetes (AKS).