Acelerar a performance de leitura de cargas de trabalho com estado usando o cache de dados do GKE


Este guia descreve como melhorar a performance de aplicativos com estado que exigem muitas leituras usando o GKE Data Cache nos clusters do Google Kubernetes Engine (GKE). O GKE Data Cache é uma solução gerenciada de armazenamento em blocos que acelera as operações de leitura para aplicativos com estado, como bancos de dados, executados no GKE.

Só é possível usar o cache de dados com clusters do GKE Standard. Este guia mostra como ativar o GKE Data Cache ao criar um cluster padrão do GKE ou um pool de nós e como provisionar discos anexados do GKE com aceleração do Data Cache.

Sobre o cache de dados do GKE

Com o GKE Data Cache, é possível usar SSDs locais nos nós do GKE como uma camada de cache para seu armazenamento permanente, como discos permanentes ou hiperdiscos. O uso de SSDs locais reduz a latência de leitura do disco e aumenta as consultas por segundo (QPS) para suas cargas de trabalho com estado, minimizando os requisitos de memória. O GKE Data Cache é compatível com todos os tipos de Persistent Disk ou Hyperdisk como discos de apoio.

Para usar o GKE Data Cache no seu aplicativo, configure o pool de nós do GKE com SSDs locais anexados. É possível configurar o GKE Data Cache para usar todo ou parte do SSD local anexado. Os SSDs locais usados pela solução GKE Data Cache são criptografados em repouso usando a criptografia Trusted Cloud by S3NS padrão.

Vantagens

O GKE Data Cache oferece os seguintes benefícios:

  • Aumento da taxa de consultas processadas por segundo para bancos de dados convencionais, como MySQL ou Postgres, e bancos de dados vetoriais.
  • Melhoria no desempenho de leitura para aplicativos com estado ao minimizar a latência do disco.
  • Hidratação e reidratação de dados mais rápidas porque os SSDs são locais para o nó. A hidratação de dados se refere ao processo inicial de carregamento dos dados necessários do armazenamento permanente para o SSD local. A reidratação de dados se refere ao processo de restaurar os dados nos SSDs locais depois que um nó é reciclado.

Arquitetura de implantação

O diagrama a seguir mostra um exemplo de configuração do GKE Data Cache com dois pods que executam um app cada um. Os pods são executados no mesmo nó do GKE. Cada pod usa um SSD local separado e um disco permanente de apoio.

Arquitetura de implantação para o cache de dados do GKE
Figura 1. Arquitetura de implantação do GKE Data Cache.

Modos de implantação

É possível configurar o GKE Data Cache em um destes dois modos:

  • Writethrough (recomendado): quando o aplicativo grava dados, eles são gravados de forma síncrona no cache e no disco permanente subjacente. O modo writethrough evita a perda de dados e é adequado para a maioria das cargas de trabalho de produção.
  • Writeback: quando seu aplicativo grava dados, eles são gravados apenas no cache. Em seguida, os dados são gravados no disco permanente de forma assíncrona (em segundo plano). O modo writeback melhora o desempenho de gravação e é adequado para cargas de trabalho que dependem de velocidade. No entanto, esse modo afeta a confiabilidade. Se o nó for desligado de forma inesperada, os dados do cache não liberados serão perdidos.

Objetivos

Neste guia, você vai aprender a:

Requisitos e planejamento

Verifique se você atende aos seguintes requisitos para usar o GKE Data Cache:

  • Seu cluster do GKE precisa estar executando a versão 1.32.3-gke.1440000 ou mais recente.
  • Seus pools de nós precisam usar tipos de máquinas que ofereçam suporte a SSDs locais. Para mais informações, consulte Suporte para séries de máquinas.

Planejamento

Considere estes aspectos ao planejar a capacidade de armazenamento do GKE Data Cache:

  • O número máximo de pods por nó que usarão o GKE Data Cache simultaneamente.
  • Os requisitos de tamanho de cache esperados dos pods que vão usar o cache de dados do GKE.
  • A capacidade total de SSDs locais disponíveis nos nós do GKE. Para informações sobre quais tipos de máquinas têm SSDs locais anexados por padrão e quais exigem que você anexe SSDs locais, consulte Escolher um número válido de discos SSD locais.
  • Para tipos de máquinas de terceira geração ou mais recentes (que têm um número padrão de SSDs locais anexados), observe que os SSDs locais para cache de dados são reservados do total disponível de SSDs locais nessa máquina.
  • A sobrecarga do sistema de arquivos que pode reduzir o espaço utilizável nos SSDs locais. Por exemplo, mesmo que você tenha um nó com dois SSDs locais com 750 GiB de capacidade bruta total, o espaço disponível para todos os volumes de cache de dados pode ser menor devido à sobrecarga do sistema de arquivos. Parte da capacidade do SSD local é reservada para uso do sistema.

