Aceda às instâncias do Parallelstore existentes através do controlador CSI do Parallelstore do GKE


A Parallelstore está disponível apenas por convite. Se quiser pedir acesso à Parallelstore no seu Google Cloud projeto, contacte o seu representante de vendas.

Este guia descreve como se pode ligar a uma instância do Parallelstore existente com o controlador CSI do Parallelstore do GKE com aprovisionamento estático. Isto permite-lhe aceder a instâncias do Parallelstore totalmente geridas existentes como volumes para as suas cargas de trabalho com estado, de uma forma controlada e previsível.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Parallelstore e a API Google Kubernetes Engine.
  • Ativar APIs
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Aceda a uma instância do Parallelstore existente através do controlador CSI do Parallelstore

Se já aprovisionou uma instância do Parallelstore na mesma rede que o seu cluster do GKE, pode seguir estas instruções para aprovisionar estaticamente um PersistentVolume que se refere à sua instância.

As secções seguintes descrevem o processo típico de acesso a uma instância do Parallelstore existente através do controlador CSI do Parallelstore:

  1. Crie um PersistentVolume que faça referência à instância do Parallelstore..
  2. Use um PersistentVolumeClaim para aceder ao volume.
  3. (Opcional) Configure recursos para o contentor auxiliar.
  4. Crie uma carga de trabalho que consuma o volume.

Crie um PersistentVolume

Esta secção mostra um exemplo de como pode criar um PersistentVolume que faça referência a uma instância do Parallelstore existente.

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

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

    Substitua o seguinte:

    • PROJECT_ID: o Google Cloud ID do projeto.
    • LOCATION: a zona do Compute Engine que contém o cluster. Tem de especificar uma zona suportada para o controlador CSI Parallelstore.

    O resultado deve ser semelhante ao seguinte. Certifique-se de que anota o nome da instância do Parallelstore e os pontos de acesso IP antes de avançar para o passo seguinte.

    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. Guarde o seguinte manifesto num ficheiro com o nome parallelstore-pv.yaml:

    Montagem de agrupamento

    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 o seguinte:

    • PROJECT_ID: o Google Cloud ID do projeto.
    • LOCATION: a localização zonal da sua instância do Parallelstore. Tem de especificar uma zona suportada para o controlador CSI Parallelstore.
    • INSTANCE_NAME: o nome da sua instância do Parallelstore. Um exemplo de um 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 onde a sua instância do Parallelstore pode ser acedida.
    • STORAGECLASS_NAME: o nome da sua StorageClass. O valor pode ser uma string vazia, mas tem de corresponder à especificação no seu PersistentVolumeClaim.
    • STORAGE_SIZE: o tamanho do armazenamento; por exemplo, 12000Gi.

    Para ver a lista completa de campos suportados no objeto PersistentVolume, consulte a documentação de referência da CSI Parallelstore.

    Montagem de nós

    O controlador CSI Parallelstore permite-lhe montar volumes diretamente nos seus nós. A montagem de nós é suportada em clusters do GKE na versão 1.32.3 e posteriores.

    A montagem ao nível do nó permite que todos os pods num nó partilhem o mesmo ponto de montagem. A partilha do ponto de montagem melhora a escalabilidade porque o número de montagens aumenta com o número de nós e não com o número de pods (como no modo sidecar).

    Como resultado, pode executar mais pods enquanto partilha a mesma instância do Parallelstore.

    Nota: esta funcionalidade é ativada especificando o atributo de volume mountLocality: node. O valor predefinido para a localidade de montagem do pod é mountLocality: pod. A CPU, os pedidos de memória e os flags de limite do dfuse só funcionam com a definição mountLocality: node.

    Se o valor do pedido ou do limite estiver definido e o outro não estiver definido, ambos são definidos com o mesmo valor especificado.

    Pode usar "0" como valor para anular a definição de quaisquer limites de recursos. Por exemplo, dfuseMemoryLimit: '0' remove o limite de memória para o processo dfuse.
    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
          mountLocality: node
          dfuseCPURequest: DFUSE_CPU_REQUEST
          dfuseMemoryRequest: DFUSE_MEMORY_REQUEST
          dfuseCPULimit: DFUSE_CPU_LIMIT
          dfuseMemoryLimit: DFUSE_MEMORY_LIMIT
      claimRef:
        name: parallelstore-pvc
        namespace: default
    

    Substitua o seguinte:

    • PROJECT_ID: o Google Cloud ID do projeto.
    • LOCATION: a localização zonal da sua instância do Parallelstore. Tem de especificar uma zona suportada para o controlador CSI Parallelstore.
    • INSTANCE_NAME: o nome da sua instância do Parallelstore. Um exemplo de um 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 onde a sua instância do Parallelstore pode ser acedida.
    • STORAGECLASS_NAME: o nome da sua StorageClass. O valor pode ser uma string vazia, mas tem de corresponder à especificação no seu PersistentVolumeClaim.
    • STORAGE_SIZE: o tamanho do armazenamento; por exemplo, 12000Gi.
    • DFUSE_CPU_REQUEST: o pedido de CPU para o processo dfuse. A predefinição é 250m.
    • DFUSE_MEMORY_REQUEST: o pedido de memória para o processo dfuse. A predefinição é 512Mi.
    • DFUSE_CPU_LIMIT: o limite da CPU para o processo dfuse. Por predefinição, o valor não está definido.
    • DFUSE_MEMORY_LIMIT: o limite de memória para o processo dfuse. A predefinição é 10Gi.

    Para ver a lista completa de campos suportados no objeto PersistentVolume, consulte a documentação de referência da CSI Parallelstore.

  3. Execute este comando para criar o PersistentVolume:

    kubectl apply -f parallelstore-pv.yaml
    

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

