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 Google Distributed Cloud.

Visão geral

O Google Distributed Cloud se integra a sistemas externos de armazenamento de blocos ou arquivos por meio do armazenamento 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 de CSI do Kubernetes ativado por padrão na versão 1.15, um PersistentVolume apoiado pelo plug-in de volume vSphere em árvore continua funcionando em um ambiente somente CSI. O recurso de migração de CSI redireciona as chamadas de operação de plug-in em árvore para o driver do CSI. Como a especificação 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 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 apoiados pelo driver CSI do vSphere. É possível usar a ferramenta de migração do CSI para migrar cargas de trabalho com estado para o CSI e usar o conjunto completo de recursos da CSI.

Essa ferramenta fornece uma maneira de fazer a migração gradual do PersistentVolume e do PersistentVolumeClaim de um StatefulSet para CSI e não envolve 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 vai haver perda de dados.

Limitação

  • As ferramentas automatizadas só são compatíveis com versões do Google Distributed Cloud que são totalmente compatíveis.

  • Ele só funciona com StatefulSets. É possível executar verificações de simulação usando 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 de usuário. 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 apoia o PersistentVolume do StatefulSet.

  • CSI_STORAGECLASS: o nome do StorageClass do CSI que apoia o 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. Esta ferramenta está em pré-lançamento.

Procedimento

Nesta seção, apresentamos as etapas necessárias para migrar o StatefulSet do provisionador interno vCP do vSphere em árvore (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 de usuário. 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 apoia o PersistentVolume do StatefulSet.

  • CSI_STORAGECLASS: o nome do StorageClass do CSI que apoia o 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 respectivo pod, PersistentVolumeClaim e PersistentVolume. O nome do diretório precisa ser exclusivo para cada StatefulSet. O diretório precisa estar vazio ou não existir. 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 dependências dele, como PersistentVolume, PersistentVolumeClaim e especificações de réplica de pod no diretório de trabalho local.

  2. Exclui o StatefulSet com política de exclusão de órfãos. Essa etapa exclui apenas o StatefulSet, mas não exclui as dependências dele, como as réplicas de pod, PersistentVolume e 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 existente 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 StorageClass CSI. O controlador StatefulSet deve mapear novamente para as réplicas órfãs.