Preços

A capacidade total provisionada dos SSDs locais e dos discos permanentes anexados será cobrada. A cobrança é feita por GiB mensalmente.

Para mais informações, consulte Preços de disco na documentação do Compute Engine.

Antes de começar

Antes de começar, verifique se você realizou as seguintes tarefas:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Configurar nós do GKE para usar o cache de dados

Para começar a usar o GKE Data Cache para armazenamento acelerado, seus nós precisam ter os recursos necessários do SSD local. Esta seção mostra comandos para provisionar SSDs locais e ativar o GKE Data Cache ao criar um cluster do GKE ou adicionar um pool de nós a um cluster atual. Não é possível atualizar um pool de nós para usar o cache de dados. Se você quiser usar o cache de dados em um cluster atual, adicione um novo pool de nós a ele.

Em um novo cluster

Para criar um cluster do GKE com o cache de dados configurado, use o seguinte comando:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --data-cache-count=DATA_CACHE_COUNT \
    # Optionally specify additional Local SSDs, or skip this flag
    --ephemeral-storage-local-ssd count=LOCAL_SSD_COUNT

Substitua:

  • CLUSTER_NAME: o nome do cluster. Dê um nome exclusivo ao cluster do GKE que você está criando.
  • LOCATION: a Trusted Cloud by S3NS região ou zona do novo cluster.
  • MACHINE_TYPE: o tipo de máquina a ser usado em uma série de máquinas de segunda, terceira ou gerações posteriores para seu cluster, como n2-standard-2 ou c3-standard-4-lssd. Esse campo é obrigatório porque o SSD local não pode ser usado com o tipo e2-medium padrão. Para mais informações, consulte as séries de máquinas disponíveis.
  • DATA_CACHE_COUNT: o número de volumes SSD locais a serem dedicados exclusivamente para o cache de dados em cada nó no pool de nós padrão. Cada um desses SSDs locais tem uma capacidade de 375 GiB. O número máximo de volumes varia de acordo com o tipo de máquina e região. Lembre-se que uma parte da capacidade do SSD local é reservada para uso do sistema.
  • (Opcional) LOCAL_SSD_COUNT: o número de volumes SSD locais a serem provisionados para outras necessidades de armazenamento temporário. Use a flag --ephemeral-storage-local-ssd count se quiser provisionar outros SSDs locais que não são usados para o cache de dados.

    Observe o seguinte para os tipos de máquina de terceira geração ou mais recentes:

    • Os tipos de máquina de terceira geração ou mais recentes têm um número específico de SSDs locais anexados por padrão. O número de SSDs locais anexados a cada nó depende do tipo de máquina especificado.
    • Se você planeja usar a flag --ephemeral-storage-local-ssd count para armazenamento temporário adicional, defina o valor de DATA_CACHE_COUNT como um número menor que o total de discos SSD locais disponíveis na máquina. A contagem total de SSDs locais disponíveis inclui os discos anexados padrão e todos os novos discos adicionados usando a flag --ephemeral-storage-local-ssd count.

Esse comando cria um cluster do GKE que é executado em um tipo de máquina de segunda, terceira ou geração mais recente para o pool de nós padrão, provisiona SSDs locais para cache de dados e, opcionalmente, provisiona SSDs locais adicionais para outras necessidades de armazenamento temporário, se especificado.

Essas configurações são válidas apenas para o pool de nós padrão.

Em um cluster atual

Para usar o cache de dados em um cluster atual, crie um novo pool de nós com o cache de dados configurado.

Para criar um pool de nós do GKE com o cache de dados configurado, use o comando a seguir:

gcloud container node-pool create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --data-cache-count=DATA_CACHE_COUNT \
    # Optionally specify additional Local SSDs, or skip this flag
    --ephemeral-storage-local-ssd count=LOCAL_SSD_COUNT

