Поделиться через


Включение мультизональной избыточности данных в Azure Container Storage

С помощью Azure Container Storage можно улучшить доступность состоящих приложений, используя межзональное избыточное хранилище (ZRS) или локально избыточное хранилище (LRS). Выберите LRS с явным зональным размещением или ZRS для синхронной репликации в трех зонах доступности в зависимости от требований к устойчивости и производительности.

Выбор модели избыточности

Локально избыточное хранилище (LRS):с помощью LRS Azure хранит три копии каждой эластичной сети SAN в одном центре обработки данных. Эта избыточность защищает от сбоев оборудования, таких как сбой диска. В случае аварии в этом центре обработки данных все реплики могут быть потеряны или недоступны.

Хранилище с избыточностью между зонами (ZRS): с помощью ZRS Azure хранит три копии каждой эластичной SAN в трех различных зонах доступности в одном регионе. Запись данных осуществляется синхронно. Запись завершается только после обновления всех трех реплик.

Prerequisites

  • Если у вас нет подписки на Azure, создайте бесплатную учетную запись перед началом.

  • Для этой статьи требуется 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.

  • Если вы используете Elastic SAN впервые в подписке, выполните следующую команду однократной регистрации:

    az provider register --namespace Microsoft.ElasticSan
    
  • При включении ZRS в регионе может потребоваться зарегистрировать флаг функции на уровне подписки, чтобы хранилище контейнеров Azure могло развертывать целевые узлы SAN.

    az feature register \
    --namespace Microsoft.ElasticSan \
    --name EnableElasticSANTargetDeployment
    
  • Убедитесь, что регион поддерживает выбранный вариант избыточности. См. текущую доступность региона Elastic SAN.

Создание класса StorageClass с локальным избыточным хранилищем

Использование SKU LRS без указания зоны

Если регион поддерживает зоны, и вы не указываете зону в StorageClass, хранилище контейнеров Azure по умолчанию использует зону 1.

Создайте файл манифеста YAML, например storageclass.yaml, используйте следующую спецификацию.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: esan-lrs-default
provisioner: san.csi.azure.com
parameters:
  skuName: Premium_LRS
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

Использование SKU LRS и указание зоны

Используйте одну зону при создании эластичной СЕТИ LRS в регионах, поддерживающих зоны доступности. В регионах без зон опустить zones параметр, чтобы избежать сбоев проверки.

Для LRS с закреплением за зоной планировщик размещает pod на узле в указанной зоне, и постоянный том (PV) привязывается к SAN соответствующей зоны. Тома LRS доступны из любой зоны, поэтому хранилище контейнеров Azure не ограничивает подключение между зонами. В allowedTopologies этом разделе обеспечивается привязка PV к узлу в той же зоне, что и SAN LRS.

Создайте файл манифеста YAML, например storageclass.yaml, используйте следующую спецификацию.

# LRS with a zone (2)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: esan-lrs-zone2
provisioner: san.csi.azure.com
parameters:
  skuName: Premium_LRS
  zones: "2"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
# Optional:
allowedTopologies:
  - matchLabelExpressions:
      - key: topology.kubernetes.io/zone
        values:
          - canadacentral-2

Создайте StorageClass с хранилищем, избыточным между зонами

Вам не нужно указывать зоны, так как хранилище контейнеров Azure по умолчанию используется для всех трех зон. Если вы задали zones поле, перечислите все три зоны как "1,2,3".

Создайте файл манифеста YAML, например storageclass.yaml, используйте следующую спецификацию.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: esan-zrs-zones
provisioner: san.csi.azure.com
parameters:
  skuName: Premium_ZRS
  zones: "1,2,3" # optional
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

Создание класса StorageClass

kubectl apply -f storageclass.yaml

Убедитесь, что класс storageClass создан:

kubectl get storageclass <storage-class-name>

Выходные данные должны выглядеть примерно так:

NAME             PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
esan-zrs-zones   san.csi.azure.com    Delete          WaitForFirstConsumer   true                   10s

Создать запрос на постоянное хранилище

Создайте файл манифеста YAML, например acstor-pvc.yaml. Значение ПВХ name может быть любым значением. Используйте имя StorageClass, созданное на предыдущих шагах.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: managedpvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: esan-zrs-zones # or esan-lrs-zone2, esan-lrs-default

Примените манифест для создания PVC.

kubectl apply -f acstor-pvc.yaml

Выходные данные должны выглядеть примерно так:

persistentvolumeclaim/managedpvc created

Развертывание модуля pod и подключение постоянного тома

Создайте файл манифеста YAML, например acstor-pod.yaml.

apiVersion: v1
kind: Pod
metadata:
  name: esan-app
spec:
  containers:
    - name: app
      image: mcr.microsoft.com/oss/nginx/nginx:1.25.2
      volumeMounts:
        - name: data
          mountPath: /data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: managedpvc

Примените манифест для создания модуля pod.

kubectl apply -f acstor-pod.yaml

Выходные данные должны выглядеть примерно так:

pod/esan-app created

Проверьте PV и StorageClass:

kubectl get pv
kubectl describe sc esan-zrs-zones
kubectl describe sc esan-lrs-zone2

Подтвердите наличие региональной поддержки и модели избыточности для томов с использованием списка регионов Elastic SAN.

См. также