Como usar o driver CSI do disco permanente do Compute Engine

O Google Kubernetes Engine (GKE) fornece uma maneira simples de implantar e gerenciar automaticamente o Driver da interface de armazenamento do contêiner (CSI, na sigla em inglês) do disco permanente do Compute Engine nos clusters.

A versão do driver CSI do disco permanente do Compute Engine está vinculada aos números da versão do GKE. Normalmente, a versão do driver CSI do disco permanente do Compute Engine é o mais recente disponível no momento em que a versão do GKE é lançada. Os drivers são atualizados automaticamente quando o cluster é atualizado para o patch do GKE mais recente.

Benefícios do uso do driver CSI do disco permanente do Compute Engine

Usar o driver CSI do disco permanente do Compute Engine em vez do Plug-in de volume gcePersistentDisk (em inglês) em árvore no Kubernetes traz os seguintes benefícios:

  • Os drivers CSI são o futuro da extensão de armazenamento no Kubernetes. O Kubernetes anunciou que está prevista a remoção dos plug-ins de volume em árvore do Kubernetes na versão 1.21. Para mais detalhes, consulte Árvore no Kubernetes para migração de volume CSI para versão Beta (em inglês). Após essa alteração, os volumes atuais que usam plug-ins de volume em árvore se comunicarão por meio de drivers CSI.
  • Isso permite a implantação e o gerenciamento automáticos do driver de disco permanente sem ter que configurá-lo manualmente ou usar o plug-in de volume em árvore.
  • Isso também fornece recursos adicionais de disco permanente no GKE. Por exemplo:
    • É possível usar chaves de criptografia gerenciadas pelo cliente (CMEKs) com o driver CSI de disco permanente do Compute Engine, mas não o plug-in de volume em árvore. Essas chaves são usadas para criptografar as chaves que criptografam seus dados. Para saber mais sobre a CMEK no GKE, consulte Como usar CMEKs.
    • Use snapshots de volume com o driver CSI de disco permanente do Compute Engine. Eles permitem criar uma cópia do seu volume em um momento específico. Use essa cópia para trazer um volume de volta a um estado anterior ou para provisionar um novo volume.
  • Correções de bugs e atualizações de recursos são lançadas independentemente das versões secundárias do Kubernetes. Isso normalmente resulta em uma cadência de lançamento mais rápida.

Requisitos

Para usar o driver CSI de disco permanente do Compute Engine, é preciso usar as versões do GKE que sejam 1.14 ou posteriores.

Como ativar o driver CSI do disco permanente do Compute Engine em um novo cluster

Para usar o driver CSI do disco permanente do Compute Engine em novos clusters, ative o recurso usando a gcloud ou o Console do Google Cloud.

gcloud

Por padrão, o driver CSI do disco permanente do Google Compute Engine não é ativado quando você cria um cluster. Para ativar o driver na criação do cluster, execute o seguinte comando:

gcloud beta container clusters create cluster-name \
  --addons=GcePersistentDiskCsiDriver \
  --cluster-version=version

Substitua:

  • cluster-name é o nome do novo cluster;
  • version é o número da versão do GKE. Selecione uma versão 1.14 ou superior para usar esse recurso.

Para ver a lista completa de sinalizações opcionais, consulte a documentação de gcloud container clusters create.

Console

Por padrão, o driver CSI do disco permanente do Compute Engine não é ativado quando você cria um cluster. Para ativar o driver na criação do cluster:

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acesse o menu do Google Kubernetes Engine

  2. Clique no botão Criar cluster.

  3. Configure o cluster como quiser. Para detalhes sobre os tipos de clusters que podem ser criados, consulte Tipos de clusters.

  4. No painel de navegação, em Cluster, clique em Recursos.

  5. Marque a caixa de seleção Ativar driver de CSI do disco permanente do Compute Engine.

  6. Clique em Criar

Depois de ativar o driver CSI do disco permanente do Compute Engine, ele poderá ser usado nos volumes do Kubernetes usando o nome do provisionador e do driver: pd.csi.storage.gke.io.