Substitua:

  • NODE_POOL_NAME: o nome do pool de nós. Forneça um nome exclusivo para o pool de nós que você está criando.
  • CLUSTER_NAME: o nome de um cluster do GKE em que você quer criar o pool de nós.
  • LOCATION: a mesma Trusted Cloud by S3NS região ou zona do cluster.
  • MACHINE_TYPE: o tipo de máquina a ser usado em uma série de máquinas de segunda, terceira ou gerações posteriores para seu cluster, como n2-standard-2 ou c3-standard-4-lssd. Esse campo é obrigatório, já que o SSD local não pode ser usado com o tipo e2-medium padrão. Para mais informações, consulte as séries de máquinas disponíveis.
  • DATA_CACHE_COUNT: o número de volumes SSD locais a serem dedicados exclusivamente para o cache de dados em cada nó do pool de nós. Cada um desses SSDs locais tem uma capacidade de 375 GiB. O número máximo de volumes varia de acordo com o tipo de máquina e região. Lembre-se que uma parte da capacidade do SSD local é reservada para uso do sistema.
  • (Opcional) LOCAL_SSD_COUNT: o número de volumes SSD locais a serem provisionados para outras necessidades de armazenamento temporário. Use a flag --ephemeral-storage-local-ssd count se quiser provisionar outros SSDs locais que não são usados para o cache de dados.

    Observe o seguinte para os tipos de máquina de terceira geração ou mais recentes:

    • Os tipos de máquina de terceira geração ou mais recentes têm um número específico de SSDs locais anexados por padrão. O número de SSDs locais anexados a cada nó depende do tipo de máquina especificado.
    • Se você planeja usar a flag --ephemeral-storage-local-ssd count para armazenamento temporário adicional, defina DATA_CACHE_COUNT como menor que o número total disponível de discos SSD locais na máquina. A contagem total de SSDs locais disponíveis inclui os discos anexados padrão e todos os novos discos adicionados usando a flag --ephemeral-storage-local-ssd count.

Esse comando cria um pool de nós do GKE que é executado em um tipo de máquina de segunda, terceira ou geração mais recente, provisiona SSDs locais para cache de dados e, opcionalmente, provisiona SSDs locais adicionais para outras necessidades de armazenamento efêmero, se especificado.

Provisionar o cache de dados para armazenamento permanente no GKE

Esta seção mostra um exemplo de como ativar os benefícios de desempenho do GKE Data Cache para seus aplicativos com estado.

Criar um pool de nós com SSDs locais para cache de dados

Comece criando um pool de nós com SSDs locais anexados no cluster do GKE. O cache de dados do GKE usa os SSDs locais para acelerar o desempenho dos discos permanentes anexados.

O comando a seguir cria um pool de nós que usa uma máquina de segunda geração, n2-standard-2:

gcloud container node-pools create datacache-node-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --num-nodes=2 \
    --data-cache-count=1 \
    --machine-type=n2-standard-2

Substitua:

  • CLUSTER_NAME: o nome do cluster. Especifique o cluster do GKE em que você está criando o novo pool de nós.
  • LOCATION: a mesma região ou zona Trusted Cloud by S3NS do cluster.

Esse comando cria um pool de nós com as seguintes especificações:

  • --num-nodes=2: define o número inicial de nós neste pool como dois.
  • --data-cache-count=1: especifica um SSD local por nó dedicado ao GKE Data Cache.

O número total de SSDs locais provisionados para esse pool de nós é dois, porque cada nó é provisionado com um SSD local.

Criar um StorageClass de cache de dados

Crie um StorageClass do Kubernetes que informe ao GKE como provisionar dinamicamente um volume permanente que usa o cache de dados.

Use o seguinte manifesto para criar e aplicar um StorageClass chamado pd-balanced-data-cache-sc:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-balanced-data-cache-sc
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  data-cache-mode: writethrough
  data-cache-size: "100Gi"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
EOF

Os parâmetros StorageClass para o cache de dados incluem o seguinte:

  • type: especifica o tipo de disco subjacente para o volume permanente. Para mais opções, consulte os tipos de disco permanente ou Hyperdisk compatíveis.
  • data-cache-mode: usa o modo writethrough recomendado. Para mais informações, consulte Modos de implantação.
  • data-cache-size: define a capacidade do SSD local como 100 GiB, que é usada como um cache de leitura para cada PVC.

