Использование драйвера хранилища дисков Azure (CSI) в Служба Azure Kubernetes (AKS)
Драйвер интерфейса хранилища контейнеров Azure (CSI) — это драйвер, соответствующий спецификации CSI, используемый Служба Azure Kubernetes (AKS) для управления жизненным циклом диска Azure.
CSI является стандартом для предоставления произвольных блоков и систем хранения файлов контейнерным рабочим нагрузкам на Kubernetes. После внедрения и использования CSI AKS сможет выполнять запись, развертывание и итерацию подключаемых модулей, чтобы предоставлять новые или улучшать существующие системы хранения в Kubernetes, не переходя к основному коду Kubernetes и не дожидаясь его циклов выпуска.
Сведения о создании кластера AKS с поддержкой драйвера CSI см. в статье Включение драйвера CSI в AKS. В этой статье описывается, как использовать драйвер CSI для диска Azure версии 1.
Примечание.
Драйвер CSI дисков Azure версии 2 (предварительная версия) повышает масштабируемость и уменьшает задержку отработки отказа pod. Он использует общие диски для подготовки реплик вложений на нескольких узлах кластера и интегрируется с планировщиком pod, чтобы обеспечить выбор узла с репликой вложения при отработке отказа pod. Драйвер CSI для дисков Azure версии 2 (предварительная версия) также предоставляет возможность точной настройки производительности. Если вы заинтересованы в участии в предварительной версии, отправьте запрос: https://aka.ms/DiskCSIv2Preview. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, поэтому возможны критические изменения на этапе предварительной версии. Предварительная версия не рекомендуется для рабочих нагрузок в рабочей среде. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.
Примечание.
Драйверы в дереве относятся к текущим драйверам хранилища, которые являются частью основного кода Kubernetes, а также новым драйверами CSI, которые являются подключаемыми модулями.
Функции драйвера CSI для дисков Azure
В дополнение к функциям драйвера в дереве драйвер Azure Disk CSI поддерживает следующие функции:
- Улучшения производительности во время параллельного подключения к диску и отсоединения
- Встроенные драйверы присоединяют или отсоединяют диски в последовательном режиме, а драйверы CSI присоединяют или отсоединяют диски в пакете. Наблюдается значительное улучшение, когда к одному узлу подключено несколько дисков.
- Поддерживаются SSD уровня "Премиум" версии 1 и версии 2.
PremiumV2_LRS
поддерживаетсяNone
только режим кэширования
- Поддержка дисков с избыточностью между зонами (ZRS)
- Типы дисков
Premium_ZRS
иStandardSSD_ZRS
поддерживаются. Диск ZRS можно запланировать на узле зоны или узле, не связанном с зоной, без ограничений, предполагающих, что том диска должен находиться в той же зоне, что и данный узел. Дополнительные сведения, включая поддерживаемые регионы, см. в разделе Хранилище, избыточное между зонами для управляемых дисков.
- Типы дисков
- Моментальный снимок
- Клон тома
- Изменение размера диска PV без простоев
Примечание.
В зависимости от используемого номера SKU виртуальной машины драйвер CSI диска Azure может иметь ограничение тома для каждого узла. Для некоторых мощных виртуальных машин (например, 16 ядер) ограничение составляет 64 тома на узел. Чтобы определить ограничение на номер SKU виртуальной машины, просмотрите столбец "Максимальное количество дисков данных" для каждого предлагаемого номера SKU виртуальной машины. Список предлагаемых номеров SKU виртуальных машин и их соответствующих подробных ограничений емкости см. в разделе "Размеры виртуальных машин общего назначения".
Использование постоянных томов CSI с дисками Azure
Постоянный том (PV) — это часть хранилища, которая подготовлена к использованию для модулей pod Kubernetes. Постоянный том может использоваться одним или несколькими модулями pod и может быть подготовлен динамически или статически. В этой статье описывается динамическое создание постоянных томов с помощью диска Azure, используемого одним модулем pod в кластере службы Azure Kubernetes (AKS). Сведения о статической подготовке см. в разделе Создание статического тома с дисками Azure.
Дополнительные сведения о томах Kubernetes см. в статье, посвященной возможностям хранения данных приложений в AKS.
Динамическое создание постоянных томов дисков Azure с помощью встроенных классов хранения
Класс хранения используется для определения того, как единица хранения создается динамически с помощью постоянного тома. Дополнительные сведения о классах хранения Kubernetes см. в разделе Классы хранения Kubernetes.
При использовании драйвера CSI дисков Azure в AKS существует два дополнительных встроенных StorageClasses
драйвера хранилища Azure Disk CSI. Дополнительные классы хранения CSI создаются вместе с кластером наряду с классами хранения по умолчанию в дереве.
managed-csi
использует локально избыточное хранилище на базе SSD ценовой категории "Стандартный" для создания управляемого диска. Действующий начиная с Kubernetes версии 1.29, в кластерах Служба Azure Kubernetes (AKS), развернутых в нескольких зонах доступности, этот класс хранилища использует хранилище, избыточное между зонами SSD Azure standard (ZRS), для создания управляемых дисков.managed-csi-premium
использует локально избыточное хранилище Azure ценовой категории "Премиум" для создания управляемого диска. Эффективно начиная с Kubernetes версии 1.29, в кластерах Служба Azure Kubernetes (AKS), развернутых в нескольких зонах доступности, этот класс хранилища использует хранилище, избыточное между зонами Azure Premium (ZRS), для создания управляемых дисков.
Политика освобождения емкости в обоих классах хранения гарантирует, что базовые диски Azure будут удалены при удалении соответствующего постоянного тома. Классы хранения также настраивают постоянный том на расширение. Вам нужно просто изменить заявку на постоянный том (PVC), поменяв размер на новый.
Чтобы использовать эти классы хранения, создайте PVC и соответствующий модуль, который ссылается на них и использует их. Заявка на постоянный том (PVC) используется для автоматической подготовки хранилища на основе класса хранения. Заявка на постоянный том может использовать один из предварительно созданных классов хранения или определяемый пользователем класс хранения для создания диска, управляемого Azure, для требуемого номера SKU и размера. При создании определения pod указывается заявка на постоянный том для запроса требуемого хранилища.
Создайте пример pod и соответствующую заявку на постоянный том, выполнив команду kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/pvc-azuredisk-csi.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/nginx-pod-azuredisk.yaml
Выходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created
Когда pod перейдет в рабочее состояние, выполните следующую команду, чтобы создать новый файл с именем test.txt
.
kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt
Чтобы проверить, правильно ли подключен диск, выполните следующую команду и убедитесь, что файл test.txt
отображается в выходных данных:
kubectl exec nginx-azuredisk -- ls /mnt/azuredisk
lost+found
outfile
test.txt
Создание пользовательского класса хранения
Классы хранения по умолчанию подходят для большинства распространенных сценариев. В некоторых случаях может потребоваться настроить собственный класс хранения с собственными параметрами. Например, вы захотите изменить класс volumeBindingMode
.
Можно использовать класс volumeBindingMode: Immediate
, гарантирующий изменение сразу же после создания заявки на постоянный том. Когда пулы узлов ограничены топологией, например, при использовании зон доступности, постоянные тома будут привязаны или подготовлены без знания требований расписания pod.
Для решения этой ситуации можно использовать volumeBindingMode: WaitForFirstConsumer
, что откладывает привязку и подготовку постоянных томов до тех пор, пока не будет создан модуль, использующий заявку на постоянный том. Таким образом, постоянный том будет подготовлен в зоне доступности (или другой топологии), указанной в ограничениях расписания Pod, и соответствовать ей. Классы хранения по умолчанию используют класс 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).
В следующей таблице приведены сведения обо всех параметрах.
Имя. | Значение | Доступное значение | Обязательно | Default value |
---|---|---|---|---|
resourceGroup | Группа ресурсов для хранения моментальных снимков | СУЩЕСТВУЮЩАЯ ГРУППА РЕСУРСОВ | No | Если этот параметр не указан, моментальный снимок будет храниться в той же группе ресурсов, что и исходные диски Azure |
Добавочного | Создание полного или добавочного моментального снимка | true , false |
No | true |
tags | Теги дисков Azure | Формат тега: 'key1=val1,key2=val2' | No | "" |
userAgent | Агент пользователя, используемый для отслеживания потребления услуг клиентами | No | Созданный useragent в формате driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Укажите идентификатор подписки Azure, в которой будут созданы диски Azure | Идентификатор подписки Azure | No | Если значение не пустое, 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
Теперь создадим моментальный снимок тома из заявки на постоянный том, который мы динамически создали в начале этого учебника, pvc-azuredisk
.
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>
Создание новой заявки на постоянный том на основе моментального снимка тома
Создание новой заявки на постоянный том на основе моментального снимка тома. Используйте моментальный снимок, созданный на предыдущем шаге, и создайте новую заявку на постоянный том и новый 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 см. в концептуальной документации по клонированию томов.
Драйвер CSI для дисков Azure поддерживает клонирование томов. Чтобы продемонстрировать, создайте клонированный том ранее созданного azuredisk-pvc
и новый pod для использования.
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
Изменение размера постоянного тома без простоев
Для PVC можно запросить больший объем. Измените объект заявки на постоянный том и укажите больший размер. Это изменение активирует расширение базового тома, которое производит резервное копирование постоянного тома.
Примечание.
Новый постоянный том никогда не будет создан для удовлетворения заявки. Вместо этого изменяется размер существующего тома.
В AKS встроенный класс хранения managed-csi
уже поддерживает расширение, поэтому используйте заявку PVC, созданную ранее с этим классом хранения. Заявка на постоянный том запросила постоянный том объемом 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
Разверните PVC, увеличив spec.resources.requests.storage
поле, посредством выполнения следующей команды:
kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
Примечание.
Сжатие постоянных томов сейчас не поддерживается. Попытка исправления существующего ПВХ с меньшим размером, чем текущий, приводит к следующему сообщению об ошибке: 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
(...)
И через несколько минут выполните следующие команды, чтобы подтвердить размер PVC:
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
Выполните следующую команду, чтобы подтвердить размер диска в модуле pod:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Выходные данные команды будут выглядеть примерно так:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Включение ускорения по запросу
Ускорение дисков по запросу позволяет при необходимости ускорить диск, если нужно повысить текущую производительность. В этой модели за каждое ускорение диска взимается дополнительная плата. Ускорение дисков по требованию доступно только для дисков SSD (цен. категория "Премиум") емкостью более 512 ГиБ. Дополнительные сведения о подготовленных операциях ввода-вывода в секунду дисков SSD (цен. категория "Премиум") и пропускной способности на диск см. в разделе Размер диска SSD премиум-класса. Другой способ — ускорение дисков за кредиты — это когда диск ускоряется только в том случае, если в его кредитном контейнере есть кредиты пакета данных. Ускорение на основе кредитов не приводит к дополнительным расходам при всплеске ускорения диска. Ускорение дисков за кредиты доступно только для дисков SSD цен. категории "Премиум" емкостью 512 ГиБ и меньше и дисков SSD цен. категории "Стандартный" емкостью 1024 ГиБ и меньше. Дополнительные сведения об ускорении по запросу см. в разделе Ускорение по запросу.
Внимание
Класс хранения по умолчанию отключил ускорение по запросу managed-csi-premium
и использует ускорение на основе кредитов. В любом диске SSD ценовой категории "Премиум", динамически созданном с помощью заявки на постоянный том на основе класса хранения по умолчанию managed-csi-premium
, пакетная передача по требованию также отключена.
Чтобы создать постоянный том диска SSD ценовой категории "Премиум" с включенным ускорением по запросу, можно создать новый класс хранения с параметром enableBursting с установленным значением true
как показано в следующем шаблоне YAML. Дополнительные сведения об ускорении по запросу см. в разделе Ускорение по запросу. Дополнительные сведения о создании собственного класса хранения с включенным ускорением по запросу см. в разделе Создание драйвера CSI с хранилищем класса «Премиум» с поддержкой ускорения дисков.
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
Контейнеры Windows
Драйвер CSI диска Azure поддерживает узлы и контейнеры Windows. Если вы хотите использовать контейнеры 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 busybox-azuredisk-0 -- cat c:\\mnt\\azuredisk\\data.txt # on Linux/MacOS Bash
kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Windows Powershell/CMD
Выходные данные команды будут выглядеть примерно так:
2020-08-27 08:13:41Z
2020-08-27 08:13:42Z
2020-08-27 08:13:44Z
(...)
Следующие шаги
- Сведения об использовании драйвера CSI для службы файлов Azure см. в статье Использование файлов Azure с драйвером CSI.
- Сведения об использовании драйвера CSI для хранилища BLOB-объектов Azure см. в разделе Использование хранилища BLOB-объектов Azure с драйверами CSI.
- Дополнительные сведения о рекомендациях по хранению см. в Рекомендации по хранению и резервному копированию в службе Azure Kubernetes.
- Дополнительные сведения о решениях хранилища на основе дисков см. в разделе "Решения на основе дисков" в AKS.
Azure Kubernetes Service