Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure Container Storage — это облачная служба управления объёмами, развертывания и оркестрации, разработанная специально для контейнеров. В этой статье показано, как настроить хранилище контейнеров Azure для использования Azure Elastic SAN в качестве серверного хранилища для рабочих нагрузок Kubernetes.
Это важно
Эта статья относится к хранилищу контейнеров Azure (версия 2.x.x), которая поддерживает локальный диск NVMe и Azure Elastic SAN в качестве резервных типов хранилища. Дополнительные сведения о более ранних версиях см. в документации Azure хранилище контейнеров (версия 1.x.x.
Что такое Azure Elastic SAN?
Azure Elastic SAN — это управляемая служба хранилища блоков. Он предоставляет центральный пул емкости и производительности хранилища, включая IOPS и пропускную способность. В этом пуле вы создаете несколько томов и присоединяете их ко многим вычислительным ресурсам. Вместо подготовки и настройки отдельных дисков для каждой рабочей задачи Elastic SAN выделяет хранилище из единого пула емкости и распределяет производительность между подключенными томами. Этот подход подходит для сред с множеством динамических рабочих нагрузок, когда спрос изменяется с течением времени, и неиспользуемая производительность одного тома используется другими томами. Elastic SAN обычно используется для общего масштабируемого блочного хранилища на многих томах или узлах. Кроме того, она поддерживает более быстрое подключение и отсоединение томов для оркестрированных рабочих нагрузок, более высокую плотность томов на узел, а также централизованное развертывание и управление емкостью и производительностью хранилища.
Расширение емкости Elastic SAN через хранилище контейнеров Azure в настоящее время не поддерживается. Вы можете resize Elastic SAN непосредственно на портале Azure или с помощью Azure CLI.
Предварительные условия
Если у вас нет подписки Azure, создайте учетную запись free перед началом работы.
Для этой статьи требуется Azure CLI версии 2.83.0 или более поздней. Дополнительные сведения см. в статье Как установить Azure CLI. Отключите такие расширения, как
aks-previewесли возникают проблемы. Установите или обновите расширения по мере необходимости:az extension add --upgrade --name k8s-extension-
az extension add --upgrade --name elastic-san(только Elastic SAN)
Вам нужен клиент командной строки Kubernetes.
kubectlОн уже установлен, если вы используете Azure Cloud Shell. Его можно установить локально, выполнивaz aks install-cliкоманду.Проверьте, поддерживается ли целевой регион в регионах хранилища контейнеров Azure.
Изучите инструкции по установке и убедитесь, что Azure Container Storage установлено правильно.
Если вы используете Elastic SAN впервые в подписке, выполните следующую команду однократной регистрации:
az provider register --namespace Microsoft.ElasticSan
Настройка разрешений
Чтобы хранилище контейнеров Azure развернуло Elastic SAN, необходимо назначить роль Оператор хранилища контейнеров Azure управляемому удостоверению AKS. Для выполнения этого шага для вашей подписки на Azure потребуется роль владельца хранилища контейнеров Azure или участника хранилища контейнеров Azure.
Выполните следующие команды, чтобы назначить роли Azure Container Storage Operator вашему управляемому удостоверению AKS. Не забудьте заменить <resource-group>, <cluster-name>а <azure-subscription-id> также собственными значениями. Вы также можете сузить область для группы ресурсов, например /subscriptions/<azure-subscription-id>/resourceGroups/<resource-group>.
export AKS_MI_OBJECT_ID=$(az aks show --name <cluster-name> --resource-group <resource-group> --query "identityProfile.kubeletidentity.objectId" -o tsv)
az role assignment create --assignee $AKS_MI_OBJECT_ID --role "Azure Container Storage Operator" --scope "/subscriptions/<azure-subscription-id>"
Выбор модели подготовки
Хранилище контейнеров Azure поддерживает три способа использования Elastic SAN с Azure Kubernetes Service (AKS):
- Динамическая подготовка: Azure хранилище контейнеров создает группы и тома Elastic SAN по запросу.
- Подготовленная эластичная SAN и группа томов: Сначала вы создаете эластичную SAN и группу томов, а затем Azure Container Storage подготавливает тома внутри этих существующих ресурсов.
- Статическая подготовка: вы предварительно создаёте Elastic SAN, группу томов и том, а затем предоставьте том в Kubernetes как статически определённый постоянный том (PV).
В следующих разделах показано, как настроить класс хранилища для каждой модели.
Динамическая подготовка эластичной сети SAN
Создание класса хранилища по умолчанию
Создайте файл манифеста YAML, например storageclass.yaml, используйте следующую спецификацию.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azuresan-csi
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
Емкость Elastic SAN по умолчанию, подготовленная с помощью этого класса хранилища, составляет 1 ТиБ.
Кроме того, можно создать класс хранилища с помощью Terraform.
Используйте Terraform для управления классом хранения, создав конфигурацию, как показано ниже
main.tf. Обновите версию поставщика или путь kubeconfig по мере необходимости для вашей среды.terraform { required_version = ">= 1.5.0" required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~> 3.0" } } } provider "kubernetes" { config_path = "~/.kube/config" } resource "kubernetes_storage_class_v1" "azuresan_csi" { metadata { name = "azuresan-csi" } storage_provisioner = "san.csi.azure.com" reclaim_policy = "Delete" volume_binding_mode = "Immediate" allow_volume_expansion = true }Инициализация и применение конфигурации.
terraform init terraform apply
Создание класса хранилища с настраиваемой емкостью Elastic SAN
Если требуется другая начальная емкость, отличная от 1 ТиБ по умолчанию, задайте initialStorageTiB параметр в классе хранилища.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azuresan-csi
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
initialStorageTiB: "10"
Предварительно подготовленные эластичные SAN и группы томов
Вы можете предварительно создать эластичную SAN или эластичную SAN и группу томов, а затем ссылаться на эти ресурсы в классе хранилища.
Создание класса хранилища для предварительно подготовленной эластичной сети SAN
Если у вас еще не установлено Azure Container Storage, установите его.
Определите управляемую группу ресурсов кластера AKS.
kubectl get node -o jsonpath={range .items[*]}{.spec.providerID}{"\n"}{end}Группа ресурсов узла появится после
/resourceGroup/идентификатора поставщика.Создайте эластичную SAN в управляемой группе ресурсов.
az elastic-san create --resource-group <node-resource-group> --name <san-name> --location <node-region> --sku "{name:Premium_LRS,tier:Premium}" --base-size-tib 1 --extended-capacity-size-tib 1Создайте класс хранилища, который ссылается на эластичную SAN:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azuresan-csi provisioner: san.csi.azure.com reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true parameters: san: <san-name> # replace with the name of your precreated Elastic SAN
Создайте класс хранилища для заранее подготовленного Elastic SAN и группы томов.
Создайте эластичную SAN в управляемой группе ресурсов, выполнив действия, описанные в разделе "Создание класса хранилища для предварительно подготовленной эластичной SAN".
Создайте группу томов.
Получение сведений о виртуальной сети.
az network vnet list -g <node-resource-group> --query [].name -o tsvПолучение сведений о подсети.
az network vnet subnet list -g <node-resource-group> --vnet-name <vnet-name> --query [].name -o tsvОбновите конечную точку службы.
az network vnet subnet update -g <node-resource-group> --vnet-name <vnet-name> --name <subnet-name> --service-endpoints "Microsoft.Storage"Это важно
Если кластер AKS использует несколько пулов узлов в разных подсетях, необходимо включить идентификаторы всех подсетей пулов узлов в сетевые ACL группы томов Elastic SAN. Группы томов Elastic SAN разрешают доступ только из подсетей виртуальной сети, явно авторизованных в правилах группы томов, и запросы из других подсетей по умолчанию блокируются.
Создайте группу томов.
az elastic-san volume-group create --resource-group <node-resource-group> --elastic-san-name <san-name> --name <volume-group-name> --network-acls '{"virtual-network-rules":[{"id":"<subnet-id>","action":"Allow"}]}'Создайте класс хранилища, ссылающийся на Elastic SAN и группу томов:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azuresan-csi provisioner: san.csi.azure.com reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true parameters: san: <san-name> # replace with the name of your precreated Elastic SAN volumegroup: <volume-group-name> # replace with the name of your precreated volume group
Применение манифеста и проверка создания класса хранилища
Примените манифест:
kubectl apply -f storageclass.yaml
Убедитесь, что класс хранилища создан:
kubectl get storageclass azuresan-csi
Должен отобразиться примерно такой результат:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
azuresan-csi san.csi.azure.com Delete Immediate true 10s
Создать запрос на постоянное хранилище
Заявка на постоянный том ( PVC ) автоматически выделяет хранилище на основе класса хранения. Выполните следующие действия, чтобы создать PVC с помощью нового класса хранения.
Создайте файл манифеста YAML, например
acstor-pvc.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: managedpvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: azuresan-csiПримените манифест для создания PVC.
kubectl apply -f acstor-pvc.yamlДолжен отобразиться примерно такой результат:
persistentvolumeclaim/managedpvc created
Вы можете проверить состояние ПВХ, выполнив следующую команду:
kubectl describe pvc managedpvc
При создании PVC, он готов к использованию подом.
Развертывание модуля pod и подключение постоянного тома
Создайте pod, используя программу Flexible I/O Tester (fio) для тестирования и моделирования рабочей нагрузки, и укажите путь монтирования для постоянного тома. Для claimName используйте имя, которое вы использовали при создании ПВХ.
Создайте файл манифеста YAML, например
acstor-pod.yaml.apiVersion: v1 kind: Pod metadata: name: fiopod spec: containers: - name: fio image: mayadata/fio args: ["sleep", "1000000"] volumeMounts: - mountPath: "/volume" name: iscsi-volume volumes: - name: iscsi-volume persistentVolumeClaim: claimName: managedpvcПримените манифест для развертывания модуля pod.
kubectl apply -f acstor-pod.yamlДолжен отобразиться результат, как в примере ниже:
pod/fiopod createdУбедитесь, что модуль pod запущен, и ПВХ привязан:
kubectl describe pod fiopod kubectl describe pvc managedpvcПроверьте тестирование fio, чтобы просмотреть текущее состояние:
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
Теперь у вас есть pod, использующий Elastic SAN в качестве хранилища.
Статическое выделение тома Elastic SAN
Вы можете предварительно создать том в эластичной сети SAN и обнажить его в Kubernetes как статическую ПС. Воспользуйтесь шагами из раздела «Создание класса хранилища для предварительно подготовленной Elastic SAN и группы томов», чтобы создать Elastic SAN и группу томов. Эти действия также можно выполнить на портале Azure с помощью панели службы Elastic SAN.
Создание класса хранилища Elastic SAN по умолчанию
Используйте следующий манифест YAML для создания класса хранилища Elastic SAN по умолчанию:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azuresan-csi
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
Примените манифест для создания класса хранилища:
kubectl apply -f storageclass.yaml
Проверьте класс хранилища:
kubectl get storageclass azuresan-csi
Создание тома Elastic SAN
az elastic-san volume create -g <node-resource-group> -e <san-name> -v <volume-group-name> -n <volume-name> --size-gib 5
Обратите внимание на идентификатор Azure Resource Manager (ARM) тома Elastic SAN. Используйте его для volumeHandle значения в yamL постоянного тома.
Получите квалифицированное имя iSCSI (IQN) и targetPortal значения для тома Elastic SAN:
az elastic-san volume show --name <volume-name> --resource-group <rg-name> --elastic-san-name <san-name>
Создайте постоянный том
Создайте файл манифеста YAML, например pv_static.yaml.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-san
annotations:
pv.kubernetes.io/provisioned-by: san.csi.azure.com
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: azuresan-csi
csi:
driver: san.csi.azure.com
volumeHandle: #{rg}#{san}#{vg}#{vol}
volumeAttributes:
# iqn: "<retrieved from pre-provisioned volume>"
# targetPortal: "<retrieved from pre-provisioned volume>"
numsessions: "8"
Примените манифест для создания персистентного тома.
kubectl apply -f pv_static.yaml
Создайте статический запрос постоянного тома
Создайте файл манифеста YAML, например pvc_static.yaml.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-san
spec:
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: pv-san
storageClassName: azuresan-csi
Примените манифест для создания PVC.
kubectl apply -f pvc_static.yaml
Создание модуля pod, использующего статический том
Создайте файл манифеста YAML, например pod.yaml.
apiVersion: v1
kind: Pod
metadata:
name: pod-san-static
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /var/www
name: iscsi-volume
volumes:
- name: iscsi-volume
persistentVolumeClaim:
claimName: pvc-san
Примените манифест для создания модуля pod.
kubectl apply -f pod.yaml
См. также
- Что такое Azure Container Storage?
- Что такое Azure Elastic SAN?
- Установить Azure Container Storage с помощью AKS
- Включите хранение контейнеров Azure с избыточностью в пределах зон
- Настройка шифрования для томов Azure Elastic SAN
- Изменение размера постоянных томов
- Моментальные снимки томов с томами Azure Elastic SAN
- Часто задаваемые вопросы о хранилище контейнеров Azure