Acessar instâncias do Parallelstore usando o driver CSI do Parallelstore do GKE


O Parallelstore só está disponível por convite. Se você quiser solicitar acesso ao Parallelstore no seu projeto do Google Cloud , entre em contato com seu representante de vendas.

Este guia descreve como se conectar a uma instância do Parallelstore com o driver CSI do Parallelstore do GKE usando o provisionamento estático. Isso permite acessar instâncias do Parallelstore totalmente gerenciadas como volumes para cargas de trabalho com estado, de maneira controlada e previsível.

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative a API Parallelstore e a API Google Kubernetes Engine.
  • Ativar APIs
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Acessar uma instância do Parallelstore usando o driver CSI do Parallelstore

Se você já provisionou uma instância do Parallelstore na mesma rede do cluster do GKE, siga estas instruções para provisionar estaticamente um PersistentVolume que se refere à sua instância.

As seções a seguir descrevem o processo típico de acesso a uma instância do Parallelstore usando o driver CSI do Parallelstore:

  1. Crie um PersistentVolume que se refira à instância do Parallelstore.
  2. Usar um PersistentVolumeClaim para acessar o volume.
  3. (Opcional) Configurar recursos para o contêiner de arquivo secundário.
  4. Criar uma carga de trabalho que consuma o volume.

Criar um PersistentVolume

Esta seção mostra um exemplo de como criar um PersistentVolume que faz referência a uma instância do Parallelstore.

  1. Execute o comando a seguir para localizar a instância do Parallelstore.

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=LOCATION
    

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • LOCATION: a zona do Compute Engine que contém o cluster. É necessário especificar uma zona com suporte para o driver CSI do Parallelstore.

    A saída será parecida com esta: Anote o nome da instância da Parallelstore e os pontos de acesso IP antes de prosseguir para a próxima etapa.

    NAME                                                                                                     capacity  DESCRIPTION  CREATE_TIME                     UPDATE_TIME                     STATE   network  RESERVED_IP_RANGE  ACCESS_POINTS
    projects/my-project/locations/us-central1-a/instances/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563  12000                  2024-03-06T19:18:26.036463730Z  2024-03-06T19:24:44.561441556Z  ACTIVE                              10.51.110.2,10.51.110.4,10.51.110.3
    
  2. Salve o manifesto em um arquivo chamado parallelstore-pv.yaml.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: parallelstore-pv
    spec:
      storageClassName: "STORAGECLASS_NAME"
      capacity:
        storage: STORAGE_SIZE
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: parallelstore.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container"
        volumeAttributes:
          accessPoints: ACCESS_POINTS
          network: NETWORK_NAME
      claimRef:
        name: parallelstore-pvc
        namespace: default
    

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud .
    • LOCATION: o local da zona da sua instância do Parallelstore. É necessário especificar uma zona com suporte para o driver CSI do Parallelstore.
    • INSTANCE_NAME: o nome da instância do Parallelstore. Um exemplo de valor volumeHandle válido é "my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container"..
    • ACCESS_POINTS: os pontos de acesso da sua instância do Parallelstore, por exemplo, 10.51.110.2,10.51.110.4,10.51.110.3.
    • NETWORK_NAME: a rede VPC em que a instância do Parallelstore pode ser acessada.
    • STORAGECLASS_NAME: o nome do StorageClass. Pode ser uma string vazia, mas precisa corresponder à especificação no PersistentVolumeClaim.
    • STORAGE_SIZE: o tamanho do armazenamento. Por exemplo, 12000Gi.

    Para conferir a lista completa de campos aceitos no objeto PersistentVolume, consulte a documentação de referência do CSI do Parallelstore.

  3. Crie o PersistentVolume executando este comando:

    kubectl apply -f parallelstore-pv.yaml
    

(Opcional) Montar a mesma instância do Parallelstore com opções de montagem diferentes

É possível montar a mesma instância do Parallelstore com diferentes opções de montagem. Por exemplo, é possível montar a mesma instância do Parallelstore com o armazenamento em cache ativado e desativado no mesmo pod.

Para montar a mesma instância do Parallelstore com opções de montagem diferentes, é necessário criar um PersistentVolume para cada opção de montagem. Use a seguinte sintaxe para o campo volumeHandle no objeto PersistentVolume: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container:RANDOM_SUFFIX", em que RANDOM_SUFFIX é uma string aleatória de sua escolha.

Por exemplo: "my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container:xyz123"

Usar um PersistentVolumeClaim para acessar o volume

É possível criar um recurso PersistentVolumeClaim que faz referência ao StorageClass do driver CSI do Parallelstore.

O arquivo de manifesto a seguir mostra um exemplo de como criar um PersistentVolumeClaim no ReadWriteMany modo de acesso que faz referência ao StorageClass criado anteriormente.

  1. Salve o manifesto em um arquivo chamado parallelstore-pvc.yaml.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: parallelstore-pvc
        namespace: default
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: STORAGECLASS_NAME
        resources:
          requests:
            storage: STORAGE_SIZE
    

    Substitua:

    • STORAGECLASS_NAME: o nome do StorageClass. Ele precisa corresponder à especificação no PersistentVolume.
    • STORAGE_SIZE: tamanho do armazenamento. Por exemplo, 12000Gi. Ele precisa corresponder à especificação no PersistentVolume.
  2. Execute este comando para criar o PersistentVolumeClaim:

      kubectl create -f parallelstore-pvc.yaml
    

