Este guia mostra como configurar recursos para o contentor auxiliar do controlador CSI do FUSE do Cloud Storage, incluindo a configuração de uma imagem privada, um buffer de escrita personalizado e um volume de cache de leitura personalizado. Normalmente, não precisa de alterar estas definições.
O controlador CSI FUSE do Cloud Storage usa um contentor sidecar personalizável para montar e aceder de forma eficiente a contentores do Cloud Storage. Ao configurar o sidecar, pode otimizar o desempenho da aplicação e a utilização de recursos, o que pode levar a um acesso mais rápido aos dados, tempos de processamento mais rápidos e, potencialmente, um consumo de recursos geral mais baixo para a sua aplicação.
Este guia destina-se a programadores, administradores e arquitetos que querem otimizar o desempenho, a segurança e a eficiência das respetivas aplicações que interagem com o GKE.
Antes de ler esta página, certifique-se de que conhece os conceitos básicos do Cloud Storage, do Kubernetes e da contentorização.
Como funciona o contentor auxiliar
O controlador CSI FUSE do Cloud Storage usa um contentor sidecar para montar contentores do Cloud Storage de modo a torná-los acessíveis como sistemas de ficheiros locais para aplicações Kubernetes. Este contentor auxiliar, denominado gke-gcsfuse-sidecar
, é executado juntamente com o contentor de carga de trabalho no mesmo pod. Quando o controlador
deteta a anotação gke-gcsfuse/volumes: "true"
numa especificação de pod, injeta automaticamente o contentor sidecar. Esta abordagem de contentor auxiliar ajuda a garantir a segurança e a gerir os recursos de forma eficaz.
O contentor sidecar processa as complexidades da montagem dos contentores do Cloud Storage e fornece acesso ao sistema de ficheiros às aplicações sem que tenha de gerir diretamente o tempo de execução do FUSE do Cloud Storage. Pode configurar
limites de recursos para o contentor sidecar através de anotações como
gke-gcsfuse/cpu-limit
e gke-gcsfuse/memory-limit
. O modelo de contentor auxiliar também garante que a instância do FUSE do Cloud Storage está associada ao ciclo de vida da carga de trabalho, o que impede o consumo desnecessário de recursos. Isto significa que o contentor auxiliar termina automaticamente quando os contentores de carga de trabalho são fechados, especialmente em cargas de trabalho de tarefas ou pods com um RestartPolicy
de Never
.
Compatibilidade com o Istio
O contentor auxiliar do controlador CSI FUSE do Cloud Storage e o Istio podem coexistir e ser executados em simultâneo no seu pod. O proxy sidecar do Istio gere o tráfego de rede, enquanto o sidecar do CSI otimiza o acesso ao armazenamento, o que permite que as suas aplicações interajam de forma eficiente com o Google Cloud Storage com um desempenho e uma observabilidade melhorados.
Configure um buffer de gravação personalizado
O Cloud Storage FUSE organiza as escritas num diretório local e, em seguida, carrega-as para o Cloud Storage em operações close
ou fsync
.
Esta secção descreve como configurar um volume de buffer personalizado para o armazenamento em buffer de escrita do FUSE do Cloud Storage. Este cenário pode aplicar-se se precisar de
substituir o volume emptyDir
predefinido do FUSE do Cloud Storage para preparar os ficheiros em
operações de escrita. Isto é útil se precisar de escrever ficheiros com mais de 10 GiB em clusters do Autopilot.
Pode especificar qualquer tipo de armazenamento suportado pelo controlador CSI FUSE do Cloud Storage para o armazenamento em cache de ficheiros, como um SSD local, armazenamento baseado em disco persistente e disco RAM (memória). O GKE usa o volume especificado para o armazenamento em buffer de escrita de ficheiros. Para saber mais sobre estas opções, consulte o artigo Selecione o armazenamento para fazer uma cópia de segurança da cache de ficheiros.
Para usar o volume de buffer personalizado, tem de especificar um valor fsGroup
diferente de zero.
O exemplo seguinte mostra como pode usar um PersistentVolumeClaim predefinido como o volume de buffer:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
securityContext:
fsGroup: FS_GROUP
containers:
...
volumes:
- name: gke-gcsfuse-buffer
persistentVolumeClaim:
claimName: BUFFER_VOLUME_PVC
Substitua o seguinte:
- FS_GROUP: o ID fsGroup.
- BUFFER_VOLUME_PVC: o nome do PVC predefinido.
Configure um volume de cache de leitura personalizado
Esta secção descreve como configurar um volume de cache personalizado para a colocação em cache de leitura do FUSE do Cloud Storage.
Este cenário pode aplicar-se se precisar de substituir o volume emptyDir
predefinido para o FUSE do Cloud Storage para colocar os ficheiros em cache nas operações de leitura. Pode especificar qualquer tipo de armazenamento suportado pelo GKE, como um PersistentVolumeClaim, e o GKE usa o volume especificado para o armazenamento em cache de ficheiros. Isto é útil se precisar de colocar em cache ficheiros com mais de 10 GiB em clusters do Autopilot. Para usar o volume de cache personalizado, tem de especificar um valor fsGroup
diferente de zero.
O exemplo seguinte mostra como pode usar um PersistentVolumeClaim predefinido como o volume de cache:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
spec:
securityContext:
fsGroup: FS_GROUP
containers:
...
volumes:
- name: gke-gcsfuse-cache
persistentVolumeClaim:
claimName: CACHE_VOLUME_PVC
Substitua o seguinte:
FS_GROUP
: o ID defsGroup
.CACHE_VOLUME_PVC
: o nome PersistentVolumeClaim predefinido.
Configure uma imagem privada para o contentor sidecar
Esta secção descreve como usar a imagem do contentor sidecar se a estiver a alojar num registo de contentores privado. Este cenário pode aplicar-se se precisar de usar nós privados para fins de segurança.
Para configurar e consumir a imagem do contentor sidecar privado, siga estes passos:
- Consulte esta tabela de compatibilidade do GKE para encontrar uma imagem de contentor sidecar público compatível.
- Extraia-o para o seu ambiente local e envie-o para o seu registo de contentores privado.
No manifesto, especifique um contentor denominado
gke-gcsfuse-sidecar
com apenas o campo de imagem. O GKE usa a imagem do contentor auxiliar especificada para se preparar para a injeção do contentor auxiliar.Vejamos um exemplo:
apiVersion: v1 kind: Pod metadata: annotations: gke-gcsfuse/volumes: "true" spec: containers: - name: gke-gcsfuse-sidecar image: PRIVATE_REGISTRY/gcs-fuse-csi-driver-sidecar-mounter:PRIVATE_IMAGE_TAG - name: main # your main workload container.
Substitua o seguinte:
PRIVATE_REGISTRY
: o seu registo de contentores privado. Por exemplo,us-central1-docker.pkg.dev/my-project/my-registry
.PRIVATE_IMAGE_TAG
: a etiqueta de imagem do contentor sidecar privado. Por exemplo,v1.17.1-gke.1
.
Configure os recursos do contentor auxiliar
Por predefinição, o contentor gke-gcsfuse-sidecar
está configurado com os seguintes pedidos de recursos e limites para clusters Standard e Autopilot:
Pedidos:
- 250m CPU
- 256 MiB de memória
- 5 GiB de armazenamento temporário
Limites (versão 1.29.1-gke.1670000
do GKE e posteriores):
- CPU ilimitada
- memória ilimitada
- Armazenamento temporário ilimitado
Limites (antes da versão 1.29.1-gke.1670000
do GKE):
- 250m CPU
- 256 MiB de memória
- 5 GiB de armazenamento temporário
Por predefinição, o contentor gke-gcsfuse-metadata-prefetch
está configurado com os seguintes pedidos de recursos e limites para clusters Standard e Autopilot:
Pedidos:
- CPU de 10 min
- 10 MiB de memória
- 10 MiB de armazenamento temporário
Limites:
- 50 m de CPU
- 250 MiB de memória
- Armazenamento temporário ilimitado
Nos clusters padrão e do Autopilot, pode substituir os valores predefinidos. A forma como o GKE processa os recursos de contentores depende do modo de funcionamento do cluster:
- Clusters padrão: se um dos pedidos ou limites for definido e outro não, os limites e os pedidos de recursos dos pods são definidos como iguais. Se o pedido e os limites estiverem definidos, os pods usam os pedidos e os limites de recursos exatos que especificar. Se não definir nenhum valor, os recursos predefinidos (descritos acima) são aplicados diretamente.
- Clusters do Autopilot: se um dos pedidos ou limites for definido e outro não for definido, os limites e os pedidos de recursos dos pods são definidos como iguais. Consulte o artigo Definir limites de recursos no Autopilot para compreender como as substituições de recursos e os valores de recursos predefinidos afetam o comportamento do pod.
Para substituir os valores predefinidos do contentor gke-gcsfuse-sidecar
, pode especificar opcionalmente a anotação
gke-gcsfuse/[cpu-limit|memory-limit|ephemeral-storage-limit|cpu-request|memory-request|ephemeral-storage-request]
, conforme mostrado no exemplo seguinte:
Para substituir os valores predefinidos do contentor gke-gcsfuse-metadata-prefetch
(a partir da versão 1.32.3-gke.1717000
do GKE e posterior), pode especificar opcionalmente a anotação
gke-gcsfuse/[metadata-prefetch-cpu-limit|metadata-prefetch-memory-limit|metadata-prefetch-ephemeral-storage-limit|metadata-prefetch-cpu-request|metadata-prefetch-memory-request|metadata-prefetch-ephemeral-storage-request]
, conforme mostrado no exemplo seguinte:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-gcsfuse/volumes: "true"
# gke-gcsfuse-sidecar overrides
gke-gcsfuse/cpu-limit: "10"
gke-gcsfuse/memory-limit: 10Gi
gke-gcsfuse/ephemeral-storage-limit: 1Ti
gke-gcsfuse/cpu-request: 500m
gke-gcsfuse/memory-request: 1Gi
gke-gcsfuse/ephemeral-storage-request: 50Gi
# gke-gcsfuse-metadata-prefetch overrides
gke-gcsfuse/metadata-prefetch-cpu-limit: "10"
gke-gcsfuse/metadata-prefetch-memory-limit: 10Gi
gke-gcsfuse/metadata-prefetch-ephemeral-storage-limit: 1Ti
gke-gcsfuse/metadata-prefetch-cpu-request: 500m
gke-gcsfuse/metadata-prefetch-memory-request: 1Gi
gke-gcsfuse/metadata-prefetch-ephemeral-storage-request: 50Gi
Pode usar o valor "0"
para anular a definição de quaisquer limites ou pedidos de recursos, mas tenha em atenção que o contentor gke-gcsfuse-sidecar
já tem todos os limites (cpu-limit
, memory-limit
e ephemeral-storage-limit
) anulados, e o contentor gke-gcsfuse-metadata-prefetch
já tem ephemeral-storage-limit
anulado. Por isso, definir estes limites como "0"
num cluster com a versão 1.32.3-gke.1717000
ou posterior do GKE não teria qualquer efeito.
Por exemplo, a definição gke-gcsfuse/metadata-prefetch-memory-limit: "0"
indica que quer que o limite de memória do contentor gke-gcsfuse-metadata-prefetch
não esteja definido.
Isto é útil quando não consegue decidir a quantidade de recursos que a funcionalidade de pré-obtenção de metadados precisa para as suas cargas de trabalho e quer permitir que a pré-obtenção de metadados consuma todos os recursos disponíveis num nó.
Configure a verbosidade do registo
Por predefinição, o contentor gke-gcsfuse-sidecar
gera registos nos níveis info
e error
.
No entanto, para a depuração ou uma análise mais detalhada, pode ter de ajustar o nível de detalhe do registo. Esta secção descreve como aumentar ou diminuir o nível de registo.
Pode usar opções de montagem para configurar a verbosidade do registo ou usar a capacidade do controlador CSI para traduzir os valores do atributo de volume nas definições de configuração do gcsfuse necessárias.
No manifesto do Pod de destino, inclua as seguintes configurações:
volumeAttributes:
bucketName: BUCKET_NAME
mountOptions: "implicit-dirs"
gcsfuseLoggingSeverity: LOGGING_SEVERITY
Para usar as opções de montagem, inclua a seguinte configuração no manifesto do pod de destino:
mountOptions: "logging:severity:LOGGING_SEVERITY"
Substitua o seguinte:
BUCKET_NAME
: o nome do seu contentor do Cloud Storage.LOGGING_SEVERITY
: um dos seguintes valores, com base nos seus requisitos:trace
debug
info
warning
error
Após a implementação do pod, o controlador CSI inicia o gcsfuse com o nível de registo configurado recentemente.
Pode usar o seguinte filtro para verificar se a gravidade do registo está aplicada:
resource.labels.container_name="gke-gcsfuse-sidecar"
resource.type="k8s_container"
resource.labels.pod_name="POD_NAME"
"severity:"
Resolver problemas
Para mais informações sobre a resolução de problemas do controlador CSI do FUSE do Cloud Storage, consulte o guia de resolução de problemas na documentação do projeto do GitHub.
O que se segue?
- Saiba como otimizar o desempenho do controlador CSI FUSE do Cloud Storage.
- Explore exemplos adicionais para usar o controlador CSI no GitHub.
- Saiba mais sobre o FUSE do Cloud Storage.