Criar uma implantação no Kubernetes

Este documento explica como criar uma implantação do Spanner Omni no Kubernetes. Esta implantação não está criptografada. Se você quiser configurar rapidamente um ambiente de teste ou prova de conceito para avaliar o Spanner Omni, criar uma implantação sem criptografia é a maneira mais rápida de começar porque não exige que você configure o mTLS ou outras medidas de segurança. No entanto, devido a riscos de segurança, como tráfego de rede não criptografado e acesso aberto, essa configuração não é recomendada para ambientes de produção. Você pode escolher entre uma implantação de servidor único ou regional em várias zonas.

Antes de começar

Antes de implantar o Spanner Omni, verifique se o ambiente atende aos seguintes requisitos:

  • Criar um cluster do Kubernetes A configuração é compatível com o Google Kubernetes Engine (GKE) e o Amazon Elastic Kubernetes Service (Amazon EKS). Talvez seja necessário personalizar a configuração para que ela funcione em outros ambientes.

  • Verifique se o cluster do Kubernetes pode acessar o artefato do Artifact Registry que hospeda o contêiner do Spanner Omni.

  • Instale e configure a ferramenta de linha de comando kubectl e o Helm.

  • Se você configurar o ambiente do Kubernetes em máquinas da plataforma de virtualização vSphere, desative a virtualização do contador de carimbos de data/hora (TSC) adicionando monitor_control.virtual_rdtsc = FALSE ao arquivo de configuração .vmx da máquina virtual. Isso ajuda o TrueTime a funcionar corretamente.

  • Verifique se o ambiente atende aos requisitos do sistema do Spanner Omni.

  • Escolha uma topologia para sua implantação.

Preparar a configuração do Helm

Crie uma configuração do Helm. Para mais informações, consulte Criar uma configuração do Helm.

Criar a implantação

Instale o gráfico do Helm com as substituições específicas. Confira a seguir exemplos de comandos para as implantações mais comuns:

Exemplo 1: executar o Spanner Omni em um único servidor no GKE com a pilha de monitoramento

Para executar o Spanner Omni em um único servidor no GKE com a pilha de monitoramento, execute o seguinte comando:

  kubectl create ns monitoring
  helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni --version 1.0.0 \
    --set global.platform=gke \
    --set deployment.singleServer=true \
    --set monitoring.enabled=true \
    --namespace spanner-ns \
    --create-namespace

Exemplo 2: executar o Spanner Omni em vários servidores no GKE

Para executar o Spanner Omni em vários servidores em uma única zona (us-central1-a) no GKE, execute o seguinte comando:

  kubectl create ns monitoring
  helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni --version 1.0.0 \
    --set global.platform=gke \
    --set deployment.replicasPerZone=5 \
    --set deployment.rootServersPerZone=3 \
    --set-json 'locations=[{"name":"us-central1","zones":[{"name":"us-central1-a","shortName":"a"}]}]' \
    --set monitoring.enabled=true \
    --namespace spanner-ns \
    --create-namespace

O número de servidores raiz por zona precisa ser um número ímpar entre 1 e 9, inclusive, para garantir o quorum de consistência. Se o número de servidores for par, as implantações poderão falhar. Ao configurar as zonas, designe servidores como servidores raiz. Recomendamos que você use um para desenvolvimento ou teste e três para zonas de produção de alta disponibilidade.

Exemplo 3: implantação regional altamente disponível

Essa implantação mantém três cópias dos dados, permitindo que o Spanner Omni continue funcionando mesmo que uma zona sofra uma interrupção. Para criar esse implantação, execute o seguinte comando:

  kubectl create ns monitoring
  helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni --version 1.0.0 \
    --set global.platform=gke \
    --set-json 'locations=[{"name":"us-central1","zones":[{"name":"us-central1-a","shortName":"a"},{"name":"us-central1-c","shortName":"b"},{"name":"us-central1-d","shortName":"c"}]}]' \
    --set monitoring.enabled=true \
    --namespace spanner-ns \
    --create-namespace

Verificar o status dos pods

Para verificar o status dos pods, execute o seguinte comando:

  kubectl get pods --watch --namespace spanner-ns

Exemplo de saída:

  NAME          READY   STATUS    RESTARTS   AGE
  spanner-a-0   1/1     Running   0          4m
  spanner-a-1   1/1     Running   0          4m
  spanner-a-2   1/1     Running   0          4m
  spanner-a-3   1/1     Running   0          4m
  spanner-a-4   1/1     Running   0          4m
  spanner-b-0   1/1     Running   0          4m
  spanner-b-1   1/1     Running   0          4m
  spanner-b-2   1/1     Running   0          4m
  spanner-b-3   1/1     Running   0          4m
  spanner-b-4   1/1     Running   0          4m
  spanner-c-0   1/1     Running   0          4m
  spanner-c-1   1/1     Running   0          4m
  spanner-c-2   1/1     Running   0          4m
  spanner-c-3   1/1     Running   0          4m
  spanner-c-4   1/1     Running   0          4m

Interagir com o Spanner Omni

Depois que os pods estiverem em execução, você poderá se conectar à implantação e interagir com ela usando a CLI do Spanner Omni.

  1. Execute o comando a seguir para receber o endereço do serviço:

    kubectl get service spanner -n spanner-ns
    

    O EXTERNAL-IP:PORT é o DEPLOYMENT_ENDPOINT da sua implantação.

  2. Se ainda não tiver feito isso, baixe a CLI do Spanner Omni do bucket do Cloud Storage spanner-omni.

    Acessar o bucket do Spanner Omni

  3. Use a CLI do Spanner Omni para criar um banco de dados GoogleSQL ou PostgreSQL e interagir com ele.

    GoogleSQL

    Para criar e interagir com um banco de dados do GoogleSQL, execute o seguinte:

    spanner databases create DATABASE_NAME --deployment-endpoint DEPLOYMENT_ENDPOINT
    spanner sql --database=DATABASE_NAME --deployment-endpoint DEPLOYMENT_ENDPOINT
    

    PostgreSQL

    Para criar e interagir com um banco de dados PostgreSQL, execute o seguinte:

     spanner databases create POSTGRESQL_DATABASE_NAME --database_dialect POSTGRESQL --deployment-endpoint DEPLOYMENT_ENDPOINT
     spanner sql --database=POSTGRESQL_DATABASE_NAME --deployment-endpoint DEPLOYMENT_ENDPOINT
     ```
    
    You can also interact with a PostgreSQL database by following
    the instructions in [Connect using PGAdapter](/spanner-omni/pgadapter)
    to configure PGAdapter and use PostgreSQL tools, such as
    `psql`, with your PostgreSQL-dialect databases.
    

Observar a implantação (opcional)

É possível configurar o Spanner Omni com monitoring.enabled=true para configurar o Prometheus para ingerir métricas exportadas pelo Spanner Omni. Isso ajuda a analisar e depurar problemas com sua implantação. Para mais informações, consulte:

Para receber os detalhes do serviço, execute os seguintes comandos:

  # Prometheus service details. Default port is 9090.
  kubectl get service prometheus-service -n monitoring

  # Grafana service details. Default port is 3000.
  kubectl get service grafana -n monitoring

A seguir