(Opcional) Configurar recursos para o contêiner de arquivo secundário

Quando você cria um pod de carga de trabalho que usa volumes com suporte da Parallelstore, o driver CSI determina se o volume é baseado em instâncias da Parallelstore.

Se o driver detectar que o volume é baseado em Parallelstore ou se você especificar a anotação gke-parallelstore/volumes: "true", o driver CSI vai injetar automaticamente um contêiner de arquivo secundário chamado gke-parallelstore-sidecar no pod. Esse contêiner de arquivo secundário monta a instância do Parallelstore na sua carga de trabalho.

Por padrão, o contêiner do sidecar é configurado com as seguintes solicitações de recursos, com os limites não definidos:

  • 250 m CPU
  • 512 MiB de memória
  • Armazenamento temporário de 10 MiB

Para substituir esses valores, é possível especificar a anotação gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request], conforme mostrado no exemplo a seguir:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-parallelstore/volumes: "true"
    gke-parallelstore/cpu-request: 500m
    gke-parallelstore/memory-request: 1Gi
    gke-parallelstore/ephemeral-storage-request: 500Mi
    gke-parallelstore/cpu-limit: 1000m
    gke-parallelstore/memory-limit: 2Gi
    gke-parallelstore/ephemeral-storage-limit: 1Gi

Use as seguintes considerações ao decidir a quantidade de recursos para alocar:

  • Se um dos valores de solicitação ou limite for definido e outro não, o GKE vai definir ambos com o mesmo valor especificado.
  • Aloque mais CPU para o contêiner secundário se as cargas de trabalho precisarem de maior capacidade de processamento. CPU insuficiente causará limitação de E/S.
  • É possível usar o valor "0" para cancelar a definição de qualquer limite de recursos em clusters padrão. Por exemplo, gke-parallelstore/memory-limit: "0" remove o limite de memória do contêiner sidecar. Isso é útil quando não é possível decidir a quantidade de recursos que o gke-parallelstore-sidecar precisa para as cargas de trabalho, e você quer permitir que o sidecar consuma todos os recursos disponíveis em um nó.

Criar uma carga de trabalho que consuma o volume

Esta seção mostra um exemplo de como criar um pod que consome o recurso PersistentVolumeClaim criado anteriormente.

Vários pods podem compartilhar o mesmo recurso PersistentVolumeClaim.

  1. Salve o manifesto em um arquivo chamado my-pod.yaml.

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: parallelstore-volume
              mountPath: /data
        volumes:
        - name: parallelstore-volume
          persistentVolumeClaim:
            claimName: parallelstore-pvc
    
  2. Execute o comando a seguir para aplicar o manifesto ao cluster:

      kubectl apply -f my-pod.yaml
    

    O pod aguarda até que o GKE provisione o PersistentVolumeClaim antes de começar a ser executado. Essa operação pode levar vários minutos para ser concluída.

Gerenciar o driver CSI do Parallelstore

Esta seção aborda como ativar e desativar o driver CSI do Parallelstore, se necessário.

Ativar o driver CSI do Parallelstore em um novo cluster

Para ativar o driver CSI do Parallelstore ao criar um novo cluster padrão, execute o comando a seguir com a CLI do Google Cloud:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --network=NETWORK_NAME \
    --addons=ParallelstoreCsiDriver \
    --cluster-version=VERSION

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • LOCATION: a zona do Compute Engine que contém o cluster. É necessário especificar uma zona com suporte para o driver CSI do Parallelstore.
  • NETWORK_NAME: o nome da rede VPC que você criou em Configurar uma rede VPC.
  • VERSION: o número da versão do GKE. É necessário especificar um número de versão com suporte para usar esse recurso, como GKE versão 1.29 ou mais recente. Como alternativa, é possível usar a sinalização --release-channel e especificar um canal de lançamento.

Ativar o driver CSI do Parallelstore em um cluster atual

Para ativar o driver em um cluster padrão do GKE, execute o seguinte comando com a CLI do Google Cloud:

gcloud container clusters update CLUSTER_NAME \
  --location=LOCATION \
  --update-addons=ParallelstoreCsiDriver=ENABLED

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • LOCATION: a zona do Compute Engine que contém o cluster. É necessário especificar uma zona com suporte para o driver CSI do Parallelstore.

Verifique se o cluster do GKE está em execução na mesma rede VPC configurada em Configurar uma rede VPC. Para verificar a rede VPC de um cluster do GKE, acesse o console do Google Cloud ou use o comando gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION).

Desativar o driver CSI do Parallelstore

É possível desativar o driver CSI do Parallelstore em um cluster atual do Autopilot ou padrão usando a Google Cloud CLI.

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --update-addons=ParallelstoreCsiDriver=DISABLED

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • LOCATION: a zona do Compute Engine que contém o cluster. É necessário especificar uma zona com suporte para o driver CSI do Parallelstore.

Usar fsGroup com volumes do Parallelstore

O driver CSI do Parallelstore oferece suporte à alteração da propriedade do grupo do diretório raiz do sistema de arquivos montado para corresponder a um fsGroup solicitado pelo usuário e especificado no SecurityContext do pod. Esse recurso só tem suporte para clusters do GKE da versão 1.29.5 ou mais recente ou da versão 1.30.1 ou mais recente.

Solução de problemas

Para orientações sobre solução de problemas, consulte a página Solução de problemas na documentação do Parallelstore.

A seguir