Nota: esta funcionalidade não é suportada com montagens de nós.

Pode montar a mesma instância do Parallelstore com diferentes opções de montagem. Por exemplo, pode montar a mesma instância do Parallelstore com a colocação em cache ativada e com a colocação em cache desativada no mesmo pod.

Para montar a mesma instância do Parallelstore com diferentes opções de montagem, tem de 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 à sua escolha.

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

Use um PersistentVolumeClaim para aceder ao volume

Pode criar um recurso PersistentVolumeClaim que faça referência à StorageClass do controlador CSI Parallelstore.

O ficheiro de manifesto seguinte mostra um exemplo de como criar um PersistentVolumeClaim no ReadWriteMany modo de acesso que faz referência à StorageClass que criou anteriormente.

  1. Guarde o seguinte manifesto num ficheiro com o nome 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 o seguinte:

    • STORAGECLASS_NAME: o nome da sua StorageClass. Tem de corresponder à especificação no seu PersistentVolume.
    • STORAGE_SIZE: tamanho do armazenamento; por exemplo, 12000Gi. Tem de corresponder à especificação no seu PersistentVolume.
  2. Execute este comando para criar o PersistentVolumeClaim:

      kubectl create -f parallelstore-pvc.yaml
    

(Opcional) Configure recursos para o contentor sidecar

Nota: só pode configurar recursos para o contentor sidecar se usar a localidade de montagem do pod, ou seja, o atributo de volume mountLocality no seu PersistentVolume não estiver definido ou estiver definido como pod

Quando cria um pod de carga de trabalho que usa volumes suportados por Parallelstore, o controlador CSI determina se o seu volume se baseia em instâncias do Parallelstore.

Se o controlador detetar que o seu volume se baseia no Parallelstore ou se especificar a anotação gke-parallelstore/volumes: "true", o controlador CSI injeta automaticamente um contentor sidecar denominado gke-parallelstore-sidecar no seu pod. Este contentor auxiliar monta a instância do Parallelstore na sua carga de trabalho.

Por predefinição, o contentor auxiliar é configurado com os seguintes pedidos de recursos, com os limites de recursos não definidos:

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

Para substituir estes valores, pode especificar opcionalmente a anotação gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request] conforme mostrado no exemplo seguinte:

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 quando decidir a quantidade de recursos a atribuir:

  • Se um dos valores de pedido ou limite estiver definido e outro não estiver definido, o GKE define ambos com o mesmo valor especificado.
  • Atribua mais CPU ao contentor auxiliar se as suas cargas de trabalho precisarem de um débito mais elevado. A CPU insuficiente causa a limitação de E/S.
  • Pode usar "0" como valor para anular a definição de quaisquer limites de recursos em clusters padrão; por exemplo, gke-parallelstore/memory-limit: "0" remove o limite de memória para o contentor sidecar. Isto é útil quando não consegue decidir a quantidade de recursos que o gke-parallelstore-sidecar precisa para as suas cargas de trabalho e quer permitir que o sidecar consuma todos os recursos disponíveis num nó.

Crie uma carga de trabalho que consuma o volume

Esta secção mostra um exemplo de como criar um Pod que consuma o recurso PersistentVolumeClaim que criou anteriormente.

Vários pods podem partilhar o mesmo recurso PersistentVolumeClaim.

  1. Guarde o seguinte manifesto num ficheiro com o nome 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 seguinte comando para aplicar o manifesto ao cluster:

      kubectl apply -f my-pod.yaml
    

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

Faça a gestão do controlador CSI do Parallelstore

Esta secção aborda como pode ativar e desativar o controlador CSI Parallelstore, se necessário.

Ative o controlador CSI Parallelstore num novo cluster

Para ativar o controlador CSI Parallelstore quando criar um novo cluster Standard, execute o seguinte comando com a CLI gcloud:

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

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • LOCATION: a zona do Compute Engine que contém o cluster. Tem de especificar uma zona suportada para o controlador CSI Parallelstore.
  • NETWORK_NAME: nome da rede VPC que criou em Configure uma rede VPC.
  • VERSION: o número da versão do GKE. Tem de especificar um número de versão suportado para usar esta funcionalidade, como a versão 1.29 ou posterior do GKE. Em alternativa, pode usar a flag --release-channel e especificar um canal de lançamento.

Ative o controlador CSI Parallelstore num cluster existente

Para ativar o controlador num cluster padrão do GKE existente, execute o seguinte comando com a CLI do Google Cloud:

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

Substitua o seguinte:

  • CLUSTER_NAME : o nome do seu cluster.
  • LOCATION: a zona do Compute Engine que contém o cluster. Tem de especificar uma zona suportada para o controlador CSI Parallelstore.

Certifique-se de que o cluster do GKE está a ser executado na mesma rede de VPC que configurou em Configure uma rede de VPC. Para validar a rede VPC de um cluster do GKE, pode verificar naGoogle Cloud consola ou através do comando gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION).

Desative o controlador CSI Parallelstore

Pode desativar o controlador CSI Parallelstore num cluster do Autopilot ou Standard existente através da Google Cloud CLI.

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

Substitua o seguinte:

  • CLUSTER_NAME : o nome do seu cluster.
  • LOCATION: a zona do Compute Engine que contém o cluster. Tem de especificar uma zona suportada para o controlador CSI Parallelstore.

Use fsGroup com volumes Parallelstore

O controlador CSI Parallelstore suporta a alteração da propriedade do grupo do diretório de nível raiz do sistema de ficheiros montado para corresponder a um fsGroup pedido pelo utilizador especificado no SecurityContext do pod. Esta funcionalidade só é suportada em clusters do GKE com a versão 1.29.5 ou posterior, ou a versão 1.30.1 ou posterior.

Resolução de problemas

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

O que se segue?