Como ativar o driver CSI do disco permanente do Compute Engine em um cluster atual

Para ativar o driver CSI de disco permanente do Compute Engine em clusters atuais, use gcloud ou o Console do Google Cloud.

gcloud

Para ativar o driver em um cluster atual, execute o seguinte comando:

 gcloud beta container clusters update cluster-name \
  --update-addons=GcePersistentDiskCsiDriver=ENABLED

substitua cluster-name pelo nome do cluster atual.

Console

Para ativar o driver em um cluster atual:

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acesse o menu do Google Kubernetes Engine

  2. Clique no botão Editar do cluster, que se parece com um lápis.

  3. Expanda os Complementos.

  4. No menu suspenso Driver CSI do disco permanente do Compute Engine, selecione Ativado.

  5. Clique em Save.

Como desativar o driver CSI do disco permanente do Compute Engine

Para desativar o driver CSI de disco permanente do Compute Engine, use gcloud ou o Console do Google Cloud.

gcloud

Para desativar o driver em um cluster atual, execute o seguinte comando:

gcloud beta container clusters update cluster-name \
--update-addons=GcePersistentDiskCsiDriver=DISABLED

substitua cluster-name pelo nome do cluster atual.

Console

Para ativar o driver em um cluster atual:

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acesse o menu do Google Kubernetes Engine

  2. Clique no botão Editar do cluster, que se parece com um lápis.

  3. Expanda os Complementos.

  4. No menu suspenso Driver do CSI do disco permanente do Compute Engine, selecione Desativado.

  5. Clique em Save.

Como usar o driver CSI do disco permanente do Compute Engine

As seções a seguir descrevem o processo típico de uso de um volume do Kubernetes compatível com um driver CSI no GKE.

Criar um StorageClass

Depois que você ativa o driver CSI do disco permanente do Compute Engine, o GKE instala automaticamente um StorageClass. O nome do StorageClass é standard-rwo. No entanto, algumas versões mais antigas do cluster podem ter um dos seguintes nomes:

  • singlewriter-standard
  • standard-singlewriter

Encontre o nome do StorageClass instalado executando o seguinte comando:

kubectl get sc

Também é possível instalar um StorageClass diferente que usa o driver CSI de disco permanente do Compute Engine adicionando pd.csi.storage.gke.io no campo do provisionador.

Por exemplo, é possível criar um StorageClass usando o seguinte arquivo chamado pd-example-class.yaml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-ssd

Depois de criar o arquivo pd-example-class.yaml, execute o seguinte comando:

kubectl create -f pd-example-class.yaml

Criar um PersistentVolumeClaim

É possível criar um PersistentVolumeClaim que faz referência ao StorageClass do driver CSI do disco permanente do Compute Engine. O arquivo a seguir, chamado pvc-example.yaml, usa a classe de armazenamento pré-instalada standard-rwo:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: standard-rwo
  resources:
    requests:
      storage: 6Gi

Depois de criar o manifesto PersistentVolumeClaim, execute o seguinte comando:

kubectl create -f pvc-example.yaml

No StorageClass pré-instalado, standard-rwo, volumeBindingMode é definido como WaitForFirstConsumer. Quando volumeBindingMode for definido como WaitForFirstConsumer, o PersistentVolume não será provisionado até que um pod referenciando PersistentVolumeClaim seja programado. Se volumeBindingMode no StorageClass estiver definido como Immediate (ou estiver omitido), um PersistentVolume baseado em disco permanente será provisionado depois que o PersistentVolumeClaim for criado.

Criar um pod que consuma o volume

Ao usar pods com PersistentVolumes, recomendamos usar um controlador de carga de trabalho (como uma implantação ou StatefulSet). Mesmo que você geralmente não use um pod independente, o exemplo a seguir usa um para simplificar.

O exemplo a seguir consome o volume criado na seção anterior:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       claimName: podpvc
       readOnly: false

A seguir