Este guia mostra como configurar recursos para o contêiner secundário do driver CSI do Cloud Storage FUSE, incluindo a configuração de uma imagem particular, um buffer de gravação personalizado e um volume de cache de leitura personalizado. Normalmente, não é necessário mudar essas configurações.
O driver CSI do Cloud Storage FUSE usa um contêiner secundário personalizável para montar e acessar buckets do Cloud Storage de maneira eficiente. Ao configurar o sidecar, é possível ajustar o desempenho do aplicativo e o uso de recursos, o que pode resultar em acesso mais rápido aos dados, tempos de processamento mais rápidos e, possivelmente, menor consumo geral de recursos para o aplicativo.
Este guia é destinado a desenvolvedores, administradores e arquitetos que querem otimizar o desempenho, a segurança e a eficiência dos aplicativos que interagem com o GKE.
Antes de ler esta página, confira se você conhece os conceitos básicos do Cloud Storage, do Kubernetes e da contêinerização.
Como o contêiner sidecar funciona
O driver CSI do Cloud Storage FUSE usa um contêiner secundário para ativar
buckets do Cloud Storage e torná-los acessíveis como sistemas de arquivos locais para
aplicativos do Kubernetes. Esse contêiner de arquivo secundário, chamado gke-gcsfuse-sidecar
,
é executado junto com o contêiner de carga de trabalho no mesmo pod. Quando o driver
detecta a anotação gke-gcsfuse/volumes: "true"
em uma especificação de pod, ele
injetará automaticamente o contêiner de arquivo secundário. Essa abordagem de contêiner secundário
ajuda a garantir a segurança e gerenciar recursos de maneira eficaz.
O contêiner secundário processa as complexidades da ativação dos buckets do Cloud Storage e fornece acesso ao sistema de arquivos para os aplicativos sem exigir que você gerencie o tempo de execução do Cloud Storage FUSE diretamente. É possível configurar limites de recursos para o contêiner de arquivo secundário usando anotações como gke-gcsfuse/cpu-limit
e gke-gcsfuse/memory-limit
. O modelo de contêiner secundário também garante que a instância do Cloud Storage FUSE esteja vinculada ao ciclo de vida da carga de trabalho, evitando que ela consuma recursos desnecessariamente. Isso significa que o contêiner secundário será encerrado automaticamente quando os contêineres de carga de trabalho forem encerrados, especialmente em cargas de trabalho de job ou pods com um RestartPolicy
de Never
.
Compatibilidade com o Istio
O contêiner secundário do driver CSI do Cloud Storage FUSE e o Istio podem coexistir e ser executados simultaneamente no seu pod. O proxy sidecar do Istio gerencia o tráfego de rede, enquanto o sidecar do CSI otimiza o acesso ao armazenamento, permitindo que seus aplicativos interajam de maneira eficiente com o Google Cloud Storage com melhor desempenho e capacidade de observação.
Configurar um buffer de gravação personalizado
O Cloud Storage FUSE prepara gravações em um diretório local e faz upload para o Cloud Storage em operações close
ou fsync
.
Nesta seção, descrevemos como configurar um volume de buffer personalizado para o armazenamento em buffer de gravação do Cloud Storage FUSE. Este cenário pode ser aplicável se você precisar
substituir o volume emptyDir
padrão do Cloud Storage FUSE para preparar os arquivos em
operações de gravação. Isso é útil se você precisar gravar arquivos maiores que
10 GiB nos clusters do Autopilot.
É possível especificar qualquer tipo de armazenamento compatível com o driver CSI do Cloud Storage FUSE para armazenamento em cache de arquivos, como um SSD local, armazenamento baseado em Persistent Disk e disco RAM (memória). O GKE vai usar o volume especificado para armazenamento em buffer de gravação de arquivo. Para saber mais sobre essas opções, consulte Selecionar o armazenamento para fazer backup do cache de arquivos.
Para usar o volume de buffer personalizado, especifique um fsGroup
diferente de zero.
O exemplo a seguir mostra como 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:
- FS_GROUP: o ID do fsGroup.
- BUFFER_VOLUME_PVC: o nome da PVC predefinida.
Configurar um volume de cache de leitura personalizado
Nesta seção, descrevemos como configurar um volume de cache personalizado para o armazenamento em cache de leitura do Cloud Storage FUSE.
Este cenário pode ser aplicável se você precisar substituir
o volume emptyDir
padrão do Cloud Storage FUSE para armazenar em cache os arquivos em operações de
leitura. É possível especificar qualquer tipo de armazenamento compatível com o GKE, como um PersistentVolumeClaim, e o GKE usará o volume especificado para armazenamento em cache de arquivos. Isso é útil se você precisar armazenar em cache arquivos
maiores que 10 GiB em clusters do Autopilot. Para usar o volume de cache personalizado, especifique um fsGroup
diferente de zero.
O exemplo a seguir mostra como 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:
FS_GROUP
: o ID dofsGroup
.CACHE_VOLUME_PVC
: o nome predefinido do PersistentVolumeClaim.
Configurar uma imagem particular para o contêiner sidecar
Nesta seção, descrevemos como usar a imagem do contêiner secundário quando você a hospeda em um registro de contêiner particular. Esse cenário será aplicável se você precisar usar nós particulares para fins de segurança.
Para configurar e consumir a imagem do contêiner secundário particular, siga estas etapas:
- Consulte esta tabela de compatibilidade do GKE para encontrar uma imagem de contêiner secundário público compatível.
- Extraia-a para o ambiente local e envie para o registro de contêiner particular.
No manifesto, especifique um contêiner chamado
gke-gcsfuse-sidecar
apenas com o campo de imagem. O GKE usará a imagem do contêiner secundário especificada para se preparar para a injeção desse contêiner.Veja 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:
PRIVATE_REGISTRY
: o registro de contêiner particular.PRIVATE_IMAGE_TAG
: a tag de imagem do contêiner secundário particular.
Configurar recursos do contêiner de arquivo secundário
Por padrão, o contêiner gke-gcsfuse-sidecar
é configurado com as seguintes solicitações e limites de recursos para clusters Standard e Autopilot:
Solicitações:
- 250m CPU
- 256 MiB de memória
- Armazenamento temporário de 5 GiB
Limites (GKE versão 1.29.1-gke.1670000
e mais recente):
- 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
- Armazenamento temporário de 5 GiB
Por padrão, o contêiner gke-gcsfuse-metadata-prefetch
é configurado com as seguintes solicitações e limites de recursos para clusters Standard e Autopilot:
Solicitações:
- 10m CPU
- 10 MiB de memória
- Armazenamento temporário de 10 MiB
Limites:
- 50m CPU
- 250 MiB de memória
- armazenamento temporário ilimitado
Nos clusters Standard e do Autopilot, é possível substituir os valores padrão. A maneira como o GKE processa os recursos de contêiner depende do modo de operação do cluster:
- Clusters padrão: se um dos valores de solicitação ou limite for definido e outro não, os limites e solicitações de recursos dos pods serão definidos como iguais. Se as solicitações e os limites forem definidos, os pods usarão as solicitações e os limites de recursos exatos especificados. Se você não definir nenhum valor, os recursos padrão (descritos acima) serão aplicados diretamente.
- Clusters do Autopilot: se uma das solicitações ou limites for definida e outra não, os limites e solicitações de recursos dos pods serão definidos como iguais. Consulte Como definir limites de recursos no Autopilot para entender como as substituições de recursos e os valores padrão definidos afetam o comportamento do pod.
Para substituir os valores padrão do contêiner gke-gcsfuse-sidecar
, é possível especificar a anotação gke-gcsfuse/[cpu-limit|memory-limit|ephemeral-storage-limit|cpu-request|memory-request|ephemeral-storage-request]
, conforme mostrado no exemplo a seguir:
Para substituir os valores padrão do contêiner gke-gcsfuse-metadata-prefetch
(a partir da versão 1.32.3-gke.1717000
do GKE e posteriores), é possível especificar 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 a seguir:
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
É possível usar o valor "0"
para cancelar a definição de limites ou solicitações de recursos, mas observe que
o contêiner gke-gcsfuse-sidecar
já tem todos os limites (cpu-limit
, memory-limit
e ephemeral-storage-limit
) cancelados, e o contêiner gke-gcsfuse-metadata-prefetch
já tem ephemeral-storage-limit
cancelado. Portanto, definir esses limites como "0"
em um cluster com a versão 1.32.3-gke.1717000
ou mais recente do GKE não teria efeito.
Por exemplo, definir gke-gcsfuse/metadata-prefetch-memory-limit: "0"
indica que você quer que o limite de memória do contêiner gke-gcsfuse-metadata-prefetch
não seja definido.
Isso é útil quando não é possível decidir a quantidade de recursos que o recurso de pré-busca de metadados precisa para as cargas de trabalho, e você quer permitir que a pré-busca de metadados consuma todos os recursos disponíveis em um nó.
Configurar o detalhamento da geração de registros
Por padrão, o contêiner gke-gcsfuse-sidecar
gera registros nos níveis info
e error
.
No entanto, para depuração ou análise mais detalhada, talvez seja necessário ajustar o nível de detalhe do registro. Esta seção descreve como aumentar ou diminuir o nível de geração de registros.
É possível usar opções de montagem para configurar o nível de detalhe da geração de registros ou usar a capacidade do driver CSI de traduzir valores de atributo de volume nas configurações necessárias do gcsfuse.
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:
BUCKET_NAME
: seu nome do bucket do Cloud StorageLOGGING_SEVERITY
: um dos seguintes valores, com base nos seus requisitos:trace
debug
info
warning
error
Depois que o pod é implantado, o driver CSI inicia o gcsfuse com o nível de registro recém-configurado.
Use o filtro a seguir para verificar se a gravidade do registro está sendo aplicada:
resource.labels.container_name="gke-gcsfuse-sidecar"
resource.type="k8s_container"
resource.labels.pod_name="POD_NAME"
"severity:"
A seguir
- Saiba como otimizar o desempenho do driver CSI do Cloud Storage FUSE.
- Confira mais exemplos de uso do driver CSI no GitHub.
- Saiba mais sobre o Cloud Storage FUSE.