Esta página descreve como pode configurar e preparar-se para usar o controlador CSI FUSE do Cloud Storage para o GKE.
Para usar o controlador CSI FUSE do Cloud Storage, siga estes passos:
- Crie o contentor do Cloud Storage
- Ative o controlador
- Configure o acesso ao seu contentor do Cloud Storage
Crie o contentor do Cloud Storage
Se ainda não o fez, crie os seus contentores do Cloud Storage. Vai montar estes contentores como volumes no seu cluster do GKE. Para melhorar o desempenho, defina o Tipo de localização como Região e selecione uma região que corresponda ao seu cluster do GKE.
Ative o controlador CSI FUSE do Cloud Storage
Siga estes passos, consoante esteja a usar clusters do GKE Autopilot ou Standard. Recomendamos que use um cluster do Autopilot para uma experiência do Kubernetes totalmente gerida. Para escolher o modo mais adequado às suas cargas de trabalho, consulte Escolha um modo de funcionamento do GKE.
Piloto automático
O controlador CSI FUSE do Cloud Storage está ativado por predefinição para clusters do Autopilot. Pode avançar para a secção Configure o acesso a contentores do Cloud Storage.
Standard
Se o cluster Standard tiver o controlador CSI do FUSE do Cloud Storage ativado, avance para a secção Configure o acesso a contentores do Cloud Storage.
O controlador CSI FUSE do Cloud Storage não está ativado por predefinição nos clusters Standard. Para criar um cluster padrão com o controlador CSI FUSE do Cloud Storage ativado, pode usar 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 o seguinte:
CLUSTER_NAME
: o nome do cluster.VERSION
: o número da versão do GKE. Tem de selecionar a versão 1.24 ou posterior.LOCATION
: a região ou zona do Compute Engine para o cluster.PROJECT_ID
: o ID do seu projeto.
Para ativar o controlador num cluster padrão existente, use o comando gcloud container clusters update
:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
Para verificar se o controlador CSI FUSE do Cloud Storage está ativado no seu cluster, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
Configure o acesso a contentores do Cloud Storage
O controlador CSI do FUSE do Cloud Storage usa a Workload Identity Federation para o GKE, para que possa definir autorizações detalhadas sobre a forma como os seus pods do GKE podem aceder aos dados armazenados no Cloud Storage.
Para tornar os seus contentores do Cloud Storage acessíveis pelo cluster do GKE, autentique-se através da Workload Identity Federation para o GKE com o contentor do Cloud Storage que quer montar na especificação do pod:
- Se não tiver a Workload Identity Federation para o GKE ativada, siga estes passos para a ativar. Se quiser usar um conjunto de nós existente, ative manualmente a federação de identidade da força de trabalho para o GKE no conjunto de nós depois de ativar a federação de identidade da força de trabalho para o GKE no cluster.
Obtenha credenciais para o seu cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster que tem a Workload Identity Federation para o GKE ativada.LOCATION
: a região ou zona do Compute Engine para o cluster.
Crie um espaço de nomes para usar para a conta de serviço do Kubernetes. Também pode usar o espaço de nomes
default
ou qualquer espaço de nomes existente.kubectl create namespace NAMESPACE
Substitua
NAMESPACE
pelo nome do espaço de nomes do Kubernetes para a conta de serviço do Kubernetes.Crie uma ServiceAccount do Kubernetes para a sua aplicação usar. Também pode usar qualquer conta de serviço do Kubernetes existente em qualquer espaço de nomes, incluindo a conta de serviço do Kubernetes
default
.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACE
Substitua
KSA_NAME
pelo nome da sua ServiceAccount do Kubernetes.Conceda uma das funções de IAM para o Cloud Storage à conta de serviço do Kubernetes. Siga estes passos, consoante esteja a conceder acesso à conta de serviço do Kubernetes apenas a um contentor do Cloud Storage específico ou acesso global a todos os contentores no projeto.
Acesso a contentores específicos
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 o seguinte:
BUCKET_NAME
: o nome do seu contentor 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 o artigo Identificar projetos.PROJECT_ID
: o ID do projeto do seu cluster do GKE.NAMESPACE
: o nome do namespace do Kubernetes para a ServiceAccount do Kubernetes.KSA_NAME
: o nome da sua nova conta de serviço do Kubernetes.ROLE_NAME
: a função de IAM a atribuir à sua conta de serviço do Kubernetes.- Para cargas de trabalho só de leitura, use a função Storage Object Viewer (
roles/storage.objectViewer
). - Para cargas de trabalho de leitura/escrita, use a função de utilizador de objetos de armazenamento (
roles/storage.objectUser
).
- Para cargas de trabalho só de leitura, use a função Storage Object Viewer (
Acesso global ao contentor
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 o seguinte:
GCS_PROJECT
: o ID do projeto dos seus contentores 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 o artigo Identificar projetos.PROJECT_ID
: o ID do projeto do seu cluster do GKE.NAMESPACE
: o nome do namespace do Kubernetes para a ServiceAccount do Kubernetes.KSA_NAME
: o nome da sua nova conta de serviço do Kubernetes.ROLE_NAME
: a função de IAM a atribuir à sua conta de serviço do Kubernetes.- Para cargas de trabalho só de leitura, use a função Storage Object Viewer (
roles/storage.objectViewer
). - Para cargas de trabalho de leitura/escrita, use a função de utilizador de objetos de armazenamento (
roles/storage.objectUser
).
- Para cargas de trabalho só de leitura, use a função Storage Object Viewer (
Configure o acesso para pods com rede de anfitrião
Para versões do cluster do GKE anteriores a 1.33.3-gke.1226000
, o controlador CSI do FUSE do Cloud Storage não suporta pods executados na rede do anfitrião (hostNetwork: true
) devido a restrições da Workload Identity Federation para o GKE. No entanto, para versões posteriores do GKE, pode configurar a autenticação segura para os pods com hostNetwork
quando usa o controlador CSI do FUSE do Cloud Storage para montar contentores do Cloud Storage. O suporte de rede de anfitrião só está disponível em clusters GKE padrão.
Certifique-se de que o cluster do GKE cumpre os seguintes requisitos:
- Tanto o plano de controlo como os conjuntos de nós no cluster do GKE Standard têm de ter a versão
1.33.3-gke.1226000
ou posterior. - Ative o Workload Identity no seu cluster.
- Conceda as autorizações do IAM necessárias à conta de serviço do Kubernetes que o pod com
hostNetwork
usa para aceder ao seu contentor do Cloud Storage. Para mais informações, consulte o artigo Autentique-se no Cloud Storage FUSE.
Especifique o atributo de volume hostNetworkPodKSA: "true"
na definição de Pod ou PersistentVolume para permitir que os seus Pods HostNetwork
acedam a volumes do Cloud Storage. A configuração exata difere consoante a forma como gere o contentor auxiliar do FUSE do Cloud Storage.
Ficheiros sidecar geridos
Esta secção aplica-se se o GKE injetar e gerir automaticamente o contentor secundário do FUSE do Cloud Storage nos seus pods. Esta opção é a configuração predefinida e recomendada para o controlador CSI do FUSE do Cloud Storage.
Volume temporário
A configuração do manifesto do pod seguinte configura um volume efémero para um pod aceder a um contentor do Cloud Storage.HostNetwork
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
Volume persistente
O seguinte manifesto de PV configura um PV para um HostNetwork
Pod aceder a um contentor do Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
Private sidecars
Esta secção aplica-se se gerir manualmente o contentor auxiliar do FUSE do Cloud Storage nos seus pods ou usar uma imagem auxiliar personalizada.
Certifique-se de que a imagem sidecar se baseia na versão v1.17.2 ou posterior do controlador CSI do FUSE do Cloud Storage.
Volume temporário
A configuração do manifesto do pod seguinte configura um volume efémero para um pod aceder a um contentor do Cloud Storage.HostNetwork
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
No campo identityProvider
, substitua o seguinte:
PROJECT_ID
: o ID do seu Cloud de Confiance by S3NS projeto.LOCATION
: a localização do seu cluster.CLUSTER_NAME
: o nome do seu cluster do GKE Standard.
Volume persistente
O seguinte manifesto de PV configura um PV para um HostNetwork
Pod aceder a um contentor do Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
No campo identityProvider
, substitua o seguinte:
PROJECT_ID
: o ID do seu Cloud de Confiance by S3NS projeto.LOCATION
: a localização do seu cluster.CLUSTER_NAME
: o nome do seu cluster do GKE Standard.
O que se segue?
- Resolva problemas do FUSE do armazenamento na nuvem
- Otimize o FUSE do Cloud Storage para o desempenho
- Saiba como montar contentores do Cloud Storage especificando os seus contentores incorporados na especificação do pod.
- Saiba como montar contentores do Cloud Storage através de um recurso PersistentVolume.
- Saiba mais sobre a configuração de aplicações para usar a Workload Identity Federation para o GKE.