Solicitar armazenamento com um PersistentVolumeClaim (PVC)

Crie um PVC que faça referência à StorageClass pd-balanced-data-cache-sc que você criou. O PVC solicita um volume permanente com o cache de dados ativado.

Use o manifesto a seguir para criar um PVC chamado pvc-data-cache que solicita um volume permanente de pelo menos 300 GiB com acesso ReadWriteOnce.

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-data-cache
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 300Gi
  storageClassName: pd-balanced-data-cache-sc
EOF

Criar uma implantação que use o PVC

Crie uma implantação chamada postgres-data-cache que execute um pod usando o PVC pvc-data-cache criado anteriormente. O seletor de nós cloud.google.com/gke-data-cache-count garante que o pod seja programado em um nó com os recursos de SSD local necessários para usar o GKE Data Cache.

Crie e aplique o manifesto a seguir para configurar um pod que implanta um servidor da Web Postgres usando o PVC:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
 name: postgres-data-cache
 labels:
   name: database
   app: data-cache
spec:
 replicas: 1
 selector:
   matchLabels:
     service: postgres
     app: data-cache
 template:
   metadata:
     labels:
       service: postgres
       app: data-cache
   spec:
     nodeSelector:
       cloud.google.com/gke-data-cache-disk: "1"
     containers:
     - name: postgres
       image: postgres:14-alpine
       volumeMounts:
       - name: pvc-data-cache-vol
         mountPath: /var/lib/postgresql/data2
         subPath: postgres
       env:
       - name: POSTGRES_USER
         value: admin
       - name: POSTGRES_PASSWORD
         value: password
     restartPolicy: Always
     volumes:
     - name: pvc-data-cache-vol
       persistentVolumeClaim:
         claimName: pvc-data-cache
EOF

Confirme se a implantação foi criada:

kubectl get deployment

Pode levar alguns minutos para que o contêiner do Postgres conclua o provisionamento e mostre um status READY.

Verificar o provisionamento do cache de dados

Depois de criar a implantação, confirme se o armazenamento permanente com o cache de dados foi provisionado corretamente.

  1. Para verificar se o pvc-data-cache foi vinculado a um volume permanente, execute o seguinte comando:

    kubectl get pvc pvc-data-cache
    

    O resultado será assim:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                VOLUMEATTRIBUTESCLASS   AGE
    pvc-data-cache   Bound    pvc-e9238a16-437e-45d7-ad41-410c400ae018   300Gi      RWO            pd-balanced-data-cache-sc   <unset>                 10m
    
  2. Para confirmar se o grupo do Logical Volume Manager (LVM) para o cache de dados foi criado no nó, siga estas etapas:

    1. Consiga o nome do pod do driver PDCSI nesse nó:

      NODE_NAME=$(kubectl get pod --output json |  jq '.items[0].spec.nodeName' | sed 's/\"//g')
      kubectl get po -n kube-system -o wide | grep ^pdcsi-node | grep $NODE_NAME
      

      Na saída, copie o nome do pod pdcsi-node.

    2. Ver registros do driver PDCSI para criação de grupo LVM:

      PDCSI_POD_NAME="PDCSI-NODE_POD_NAME"
      kubectl logs -n kube-system $PDCSI_POD_NAME gce-pd-driver | grep "Volume group creation"
      

      Substitua PDCSI-NODE_POD_NAME pelo nome real do pod que você copiou na etapa anterior.

      O resultado será assim:

      Volume group creation succeeded for LVM_GROUP_NAME
      

Essa mensagem confirma que a configuração do LVM para o cache de dados está configurada corretamente no nó.

Limpar

Para evitar cobranças na sua conta do Trusted Cloud by S3NS , exclua os recursos de armazenamento criados neste guia.

  1. Exclua a implantação.

    kubectl delete deployment postgres-data-cache
    
  2. Exclua o PersistentVolumeClaim.

    kubectl delete pvc pvc-data-cache
    
  3. Exclua o pool de nós.

    gcloud container node-pools delete datacache-node-pool \
        --cluster CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster em que você criou o pool de nós que usa o cache de dados.

A seguir