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


Используйте моментальные снимки томов в хранилище контейнеров Azure

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

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

  • Для этой статьи требуется последняя версия (2.35.0 или более поздняя) Azure CLI. Узнайте , как установить Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена. Если вы планируете выполнять команды локально, а не в Azure Cloud Shell, обязательно запустите их с правами администратора.
  • Вам потребуется кластер Azure Kubernetes Service (AKS) с пулом узлов не менее чем из трех виртуальных машин (VM) для узлов кластера, каждая из которых имеет минимально четыре виртуальных CPU (vCPU).
  • Считается, что вы уже установили хранилище контейнеров Azure в кластере AKS и создали пул хранения и запрос на постоянное место для хранения (ПВХ) с помощью дисков Azure или временных дисков (локального хранилища). Моментальные снимки томов в настоящее время не поддерживаются при использовании Elastic SAN в качестве резервного хранилища.

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

Сначала создайте класс моментального снимка тома, который позволяет указать атрибуты моментального снимка тома, определив его в файле манифеста YAML. Выполните следующие действия, чтобы создать класс моментального снимка тома для дисков Azure.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-volumesnapshotclass.yamlнапример.

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

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-acstor-vsc
    driver: containerstorage.csi.azure.com
    deletionPolicy: Delete
    parameters:
      incremental: "true"  # available values: "true", "false" ("true" by default for Azure Public Cloud, and "false" by default for Azure Stack Cloud)
    
  3. Примените манифест YAML, чтобы создать класс моментального снимка тома.

    kubectl apply -f acstor-volumesnapshotclass.yaml
    

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

    volumesnapshotclass.snapshot.storage.k8s.io/csi-acstor-vsc created
    

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

    NAME            DRIVER                            DELETIONPOLICY    AGE
    csi-acstor-vsc	 containerstorage.csi.azure.com	   Delete	           11s
    

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

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

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-volumesnapshot.yamlнапример.

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

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: azuredisk-volume-snapshot
    spec:
      volumeSnapshotClassName: csi-acstor-vsc
      source:
        persistentVolumeClaimName: azurediskpvc
    
  3. Примените YAML-манифест для создания снимка тома.

    kubectl apply -f acstor-volumesnapshot.yaml
    

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

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

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

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

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

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pvc-restored.yamlнапример.

  2. Вставьте приведенный ниже код. Должен storageClassName соответствовать классу хранилища, который использовался при создании исходного постоянного тома. Например, если вы используете временный диск (локальный NVMe) вместо дисков Azure для внутреннего хранилища, перейдите storageClassName на acstor-ephemeraldisk. Для значения имени источника данных используйте имя моментального снимка тома, созданного на предыдущем шаге. Значение имени метаданных для утверждения постоянного тома может быть любым, каким захотите.

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

    kubectl apply -f acstor-pvc-restored.yaml
    

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

    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    

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

Совет

Если вы уже создали восстановленное утверждение постоянного тома и хотите применить yaml-файл еще раз, чтобы исправить ошибку или внести изменения, необходимо сначала удалить старое утверждение постоянного тома перед применением 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 (гибкого тестировщика I/O) для тестирования и моделирования рабочей нагрузки и укажите путь монтирования для постоянного тома.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pod2.yamlнапример.

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

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod2
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: diskpv
          persistentVolumeClaim:
            claimName: pvc-azuredisk-snapshot-restored
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: diskpv
    
  3. Примените файл манифеста YAML для развертывания модуля pod.

    kubectl apply -f acstor-pod2.yaml
    

    Вы должны увидеть результат, аналогичный приведенному ниже:

    pod/fiopod2 created
    
  4. Убедитесь, что Pod запущен и что запрос на постоянный том успешно привязан к Pod.

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

    kubectl exec -it fiopod2 -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Теперь вы развернули новый под из восстановленного запроса на постоянный том, и его можно использовать для нагрузок Kubernetes.

См. также