Como usar a ferramenta de migração CSI do StatefulSet

Neste documento, explicamos como usar a ferramenta de migração CSI do StatefulSet para migrar cargas de trabalho com estado de um plug-in de volume do vSphere em árvore para o driver CSI do vSphere no GKE no VMware.

Visão geral

O GKE no VMware se integra a sistemas externos de armazenamento em blocos ou arquivos por meio do armazenamento do VMware vSphere, plug-ins de volume em árvore do Kubernetes (ou "drivers") e drivers do Container Storage Interface (CSI).

Com o recurso de migração CSI do Kubernetes ativado por padrão na versão 1.15, um PersistentVolume respaldado pelo plug-in de volume do vSphere em árvore continua funcionando em um ambiente somente CSI. O recurso de migração CSI redireciona as chamadas de operação de plug-in em árvore para o driver CSI. Como a especificação do PersistentVolume é imutável, ela ainda é apoiada pelo plug-in em árvore. O conjunto de recursos disponíveis é o mesmo do plug-in de volume em árvore.

O conjunto completo de recursos de CSI, como expansão de volume e snapshot de volume, não está disponível para esses volumes. Para aproveitar esses recursos, as cargas de trabalho com estado precisam ser completamente migradas para o CSI, recriando os PersistentVolumes com suporte do driver CSI do vSphere. É possível usar a ferramenta de migração CSI para migrar cargas de trabalho com estado para o CSI e usar o conjunto completo de recursos CSI.

Essa ferramenta oferece uma maneira de migrar gradualmente o PersistentVolume e o PersistentVolumeClaim de um StatefulSet para o CSI e não envolve o tempo de inatividade do aplicativo. Essa ferramenta usa o backup dos recursos do Kubernetes em um diretório local e define ReclaimPolicy como Retain antes da migração. Assim, não haverá perda de dados.

Limitação

  • As ferramentas automatizadas são compatíveis apenas com as versões do GKE no VMware que são totalmente compatíveis.

  • Ele só funciona com o StatefulSets. É possível executar verificações de simulação com a ferramenta para executar algumas verificações de segurança antes de usar as ferramentas.

./statefulset-csi-migration-tool preflight \
      --kubeconfig ADMIN_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --sts-name STS_NAME \
      --sts-namespace STS_NAMESPACE \
      --intree-storageclass INTREE_STORAGECLASS \
      --csi-storageclass CSI_STORAGECLASS

Substitua:

  • ADMIN_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador.

  • USER_CLUSTER_NAME: se o StatefulSet estiver em execução no cluster de usuário, forneça o nome do cluster. Pule essa sinalização se a carga de trabalho estiver em execução no cluster de administrador.

  • STS_NAME: nome do StatefulSet.

  • STS_NAMESPACE: namespace do StatefulSet.

  • INTREE_STORAGECLASS: o nome do StorageClass na árvore que dá suporte ao PersistentVolume do StatefulSet.

  • CSI_STORAGECLASS: o nome do StorageClass CSI de apoio ao PersistentVolume do StatefulSet após a migração.

Fazer o download

Faça o download da ferramenta em gs://gke-on-prem-release/statefulset-csi-migration-tool/v0.1/statefulset-csi-migration-tool. Essa ferramenta está em pré-lançamento.

Procedimento

Nesta seção, apresentamos as etapas necessárias para migrar o StatefulSet do provisionador interno vCP em árvore do vSphere (kubernetes.io/vsphere-volume) para o provisionador CSI do vSphere (csi.vsphere.vmware.com).

./statefulset-csi-migration-tool rolling-migration all \
      --kubeconfig ADMIN_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --sts-name STS_NAME \
      --sts-namespace STS_NAMESPACE \
      --intree-storageclass INTREE_STORAGECLASS \
      --csi-storageclass CSI_STORAGECLASS \
      --working-directory WORKING_DIRECTORY

Substitua:

  • ADMIN_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador.

  • USER_CLUSTER_NAME: se o StatefulSet estiver em execução no cluster de usuário, forneça o nome do cluster. Pule essa sinalização se a carga de trabalho estiver em execução no cluster de administrador.

  • STS_NAME: nome do StatefulSet.

  • STS_NAMESPACE: namespace do StatefulSet.

  • INTREE_STORAGECLASS: o nome do StorageClass na árvore que dá suporte ao PersistentVolume do StatefulSet.

  • CSI_STORAGECLASS: o nome do StorageClass CSI de apoio ao PersistentVolume do StatefulSet após a migração.

  • WORKING_DIRECTORY: o diretório local para salvar a especificação de recursos do Kubernetes do StatefulSet e do pod, PersistentVolumeClaim e PersistentVolume. O nome do diretório precisa ser exclusivo para cada StatefulSet. Este diretório precisa estar vazio ou inexistente. O ideal é não criar esse diretório para que as ferramentas possam criar um para você.

Esse comando executa as seguintes tarefas:

  1. Faz um backup do StatefulSet e das respectivas dependências, como as especificações de PersistentVolume, PersistentVolumeClaim e réplica de pod no diretório de trabalho local.

  2. Exclui o StatefulSet com política de exclusão de órfãos. Esta etapa exclui apenas o StatefulSet, mas não as dependências dele, como as réplicas de pod, o PersistentVolume e o PersistentVolumeClaim.

  3. Migra cada pod para drivers CSI (semelhante à Opção 1) e faz o seguinte:

    a. Define o campo ReclaimPolicy do PersistentVolume como Retain.

    b. Exclui o pod, o PersistentVolume e o PersistentVolumeClaim.

    c. Converte o VMDK atual em FCD.

    d) Cria o PersistentVolume, o PersistentVolumeClaim e o pod novamente.

  4. Recria o StatefulSet, mas o campo PVCTemplate na especificação aponta para o CSI StorageClass. O controlador StatefulSet precisa mapear para as réplicas órfãs novamente.