Storage

Nesta página, explicaremos os conceitos de armazenamento do Google Distributed Cloud (somente software) para VMware.

Resumo

O Google Distributed Cloud se integra a sistemas externos de armazenamento em blocos ou arquivos desta maneira:

  • Driver de Container Storage Interface (CSI) do vSphere
  • Drivers de CSI de terceiros
  • Plug-ins de volume do Kubernetes na árvore

Repositórios de dados do vSphere

Ao criar um cluster de administrador, você especifica um datastore atual do vSphere para os dados do etcd do cluster.

Ao criar um cluster de usuário, é possível usar o mesmo repositório de dados que o cluster de administrador ou especificar um diferente. Também é possível especificar repositórios de dados para pools de nós individuais.

Os repositórios de dados do vSphere usados pelos clusters de administrador e de usuário podem receber um backup de NFS, vSAN ou VMFS em um dispositivo de bloco, como uma matriz de armazenamento externo. Em um ambiente de vários hosts, cada dispositivo de bloco precisa ser anexado a todos os hosts no ambiente, e o armazenamento de dados precisa ser configurado em cada host usando a opção Mount Datastore em outros hosts.

StorageClasses

Ao criar uma PersistentVolumeClaim, é possível especificar uma StorageClass que fornece informações sobre como o armazenamento será provisionado. Se você não especificar uma StorageClass, a StorageClass padrão será usada.

StorageClass do cluster de administrador

Nos clusters de administrador, há uma StorageClass chamada standard, que é designada como a StorageClass padrão. A StorageClass standard lista o plug-in de volume em árvore do vSphere como o provisionador.

Para ver a StorageClass standard:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \
    standard --output yaml

Na saída, é possível ver que standard é a StorageClass padrão e o provisionador é o plug-in de volume em árvore do vSphere, kubernetes.io/vsphere-volume. Também é possível ver o nome de um repositório de dados do vSphere.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  ...
  labels:
    bundle.gke.io/component-name: admin-storage-class
  name: standard
...
parameters:
  datastore: vsanDatastore
provisioner: kubernetes.io/vsphere-volume
...

StorageClasses do cluster de usuário

Nos clusters de usuário, há uma StorageClass chamada standard e outra chamada standard-rwo.

A StorageClass standard-rwo é designada como a StorageClass padrão e lista o driver de CSI do vSphere como provisionador.

Para ver a StorageClass standard-rwo:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \
    standard-rwo --output yaml

Na saída, é possível ver que standard-rwo é a StorageClass padrão e o provisionador é o driver de CSI do vSphere, csi.vsphere.vmware.com. Também é possível ver o URL de um repositório de dados do vSphere:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
    ...
  labels:
    bundle.gke.io/component-name: user-vsphere-csi-driver-addon
    ...
  name: standard-rwo
...
parameters:
  datastoreURL: ds:///vmfs/volumes/vsan:52fb6ca22be2454e-e67f620175964a9f/
provisioner: csi.vsphere.vmware.com
...

Plug-ins de volume do Kubernetes na árvore

O Kubernetes é fornecido com vários plug-ins de volume em árvore. No entanto, a maioria desses plug-ins está descontinuada (incluindo o plug-in de volume em árvore do vSphere). Para mais informações, consulte o projeto de migração de CSI.

Migração de CSI para o driver de armazenamento do vSphere

No passado, o plug-in de volume em árvore do vSphere era o provisionador da StorageClass padrão nos clusters de usuário. Agora, esse plug-in está descontinuado e o driver de CSI do vSphere é o provisionador da StorageClass padrão nos clusters de usuário. Recomendamos que você use o driver de CSI do vSphere em vez do plug-in de volume em árvore.

A partir da versão 1.15 do Google Distributed Cloud, o recurso de migração de CSI do Kubernetes é ativado por padrão para o plug-in de volume do vSphere em árvore. Isso significa que se uma carga de trabalho usar um volume em árvore do vSphere, todas as chamadas de operações de armazenamento interno serão redirecionadas automaticamente para o driver de CSI do vSphere.

Por exemplo, suponha que uma PersistentVolumeClaim especifique a StorageClass standard, que lista o plug-in de volume em árvore do vSphere, kubernetes.io/vsphere-volume, como o provisionador. Em seguida, qualquer carga de trabalho que use essa PersistentVolumeClaim terá suas chamadas de operações de armazenamento redirecionadas para o driver de CSI do vSphere. csi.vsphere.vmware.com.

