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


Используйте моментальные снимки томов с Azure Container Storage

Хранилище модулей Azure — это облачная служба управления хранилищем, развертывания и оркестрации, разработанная для модулей. В этой статье показано, как создать моментальный снимок постоянного тома и восстановить его с новым утверждением постоянного тома (ПВХ).

Ограничения

Моментальные снимки томов не поддерживаются при использовании эфемерного диска (локального NVMe) в качестве резервного хранилища.

Предварительные условия

  • Если у вас нет подписки на 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.

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

  2. Вставьте следующий код. Значение для класса моментального снимка тома name может быть любым.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: elasticsan-snapshot-class
    driver: san.csi.azure.com
    deletionPolicy: Delete
    
  3. Примените манифест для создания класса моментального снимка тома.

    kubectl apply -f acstor-volumesnapshotclass.yaml
    

    После завершения создания появится следующее сообщение:

    volumesnapshotclass.snapshot.storage.k8s.io/elasticsan-snapshot-class created
    

    Можно также запустить kubectl get volumesnapshotclass для подтверждения создания. Должен отобразиться результат, как в примере ниже:

    NAME                        DRIVER                DELETIONPOLICY    AGE
    elasticsan-snapshot-class   san.csi.azure.com     Delete            11s
    

Создание моментального снимка тома

Затем создайте моментальный снимок существующего ПВХ и примените класс моментальных снимков тома, созданный на предыдущем шаге.

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

  2. Вставьте следующий код. Задайте volumeSnapshotClassName имя класса моментального снимка тома, созданного на предыдущем шаге. Задайте persistentVolumeClaimName название ПВХ, который вы хотите снять. Значение моментального снимка name тома может быть любым значением.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: elasticsan-volume-snapshot
    spec:
      volumeSnapshotClassName: elasticsan-snapshot-class
      source:
        persistentVolumeClaimName: elasticsanpvc
    
  3. Примените манифест для создания моментального снимка тома.

    kubectl apply -f acstor-volumesnapshot.yaml
    

    После завершения создания появится следующее сообщение:

    volumesnapshot.snapshot.storage.k8s.io/elasticsan-volume-snapshot created
    

    Можно также запустить kubectl get volumesnapshot , чтобы проверить, создан ли моментальный снимок тома. Если READYTOUSE равно true, вы можете перейти к следующему шагу.

Создать восстановленный запрос на постоянный том

Создайте новый PVC, который использует снимок тома в качестве источника данных.

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

  2. Вставьте следующий код. Он storageClassName должен соответствовать классу StorageClass, используемому при создании исходного ПВХ. Для значения источника name данных используйте имя моментального снимка тома, созданного на предыдущем шаге. Значение ПВХ metadata.name может быть любым значением.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-elasticsan-snapshot-restored
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: azuresan-csi
      resources:
        requests:
          storage: 100Gi
      dataSource:
        name: elasticsan-volume-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
    
  3. Примените манифест для создания PVC.

    kubectl apply -f acstor-pvc-restored.yaml
    

    После завершения создания появится следующее сообщение:

    persistentvolumeclaim/pvc-elasticsan-snapshot-restored created
    

    Можно также запустить kubectl describe pvc pvc-elasticsan-snapshot-restored , чтобы проверить, создан ли постоянный том. Статус показывает В ожидании с сообщением, что он ожидает создания первого потребителя перед привязкой.

Совет

Если необходимо повторно применить YAML-файл, чтобы исправить ошибку или внести изменения, удалите старый ПВХ в первую очередь: kubectl delete pvc <pvc-name>

Удаление исходного модуля pod (необязательно)

Перед созданием нового модуля pod можно удалить исходный модуль pod, из который вы создали моментальный снимок.

  1. Запустите kubectl get pods, чтобы вывести список подов. Убедитесь, что вы удалили правильный модуль pod.
  2. Чтобы удалить модуль pod, выполните команду kubectl delete pod <pod-name>.

Создайте новый Pod, используя восстановленный моментальный снимок

Создайте новый модуль pod с помощью восстановленного ПВХ. Создайте модуль pod с помощью средства тестирования гибких операций ввода-вывода (fio) для тестирования и моделирования рабочей нагрузки и укажите путь подключения для постоянного тома.

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

  2. Вставьте следующий код. Утверждение постоянного тома claimName должно быть именем созданного вами восстановленного ПВХ. Значение pod metadata.name может быть любым значением.

    apiVersion: v1
    kind: Pod
    metadata:
      name: fio-restore
    spec:
      volumes:
        - name: iscsi-volume
          persistentVolumeClaim:
            claimName: pvc-elasticsan-snapshot-restored
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          volumeMounts:
            - mountPath: /volume
              name: iscsi-volume
    
  3. Примените манифест для развертывания модуля pod.

    kubectl apply -f fio-pod-restore.yaml
    

    Должен отобразиться результат, как в примере ниже:

    pod/fio-restore created
    
  4. Убедитесь, что модуль pod запущен, и ПВХ привязан:

    kubectl describe pod fio-restore
    kubectl describe pvc pvc-elasticsan-snapshot-restored
    
  5. Проверьте тестирование fio, чтобы просмотреть текущее состояние:

    kubectl exec -it fio-restore -- 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, который использует восстановленный ПВХ и может использовать его для рабочих нагрузок Kubernetes.

См. также