Este documento explica como usar a ferramenta de migração de CSI StatefulSet para migrar cargas de trabalho com estado de um plug-in de volume vSphere na árvore para o controlador de CSI vSphere no Google Distributed Cloud.
A lista seguinte mostra a fase de lançamento desta ferramenta por versão:
- v1.0: GA
- v0.1: Pré-visualização
Versões do Google Distributed Cloud suportadas: 1.30 a 1.28.
Vista geral
O Google Distributed Cloud integra-se com sistemas de armazenamento de blocos ou ficheiros externos através do armazenamento VMware vSphere, dos plug-ins de volume no interior da árvore do Kubernetes (ou "controladores") e dos controladores da interface de armazenamento de contentores (CSI).
Com a funcionalidade de migração do CSI do Kubernetes ativada por predefinição na versão 1.15, um PersistentVolume suportado pelo plug-in de volume do vSphere no interior da árvore continua a funcionar num ambiente apenas de CSI. A funcionalidade de migração de CSI redireciona as chamadas de operação de plugins internos para o controlador de CSI. Uma vez que a especificação PersistentVolume é imutável, continua a ser suportada pelo plug-in interno. O conjunto de funcionalidades disponíveis é o mesmo que para o plug-in de volume na árvore.
O conjunto completo de funcionalidades da CSI, como a expansão de volume e a captura instantânea de volume, não está disponível para esses volumes. Para tirar partido destas funcionalidades, as cargas de trabalho com estado têm de ser totalmente migradas para o CSI através da recriação dos volumes persistentes suportados pelo controlador CSI do vSphere. Pode usar a ferramenta de migração de CSI para migrar cargas de trabalho com estado para CSI e usar o conjunto completo de funcionalidades de CSI.
Esta ferramenta oferece uma forma de migrar progressivamente o PersistentVolume e o PersistentVolumeClaim de um StatefulSet para o CSI e não envolve tempo de inatividade da aplicação. Estas ferramentas fazem a cópia de segurança dos recursos do Kubernetes num diretório local e definem ReclaimPolicy como Retain antes da migração. Assim, não vai haver perda de dados.
Limitação
- As ferramentas automatizadas só são suportadas em versões do Google Distributed Cloud que são totalmente suportadas. 
- Só funciona com StatefulSets. Pode executar verificações prévias através da 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 o seguinte:
- ADMIN_KUBECONFIG: o caminho do ficheiro kubeconfig do cluster de administrador.
- USER_CLUSTER_NAME: se o StatefulSet estiver a ser executado no cluster de utilizadores, indique o nome do cluster de utilizadores. Ignore esta flag se a carga de trabalho estiver a ser executada no cluster de administrador.
- STS_NAME: nome do StatefulSet.
- STS_NAMESPACE: espaço de nomes do StatefulSet.
- INTREE_STORAGECLASS: o nome StorageClass no tree que suporta o PersistentVolume do StatefulSet.
- CSI_STORAGECLASS: o nome da StorageClass do CSI que suporta o PersistentVolume do StatefulSet após a migração.
Transferir
Transfira a ferramenta em
 gs://gke-on-prem-release/statefulset-csi-migration-tool/v1.0/statefulset-csi-migration-tool.
 Tenha em atenção que esta ferramenta está em pré-visualização.
Procedimento
Esta secção fornece os passos necessários para migrar o StatefulSet do vSphere
in-tree vCP internal provisioner (kubernetes.io/vsphere-volume) para o vSphere
CSI provisioner (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 o seguinte:
- ADMIN_KUBECONFIG: o caminho do ficheiro kubeconfig do cluster de administrador. 
- USER_CLUSTER_NAME: se o StatefulSet estiver a ser executado no cluster de utilizadores, indique o nome do cluster de utilizadores. Ignore esta flag se a carga de trabalho estiver a ser executada no cluster de administrador. 
- STS_NAME: nome do StatefulSet. 
- STS_NAMESPACE: espaço de nomes do StatefulSet. 
- INTREE_STORAGECLASS: o nome StorageClass no tree que suporta o PersistentVolume do StatefulSet. 
- CSI_STORAGECLASS: o nome da StorageClass do CSI que suporta o PersistentVolume do StatefulSet após a migração. 
- WORKING_DIRECTORY: o diretório local para guardar a especificação do recurso Kubernetes do StatefulSet e o respetivo pod, PersistentVolumeClaim e PersistentVolume. O nome do diretório tem de ser exclusivo para cada StatefulSet. Este diretório deve estar vazio ou não existir. É ideal não criar este diretório para que as ferramentas possam criar um para si. 
Este comando executa as seguintes tarefas:
- Faz uma cópia de segurança do StatefulSet e das respetivas dependências, como PersistentVolume, PersistentVolumeClaim e especificações de réplicas de pods, no diretório de trabalho local. 
- Elimina o StatefulSet com a política de eliminação de órfãos. Este passo apenas elimina o StatefulSet, mas não elimina as respetivas dependências, como as réplicas de pods, o PersistentVolume e o PersistentVolumeClaim. 
- Migra cada pod para controladores CSI (semelhante à opção 1) e faz o seguinte: - a. Define o campo ReclaimPolicy do PersistentVolume como Retain. - b. Elimina o pod, o PersistentVolume e o PersistentVolumeClaim. - c. Converte o VMDK existente em FCD. - d. Cria novamente o PersistentVolume, o PersistentVolumeClaim e o Pod. 
- Recria o StatefulSet, mas o campo PVCTemplate na respetiva especificação aponta para o StorageClass do CSI. O controlador StatefulSet deve ser mapeado novamente para as réplicas órfãs.