Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер интерфейса хранилища контейнеров Azure (CSI) — это драйвер, соответствующий спецификации CSI, используемый Служба Azure Kubernetes (AKS) для управления жизненным циклом диска Azure.
CSI является стандартом для подключения произвольных блоковых и файловых систем хранения к контейнеризованным рабочим нагрузкам на Kubernetes. После внедрения и использования CSI AKS сможет выполнять запись, развертывание и итерацию подключаемых модулей, чтобы предоставлять новые или улучшать существующие системы хранения в Kubernetes. Использование CSI-драйверов в AKS позволяет избежать необходимости изменять основной код Kubernetes и ожидать его циклов выпуска.
Сведения о создании кластера AKS с поддержкой драйвера CSI см. в статье Включение драйвера CSI в AKS. В этой статье описывается, как использовать драйвер CSI диска 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. Постоянный том может использоваться одним или несколькими модулями и может быть подготовлен динамически или статически. В этой статье показано, как динамически создавать PVs с использованием диска Azure для применения одним pod'ом в кластере AKS. Для статического выделения ресурсов см. раздел Создание статического тома с дисками Azure.
Для получения дополнительной информации о томах Kubernetes см. варианты хранения для приложений в AKS.
Динамически создавайте постоянные тома дисков (PVs) Azure с помощью встроенных классов хранения.
Класс хранения используется для определения того, как единица хранения создается динамически с помощью постоянного тома. Дополнительные сведения о классах хранения Kubernetes см. в разделе Классы хранения Kubernetes.
При использовании драйвера CSI дисков Azure в AKS существует еще два встроенных компонентов, которые используют драйвер хранения Azure Disk CSI. Дополнительные классы хранения CSI создаются вместе с кластером наряду с классами хранения по умолчанию в дереве.
-
managed-csi
использует локально-резервированное хранилище Azure Standard SSD для создания управляемого диска. Начиная с версии 1.29 Kubernetes, в кластерах службы Azure Kubernetes Service (AKS), развернутых в нескольких зонах доступности, этот класс хранилища использует зонально избыточное хранилище Azure Standard SSD (ZRS) для создания управляемых дисков. -
managed-csi-premium
: использует Premium LRS Azure для создания управляемого диска. Начиная с версии Kubernetes 1.29, в кластерах Службы Kubernetes Azure (AKS), развернутых в нескольких зонах доступности, этот класс хранилища использует зонально-избыточное хранилище Azure Premium (ZRS) для создания управляемых дисков.
Политика восстановления в обоих классах хранения гарантирует, что базовые диски Azure будут удалены при удалении соответствующего персистентного тома. Классы хранения также настраивают PV на расширение. Вам просто нужно изменить заявку на постоянный том (PVC), указав новый размер.
Чтобы использовать эти классы хранения, создайте PVC и соответствующий модуль, который ссылается на них и использует их. Заявка на постоянный том (PVC) используется для автоматической подготовки хранилища на основе класса хранения. Запрос на постоянный том может использовать один из предсозданных классов хранения или класс хранения, определяемый пользователем, для создания диска под управлением Azure для необходимого SKU и размера. При создании описания pod указывается PVC (заявка на постоянный том), чтобы запросить необходимое хранилище.
Создайте пример 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
, гарантирующий, что это происходит немедленно после создания запроса на постоянный том. Когда пулы узлов ограничены топологией, например, при использовании зон доступности, постоянные тома (PVs) могут быть привязаны или созданы без учета требований расписания pod.
Для решения этой ситуации можно использовать volumeBindingMode: WaitForFirstConsumer
, что откладывает привязку и подготовку постоянных томов до тех пор, пока не будет создан модуль, использующий заявку на постоянный том. Таким образом, постоянный том (PV) будет подготовлен в зоне доступности (или другой топологии), указанной в ограничениях планирования 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).
В следующей таблице приведены сведения обо всех параметрах.
Имя. | Значение | Доступное значение | Обязательно | Значение по умолчанию |
---|---|---|---|---|
resourceGroup | Группа ресурсов для хранения моментальных снимков | СУЩЕСТВУЮЩАЯ ГРУППА РЕСУРСОВ | Нет | Если этот параметр не указан, моментальный снимок будет храниться в той же группе ресурсов, что и исходные диски Azure |
постепенный | Создание полного или добавочного моментального снимка |
true , false |
Нет | true |
теги | Теги дисков Azure | Формат тега: 'key1=val1,key2=val2' | Нет | "" |
пользовательский агент | Агент пользователя, используемый для отслеживания потребления услуг клиентами | No | Созданный useragent в формате driverName/driverVersion compiler/version (OS-ARCH) |
|
ID подписки | Укажите идентификатор подписки 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
Теперь создадим моментальный снимок тома из заявки на постоянный том, который мы динамически создали в начале этого учебника, 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>
Создание новой заявки на постоянный том на основе моментального снимка тома
Вы можете создать новую заявку на постоянный том (Persistent Volume Claim, 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
Наконец, убедитесь, что это тот же PVC, созданный ранее, проверив его содержимое с помощью выполнения следующей команды:
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 можно запросить больший объем. Измените объект PVC и укажите больший размер. Это изменение активирует расширение базового тома, которое производит резервное копирование постоянного тома.
Примечание.
Новый постоянный том никогда не будет создан для удовлетворения заявки. Вместо этого изменяется размер существующего тома.
В AKS встроенный класс хранения managed-csi
уже поддерживает расширение, поэтому используйте заявку PVC, созданную ранее с этим классом хранения. PersistentVolumeClaim запросила постоянный том объемом 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"}}}}'
Примечание.
Сжатие постоянных томов сейчас не поддерживается. Попытка изменить существующий PVC на размер меньше текущего приводит к следующему сообщению об ошибке: 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
Выполните следующую команду, чтобы проверить размер диска в контейнере.
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 ГиБ. Дополнительные сведения о количестве операций ввода-вывода в секунду (IOPS) и пропускной способности на диск для премиальных 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