Переместите постоянные тома дисков Azure в другой кластер AKS в той же или другой подписке

В этой статье описывается безопасное перемещение постоянных томов диска Azure из одного кластера Службы Azure Kubernetes (AKS) в другую в той же подписке или в другой подписке. Целевая подписка должна находиться в одном регионе.

Последовательность шагов для выполнения этого перемещения:

  • Чтобы избежать потери данных, убедитесь, что состояние ресурса диска Azure в исходном кластере AKS не в подключенном состоянии.
  • Переместите ресурс диска Azure в целевую группу ресурсов в той же подписке или другой подписке.
  • Убедитесь, что перемещение ресурса диска Azure выполнено успешно.
  • Создайте постоянный том (PV) и запрос на постоянный том (PVC), а затем смонтируйте перемещаемый диск как том на pod в целевом кластере.

Перед тем как начать

  • Убедитесь, что вы установили и настроили Azure CLI версии 2.0.59 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".
  • Ознакомьтесь с подробными сведениями и требованиями к перемещению ресурсов между различными регионами в новой группе ресурсов или подписке. Перед перемещением ресурсов в этой статье обязательно просмотрите контрольный список .
  • Исходный кластер должен иметь один или несколько постоянных томов с подключенным диском Azure.
  • В целевой подписке должен быть кластер AKS.

Проверка состояния тома диска

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

  1. Определите группу ресурсов узла, в которой размещаются управляемые диски Azure, с помощью az aks show команды и добавьте --query nodeResourceGroup этот параметр.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

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

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Вывод списка управляемых дисков с помощью az disk list команды. Ссылка на группу ресурсов, возвращенную на предыдущем шаге.

    az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus
    

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

    {
    "LastOwnershipUpdateTime": "2023-04-25T15:09:19.5439836+00:00",
    "creationData": {
      "createOption": "Empty",
      "logicalSectorSize": 4096
    },
    "diskIOPSReadOnly": 3000,
    "diskIOPSReadWrite": 4000,
    "diskMBpsReadOnly": 125,
    "diskMBpsReadWrite": 1000,
    "diskSizeBytes": 1073741824000,
    "diskSizeGB": 1000,
    "diskState": "Unattached",
    

    Примечание

    Обратите внимание на значение поля resourceGroup для каждого диска, который вы хотите переместить из указанных выше выходных данных. Эта группа ресурсов — это группа ресурсов узла, а не группа ресурсов кластера. Для перемещения дисков вам потребуется имя этой группы ресурсов.

  3. Если diskState показывает Attached, сначала определите, обращаются ли какие-либо рабочие нагрузки к тому и остановите их. Через период времени состояние диска возвращает состояние Unattached и затем может быть перемещено.

Перемещение постоянного тома

Чтобы переместить постоянный том или тома в другой кластер AKS, выполните действия, описанные в разделе "Перемещение ресурсов Azure в новую группу ресурсов или подписку". Вы можете использовать портал Azure, Azure PowerShell или azure CLI для выполнения миграции.

В ходе этого процесса вы ссылаетесь:

  • Имя или идентификатор ресурса группы ресурсов исходного узла, на котором размещены управляемые диски Azure. Имя группы ресурсов узла можно найти, перейдя на панель мониторинга дисков на портале Azure и отметив связанную группу ресурсов для диска.
  • Имя или идентификатор ресурса целевой группы ресурсов для перемещения управляемых дисков.
  • Имя или идентификатор ресурсов управляемых дисков.

Примечание

Из-за зависимостей между поставщиками ресурсов эта операция может занять до четырех часов.

Убедитесь, что том диска был перемещён.

После перемещения тома диска в целевую группу ресурсов кластера проверьте ресурс в списке групп ресурсов с помощью az disk list команды. Ссылка на целевую группу ресурсов, в которой были перемещены ресурсы. В этом примере диски были перемещены в группу ресурсов с именем MC_myResourceGroup_myAKSCluster_eastus.

  az disk list --resource-group MC_myResourceGroup_myAKSCluster_eastus

Подключите перемещённый диск в качестве тома

Чтобы подключить том перемещаемого диска, создайте статический постоянный том с идентификатором ресурса, скопированным на предыдущих шагах, утверждением постоянного тома и в этом примере простым модулем pod.

  1. Создайте файл pv-azuredisk.yaml с постоянным объёмом. Обновите поле volumeHandle с идентификатором ресурса диска на предыдущем шаге.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-azuredisk
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        readOnly: false
        volumeHandle: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MC_rg_azure_aks-pvc-target_eastus/providers/Microsoft.Compute/disks/pvc-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
        volumeAttributes:
          fsType: ext4
    
  2. Создайте файл pvc-azuredisk.yaml с заявкой PersistentVolumeClaim для PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Создайте PersistentVolume и PersistentVolumeClaim с помощью команды kubectl apply и ссылаясь на созданные вами два файла YAML.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Убедитесь, что объект PersistentVolumeClaim создается и привязан к PersistentVolume с помощью kubectl get команды.

    kubectl get pvc pvc-azuredisk
    

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

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Чтобы ссылаться на PersistentVolumeClaim, создайте файл azure-disk-pod.yaml. В примере манифеста имя модуля pod — mypod.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
        - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          name: mypod
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - name: azure
              mountPath: /mnt/azure
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  6. Примените конфигурацию и подключите том с помощью команды kubectl apply .

    kubectl apply -f azure-disk-pod.yaml
    
  7. Проверьте состояние pod и данные, перенесенные вместе с томом, подключенным внутри файловой системы, на /mnt/azure. Сначала получите статус pod, выполнив команду kubectl get.

    kubectl get pods
    

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

    NAME    READY   STATUS    RESTARTS   AGE
    mypod   1/1     Running   0          4m1s
    

    Проверьте данные внутри смонтированного тома /mnt/azure с помощью команды kubectl exec.

    kubectl exec -it mypod -- ls -l /mnt/azure/
    

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

    total 28
    -rw-r--r--    1 root     root       0 Jan 11 10:09 file-created-in-source-aks
    

Дальнейшие шаги