Configurar o driver CSI do Cloud Storage FUSE para o GKE


Esta página descreve como configurar e se preparar para usar o driver CSI do Cloud Storage FUSE para o GKE.

Para usar o driver CSI do Cloud Storage FUSE, siga estas etapas:

Criar o bucket do Cloud Storage

Crie seus buckets do Cloud Storage, se ainda não tiver feito isso. Você vai montar esses buckets como volumes no cluster do GKE. Para melhorar o desempenho, defina o Tipo de local como Região e selecione uma região que corresponda ao cluster do GKE.

Ativar o driver CSI do Cloud Storage FUSE

Siga estas etapas, dependendo se você está usando clusters do GKE Autopilot ou Standard. Recomendamos que você use um cluster do Autopilot para ter uma experiência totalmente gerenciada do Kubernetes. Para escolher o modo mais adequado para suas cargas de trabalho, consulte Escolher um modo de operação do GKE.

Piloto automático

O driver CSI do Cloud Storage FUSE é ativado por padrão para clusters do Autopilot. Você pode pular para Configurar o acesso a buckets do Cloud Storage.

Padrão

Se o cluster padrão tiver o driver CSI do FUSE do Cloud Storage ativado, pule para Configurar o acesso a buckets do Cloud Storage.

O driver CSI do Cloud Storage FUSE não é ativado por padrão em clusters padrão. Para criar um cluster Standard com o driver CSI do Cloud Storage FUSE ativado, use o comando gcloud container clusters create:

gcloud container clusters create CLUSTER_NAME \
    --addons GcsFuseCsiDriver \
    --cluster-version=VERSION \
    --location=LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • VERSION: o número da versão do GKE. Selecione 1.24 ou posterior.
  • LOCATION: a região ou zona do Compute Engine do cluster.
  • PROJECT_ID: o ID do projeto.

Para ativar o driver em um cluster padrão, use o comando [gcloud container clusters update](/sdk/gcloud/reference/container/clusters/update)`:

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

Para verificar se o driver FUSE CSI do Cloud Storage está ativado no cluster, execute o comando abaixo:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"

Configurar o acesso a buckets do Cloud Storage

O driver CSI do Cloud Storage FUSE usa a Federação de Identidade da Carga de Trabalho para GKE para que você possa definir permissões detalhadas sobre como os pods do GKE podem acessar dados armazenados no Cloud Storage.

Para tornar os buckets do Cloud Storage acessíveis pelo cluster do GKE, faça a autenticação usando a Federação de Identidade da Carga de Trabalho para GKE com o bucket do Cloud Storage que você quer montar na especificação do pod:

  1. Se a federação de identidade da carga de trabalho para GKE não estiver ativada, siga estas etapas para ativar.
  2. Receba as credenciais do cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster com a federação de identidade da carga de trabalho para o GKE ativada.
    • LOCATION: a região ou zona do Compute Engine para o cluster.
  3. Crie um namespace para usar na conta de serviço do Kubernetes. Também é possível usar o namespace default ou qualquer namespace existente.

    kubectl create namespace NAMESPACE
    

    Substitua NAMESPACE pelo nome do namespace do Kubernetes para a conta de serviço do Kubernetes.

  4. Crie uma conta de serviço do Kubernetes para o aplicativo usar. Também é possível usar qualquer Kubernetes ServiceAccount atual em qualquer namespace, incluindo a default do Kubernetes ServiceAccount.

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

    Substitua KSA_NAME pelo nome da sua conta de serviço do Kubernetes.

  5. Conceda um dos papéis do IAM para o Cloud Storage à conta de serviço do Kubernetes. Siga estas etapas, dependendo se você está concedendo à conta de serviço do Kubernetes acesso apenas a um bucket específico do Cloud Storage ou acesso global a todos os buckets no projeto.

    Acesso a um bucket específico

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

    Substitua:

    • BUCKET_NAME: seu nome do bucket do Cloud Storage
    • PROJECT_NUMBER: o número do projeto numérico do seu cluster do GKE. Para encontrar o número do projeto, consulte Identificar projetos.
    • PROJECT_ID: o ID do projeto do cluster do GKE.
    • NAMESPACE: o nome do namespace do Kubernetes da ServiceAccount.
    • KSA_NAME: o nome da ServiceAccount do Kubernetes.
    • ROLE_NAME: o papel do IAM a ser atribuído à sua conta de serviço do Kubernetes.
      • Para cargas de trabalho somente leitura, use o papel Leitor de objetos do Storage (roles/storage.objectViewer).
      • Para cargas de trabalho de leitura e gravação, use o papel de usuário do objeto do Storage (roles/storage.objectUser).

    Acesso global ao bucket

    gcloud projects add-iam-policy-binding GCS_PROJECT \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \
        --role "ROLE_NAME"
    

    Substitua:

    • GCS_PROJECT: o ID do projeto dos buckets do Cloud Storage.
    • PROJECT_NUMBER: o número do projeto numérico do seu cluster do GKE. Para encontrar o número do projeto, consulte Identificar projetos.
    • PROJECT_ID: o ID do projeto do cluster do GKE.
    • NAMESPACE: o nome do namespace do Kubernetes da ServiceAccount.
    • KSA_NAME: o nome da ServiceAccount do Kubernetes.
    • ROLE_NAME: o papel do IAM a ser atribuído à sua conta de serviço do Kubernetes.
      • Para cargas de trabalho somente leitura, use o papel Leitor de objetos do Storage (roles/storage.objectViewer).
      • Para cargas de trabalho de leitura e gravação, use o papel de usuário do objeto do Storage (roles/storage.objectUser).

A seguir