Verificações de simulação

Quando você cria um novo cluster ou atualiza um atual, há verificações de simulação que garantem que o ambiente seja adequado para a migração de CSI.

Por exemplo, a simulação verifica o seguinte:

  • Verifica se as versões do vCenter e do ESXI são apropriadas.
  • Verifica se o driver de CSI do vSphere está ativado, caso haja PersistentVolumes em árvore do vSphere.
  • Verifica se as StorageClasses do vSphere não têm determinados parâmetros que são ignorados após a migração de CSI.
  • Verifica as anotações em PersistentVolumes e PersistentVolumeClaims criados de maneira estática para a migração de CSI.
  • Verifica se o cluster pode executar uma carga de trabalho usando um volume de CSI provisionado pelo driver de CSI do vSphere.

Para mais informações, consulte Como executar verificações de simulação.

Problemas conhecidos

Há vários problemas conhecidos relacionados ao driver de CSI do vSphere. Para informações e soluções alternativas, consulte a seção Problemas conhecidos nas Notas de lançamento do driver de CSI do VMWare vSphere 3.0.

Concluir a migração para o CSI

Com o recurso de migração CSI do Kubernetes ativado por padrão na versão 1.15, o PersistentVolume com suporte do plug-in de volume do vSphere em árvore continua funcionando em um ambiente somente CSI, apenas redirecionando as chamadas de operação do plug-in em árvore para o plug-in CSI. Como a especificação PersistentVolume é imutável, ela será a mesma do plug-in de volume na árvore.

Por isso, o conjunto completo de atributos do 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 totalmente migradas para o CSI, recriando a especificação de recursos do Kubernetes com campos CSI. Desenvolvemos uma ferramenta automatizada para migrar cargas de trabalho com estado para o CSI sem inatividade do aplicativo, o que permite usar o conjunto completo de recursos do CSI.

Como usar drivers de terceiros

Se você quiser provisionar volumes de armazenamento diferentes de armazenamentos de dados do vSphere, poderá criar um novo StorageClass em um cluster que use um driver de armazenamento diferente. Em seguida, é possível definir a StorageClass como padrão do cluster ou configurar as cargas de trabalho usando a StorageClass (exemplo de StatefulSet).

Parceiros de armazenamento

Fizemos parcerias com muitos fornecedores de armazenamento para qualificar os sistemas de armazenamento com o Google Distributed Cloud. Veja a lista completa de parceiros de armazenamento qualificados.

Expansão de volume

É possível expandir o tamanho de um volume persistente após ele ter sido provisionado editando a solicitação de capacidade na PersistentVolumeClaim. É possível fazer uma expansão on-line enquanto o volume está em uso por um pod ou uma expansão off-line em que o volume não está em uso.

Para o driver de CSI do vSphere, a expansão off-line está disponível nas versões do vSphere 7.0 e posteriores e a expansão on-line está disponível nas versões do vSphere 7.0 Atualização 2 e posteriores.

A StorageClass standard-rwo define allowVolumeExpansion como verdadeiro por padrão para clusters recém-criados em execução nas versões do vSphere 7.0 ou posteriores. É possível usar a expansão on-line e off-line para volumes usando essa StorageClass. No caso de um cluster com upgrade, como StorageClasses não são modificadas em upgrades de cluster, quando ele é atualizado da 1.7 para a 1.8, a configuração allowVolumeExpansion em standard-rwo permanece não definida, o que significa que a expansão de volume não é permitida.

Para mais informações sobre a expansão de volume, consulte Como usar a expansão de volume.

Snapshots de volume do CSI

É possível criar snapshots de armazenamento permanente usando os recursos VolumeSnapshot e VolumeSnapshotClass. Para usar esse recurso em um volume CSI, o driver CSI precisa ser compatível com snapshots de volume, e o contêiner secundário external-snapshotter precisa ser incluído na implantação do driver CSI.

Para mais informações sobre snapshots de volume, consulte Como usar snapshots de volume.

Os controladores de snapshot do CSI são implantados automaticamente quando você cria um cluster.

Limpeza de volume

Quando você exclui um cluster de usuário, os volumes provisionados pelo driver de CSI do vSphere não são excluídos. Exclua todos os volumes, PersistentVolumeClaims e StatefulSets antes da exclusão do cluster.

Solução de problemas

Consulte Solução de problemas do armazenamento.

Leitura adicional