Programa de aprendizado: aplicativos escalonáveis - centralize as mudanças com o Config Sync


Este conjunto de tutoriais é destinado a administradores e operadores de TI que querem implantar, executar e gerenciar ambientes de aplicativos modernos executados no Google Kubernetes Engine (GKE) edição Enterprise. À medida que avança neste conjunto de tutoriais, você aprende a configurar o monitoramento e alertas, escalonar cargas de trabalho e simular falhas. Tudo isso usando o aplicativo de microsserviços de amostra Cymbal Bank:

  1. Criar um cluster e implantar um aplicativo de exemplo
  2. Monitorar com o Google Cloud Managed Service para Prometheus
  3. Escalonar cargas de trabalho
  4. Simular uma falha
  5. Centralizar a gestão da mudança (este tutorial)

Visão geral e objetivos

Ao criar novos serviços e aplicativos, talvez você queira testar as mudanças em diferentes ambientes. À medida que sua organização cresce, você pode precisar de diferentes configurações de cluster para equipes distintas. Administrar vários clusters com configurações diferentes pode ser um desafio. Use ferramentas do GitOps, como o Config Sync para ajudar a gerenciar esses desafios.

No Tutorial de criação de cluster, você criou um cluster e implantou nele o aplicativo do Cymbal Bank.

Neste tutorial, você vai aprender a armazenar os manifestos do Kubernetes para seu aplicativo em um repositório Git centralizado e a usar ferramentas como o Config Sync para implantar um aplicativo em vários clusters em uma frota. Você aprenderá a concluir as seguintes tarefas:

  • Criar um repositório Git e conectá-lo ao Cloud Build

  • Criar um cluster, registrá-lo em uma frota e instalar o Config Sync na frota de clusters

  • Usar um pacote de frota para implantar o Cymbal Bank e outros recursos em um cluster ou em uma frota

Custos

Ao ativar o GKE Enterprise e implantar o aplicativo de amostra Cymbal Bank para esta série de tutoriais, você receberá cobranças por cluster do GKE Enterprise no Google Cloud, conforme listado na nossa página de preços, até desativar o GKE Enterprise ou excluir o projeto.

Você também é responsável por outros custos do Google Cloud gerados ao executar o aplicativo de amostra Cymbal Bank, como cobranças por VMs do Compute Engine e balanceadores de carga.

Antes de começar

Para aprender a armazenar, fazer alterações e implantar recursos em um repositório do Git, conclua o primeiro tutorial para criar um cluster do GKE que use o modo Autopilot e implantar o aplicativo de microsserviços de amostra do Cymbal Bank.

Recomendamos que você conclua este conjunto de tutoriais para o Cymbal Bank em ordem. À medida que avança no conjunto de tutoriais, você aprende novas habilidades e usa outros produtos e serviços do Google Cloud.

Como usar o Config Sync para implantar manifestos do Kubernetes de um repositório Git para os clusters, é preciso ativar os seguintes APIs:

gcloud services enable configdelivery.googleapis.com cloudbuild.googleapis.com developerconnect.googleapis.com

Criar um repositório Git e conectá-lo ao Cloud Build

Um pacote de frota é uma coleção de manifestos de recursos do Kubernetes. Ao agrupar esses manifestos como um pacote, você pode implantar um aplicativo em vários clusters em uma frota diretamente de um repositório do Git. Com esse fluxo de trabalho, você tem os seguintes benefícios:

  • Melhoria na escalonabilidade com a implantação de recursos em uma frota, em vez de aplicá-los manualmente cluster por cluster.
  • Atualizações mais seguras com lançamentos progressivos.
  • Outros fluxos de trabalho com base em arquivos de configuração de origem centralizada no Git, como controle de versões e aprovações.

Para demonstrar como armazenar e fazer alterações no Git, você bifurca o repositório do Cymbal Bank e o conecta ao Cloud Build.

Bifurcar o repositório do Cymbal Bank

Neste tutorial, você vai fazer alterações no repositório Git para demonstrar como o Config Sync ajuda a gerenciar e implantar mudanças nos recursos do Kubernetes com segurança. Para fazer essas alterações diretamente, bifurque o repositório Git em vez de cloná-lo.

Para bifurcar o repositório, siga estas etapas:

  1. No GitHub, acesse o repositório de exemplo do Cymbal Bank (bank-of-anthos).

  2. Clique em Bifurcar para receber uma cópia do repositório com os arquivos de origem.

    Texto alternativo

  3. Se necessário, faça login na sua conta do GitHub. Se você tiver acesso a outras organizações ou equipes no GitHub, verifique se você está bifurcando o repositório para sua conta pessoal.

Agora você tem uma bifurcação do repositório Cymbal Bank. Todos os manifestos do Kubernetes implantados estão localizados na pasta /kubernetes-manifests.

Conectar o repositório ao Cloud Build

O Cloud Build é um serviço que pode executar builds no Google Cloud, que pode ser usado para entrega contínua no estilo GitOps. O serviço de pacote de frota do Config Sync usa o Cloud Build para buscar os recursos do Kubernetes no seu repositório do Git e implantá-los nos seus clusters. Quando você usa um pacote de frota, é necessário configurar o Cloud Build apenas uma vez por repositório que você quer sincronizar. A API de pacote de frota cria automaticamente os gatilhos de build pelo Cloud Build.

Para conectar seu repositório do GitHub ao Cloud Build:

  1. Abra a página do Cloud Build no console do Google Cloud e selecione Repositórios.

    Abrir a página Repositórios

  2. Confira se você está na página Repositórios de 2ª geração. Se necessário, selecione Visualizar repositórios (2ª geração).

  3. Clique em Criar conexão de host.

  4. No menu Região, selecione us-central1 (Iowa) como sua região.

  5. No campo Nome, digite cymbal-bank-connection como o nome da sua conexão.

  6. Clique em Conectar.

  7. Se esta for a primeira vez que você conecta o Cloud Build à sua conta do GitHub, siga estas etapas:

    1. Aceite a solicitação do token OAuth do GitHub. O token é armazenado no Secret Manager para uso com a conexão do GitHub do Cloud Build. Clique em Continuar.
    2. Instale o Cloud Build no seu repositório do GitHub. Selecione Instalar em uma nova conta.
    3. Na nova janela aberta, selecione a conta do GitHub em que você já criou a bifurcação do Cymbal Bank. Em um ambiente de produção, é possível selecionar outras contas ou repositórios para os quais você delegou acesso.
    4. Siga todos os prompts de autenticação para confirmar sua identidade no GitHub.
    5. Na janela do GitHub para acesso ao repositório do Cloud Build, escolha Apenas repositórios selecionados.
    6. No menu suspenso que lista os repositórios, selecione a bifurcação de bank-of-anthos.
    7. Clique em Salvar.
  8. Na página do Cloud Build no console do Google Cloud, clique em Vincular repositório para conectar um novo repositório Git ao Cloud Build.

  9. No menu Conexão, selecione cymbal-bank-connection.

  10. No menu Repositórios, selecione a bifurcação de bank-of-anthos.

  11. Selecione Vincular.

Crie clusters

No primeiro tutorial desta série, você criou um cluster e implantou o aplicativo do Cymbal Bank nele. Em um cenário real, é improvável que você tenha apenas um cluster para gerenciar. O GKE permite agrupar clusters em uma frota: um grupo lógico de clusters que podem ser gerenciados juntos. Em uma frota, é possível agrupar ainda mais seus clusters, sendo que alguns deles representam diferentes ambientes ou pertencem a equipes diferentes. Por exemplo, você pode ter um cluster de desenvolvimento, um cluster de fase de testes e um cluster de produção. Em uma grande organização, equipes individuais podem ter clusters próprios para ambientes diferentes. Como administradores ou operadores de TI, talvez você precise gerenciar dezenas de clusters!

Quando se trata de implantar aplicativos ou recursos individuais, como políticas personalizadas, em todos esses clusters, os recursos do GKE Enterprise, como o Config Sync podem ajudar a gerenciar essas implantações em escala.

Para demonstrar como implantar recursos em diferentes ambientes ou em uma frota de clusters, você cria um novo cluster e implanta aplicativo do Cymbal Bank nele:

  1. Crie um cluster do GKE que simula um ambiente de desenvolvimento:

    gcloud container clusters create-auto scalable-apps-dev \
      --project=PROJECT_ID \
      --region=REGION \
      --fleet-project=PROJECT_ID \
      --release-channel=rapid
    

    Substitua:

    • PROJECT_ID pelo ID gerado automaticamente do projeto que você criou na seção anterior. O ID do projeto costuma ser diferente do nome do projeto. Por exemplo, seu projeto pode ser scalable-apps, mas o ID do projeto pode ser scalable-apps.
    • REGION pela região onde você quer criar seu cluster, como us-central1.
  2. Rótulos são pares de chave-valor que podem ser adicionados aos recursos do GKE para ajudar a organizá-los. Para pacotes de frota, use rótulos de associação de frota para personalizar os clusters de destino do pacote. Outros tipos de rótulos não têm suporte.

    Adicione um rótulo à associação de frota:

    gcloud container fleet memberships update scalable-apps-dev \
        --update-labels=env=dev
    

    Quando você criar o pacote de frota mais adiante neste tutorial, esse rótulo vai garantir que os recursos sejam implantados apenas no cluster do scalable-apps-dev, e não no cluster do scalable-apps do primeiro tutorial desta série.

Instalar o Config Sync

Instale o Config Sync nos dois clusters:

  1. No console do Google Cloud, acesse a página Configuração na seção Recursos.

    Acessar a configuração

  2. Clique em Instalar o Config Sync.
  3. Mantenha a opção Upgrades manuais selecionada.
  4. O menu de versão deve ser padronizado para a versão mais recente do Config Sync. Se necessário, selecione a versão mais recente.
  5. Em Opções de instalação, selecione Instalar o Config Sync em toda a frota (recomendado).
  6. Clique em Instalar o Config Sync.
  7. Na guia Configurações do Config Sync, veja o campo Status da lista de clusters. Após alguns minutos, o status será "Pendente" até que o cluster seja configurado corretamente para a Config Sync. Pode demorar até 10 minutos para que o status mude para Ativado.

Implantar o Cymbal Bank

No primeiro tutorial desta série, você usou comandos kubectl para aplicar as configurações do aplicativo ao cluster. Neste tutorial, você vai usar a frota de pacotes do Config Sync para implantar as mesmas configurações em um novo cluster. Em uma seção adiante, você verá um exemplo de como adicionar um novo recurso ao seu repositório Git e implantar esses recursos em uma frota de clusters.

Configurar uma conta de serviço para o Cloud Build

Uma conta de serviço é um tipo especial de conta normalmente usada por um aplicativo, em vez de uma pessoa. Como prática recomendada, crie contas de serviço para apenas um serviço ou tarefa específica e atribua papéis granulares a elas. Neste tutorial, você cria uma conta de serviço e concede permissões para que o Cloud Build busque recursos do Kubernetes do repositório Git e os implante nos clusters.

Para criar a conta de serviço e conceder as permissões necessárias, siga estas etapas:

  1. Crie a conta de serviço:

    gcloud iam service-accounts create "cymbal-bank-service-account"
    
  2. Conceda permissão à conta de serviço para buscar recursos do seu repositório Git adicionando uma vinculação de política do IAM para o papel de Editor do pacote de recursos:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/configdelivery.resourceBundlePublisher'
    

    Se solicitado, selecione None como a condição da política.

  3. Para conceder à conta de serviço permissão para gravar registros, adicione uma vinculação de política do IAM para o papel Gravador de registros:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/logging.logWriter'
    

    Se solicitado, selecione None como a condição da política.

Criar uma versão para o aplicativo do Cymbal Bank

Um pacote de frota requer uma tag de versão semântica para saber qual versão do seu repositório será implantada. É uma boa ideia criar lançamentos quando fazer alterações no repositório, porque isso ajuda no controle de versões além de facilitar a reversão para uma versão estável, se necessário.

  1. Em uma janela do navegador da Web da bifurcação do GitHub do Cymbal Bank, na seção Versões da barra lateral, clique em Criar um lançamento.

  2. Selecione o menu Escolher uma tag e digite v1.0.0 como a tag. Clique em Criar nova tag.

  3. Clique em Publicar versão.

Configurar a autenticação

Assim como o primeiro tutorial desta série, você precisa criar um JWT para lidar com a autenticação do usuário e um secret do Kubernetes para armazenar o JWT do novo cluster que você criou. É recomendável que cada cluster tenha um JWT exclusivo para autenticação.

  1. No Cloud Shell, crie o JWT:

    openssl genrsa -out jwtRS256.key 4096
    openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
    
  2. Crie o secret do Kubernetes:

    kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
    

Implantar o aplicativo Cymbal Bank com um pacote de frota

Um recurso FleetPackage é uma API declarativa para implantar vários manifestos do Kubernetes em uma frota de clusters.

Para criar um pacote de frota, defina uma especificação FleetPackage que aponte para o repositório com os recursos do Kubernetes conectados ao Cloud Build. Em seguida, aplique o recurso FleetPackage, que busca os recursos do Git e os implanta na frota.

  1. No Cloud Shell, defina o local padrão para os comandos configdelivery da CLI do Google Cloud. Assim como ao conectar seu repositório Cloud Build, é necessário usar us-central1 enquanto o recurso de pacotes de frota está em pré-lançamento:

    gcloud config set config_delivery/location us-central1
    
  2. Crie um arquivo chamado fleetpackage-spec.yaml com o conteúdo a seguir:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME
        tag: v1.0.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com
        path: kubernetes-manifests
    target:
      fleet:
        project: projects/PROJECT_ID
        selector:
          matchLabels:
            env: dev
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    

    Substitua REPOSITORY_NAME pelo nome do seu repositório, conforme exibido na conexão do Cloud Build.

    Os campos do seletor correspondem ao rótulo de associação à frota que você criou anteriormente. Isso garante que o aplicativo Cymbal Bank seja implantado apenas no cluster do scalable-apps-dev. O cluster do scalable-apps do primeiro tutorial não é afetado. Na próxima seção, você vai conferir um exemplo de pacote de frota que segmenta todos os clusters em uma frota.

    O campo de estratégia de lançamento controla como os recursos são implantados nos clusters. Neste exemplo, você está implantando apenas em um cluster. Portanto, esse campo não muda a forma como o lançamento é feito. Mas, se você tiver muitos clusters, essa configuração garante que todos os arquivos de recursos sejam aplicados em um cluster antes de passar para o próximo. Assim, você pode monitorar o progresso do lançamento.

  3. Crie o pacote de frota:

    gcloud alpha container fleet packages create cymbal-bank-fleet-package \
        --source=fleetpackage-spec.yaml \
        --project=PROJECT_ID
    
  4. Verifique se o pacote de frota foi criado:

    gcloud alpha container fleet packages list
    

    A saída lista o status do gatilho de build. Após alguns segundos, o campo MESSAGE é atualizado com uma saída semelhante a esta:

    MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:
    

    Clique no link fornecido para visualizar os logs de streaming do job do Cloud Build. O Cloud Build pode levar alguns minutos para processar o gatilho de build.

  5. Quando o gatilho de build é concluído, a saída do gcloud alpha container fleet packages list é semelhante ao seguinte:

    NAME: cymbal-bank-fleet-package
    STATE: ACTIVE
    CREATE_TIME: 2024-07-09T15:15:56
    ACTIVE_ROLLOUT: rollout-20240709-153621
    LAST_COMPLETED_ROLLOUT:
    MESSAGES:
    

    O pacote de frota começa a lançar os recursos do Kubernetes na sua frota.

  6. Na página do Google Kubernetes Engine do console do Google Cloud, selecione o cluster do seu scalable-apps-dev, acesse a página Cargas de trabalho para conferir uma visualização agregada das cargas de trabalho que estão sendo implantadas em todos os clusters do GKE:

    Abrir a página Cargas de trabalho

    Talvez apareçam alguns erros enquanto o Autopilot ajusta seus pods para atender solicitações de recursos. Após alguns minutos, os pods vão começar a ser executados com o status OK.

  7. Para conferir a interface da Web do Cymbal Bank, siga estas etapas:

    1. Na página do Google Kubernetes Engine do console do Google Cloud, acesse a página Gateways, Serviços e Ingress.

      Acessar a página Gateways, Serviços e Ingress

    2. Para encontrar o Ingress do Cymbal Bank, clique na guia Serviços e encontre o serviço com o nome frontend.

    3. Clique no link Endpoint do ingress do frontend, como 198.51.100.143:80, para abrir a interface da Web do Cymbal Bank.

Implantar recursos em uma frota

Agora, imagine um cenário em que você quer estender seu aplicativo do Cymbal Bank com um microsserviço novo. Você quer implantar esse microsserviço em todos os clusters atuais e futuros adicionados à frota. Ao usar um pacote de frota, é possível implantar em vários clusters e receber implantações automáticas em novos clusters.

Adicionar novos recursos ao repositório Git

Para demonstrar como adicionar um novo serviço ao aplicativo, crie uma implantação nginx básica e a adicione aos clusters:

  1. Em uma janela do navegador da Web da bifurcação do GitHub do Cymbal Bank, selecione e clique Adicionar arquivo e Criar novo arquivo.

  2. Nomeie o arquivo como new-resource/nginx.yaml e cole o seguinte conteúdo nele:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.14.2
            name: nginx
            ports:
            - containerPort: 80
    
  3. Clique em Fazer commit das alterações...

  4. Na caixa de diálogo de confirmação, mantenha a opção Fazer commit diretamente na ramificação do main selecionada. e clique em Confirmar alterações.

  5. Na página principal do repositório bifurcado do Cymbal Bank, selecione Versões na barra lateral.

  6. Na parte de cima da página, escolha Criar uma nova versão.

  7. Selecione o menu Escolher uma tag e digite v1.1.0 como a tag. Clique em Criar nova tag.

  8. Clique em Publicar versão.

Implantar um recurso em clusters com um pacote de frota

Para implantar o novo recurso, crie um pacote de frota:

  1. Este pacote de frota tem como alvo todos os clusters da sua frota, já que ele não contém um campo seletor. Isso também significa que a implantação do nginx será adicionada automaticamente a todos os clusters futuros adicionados à frota.

    No Cloud Shell, crie um arquivo chamado new-deployment-fleet-package.yaml com o seguinte conteúdo:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME
        tag: v1.1.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com
        path: kubernetes-manifests/new-resource
    target:
      fleet:
        project: projects/PROJECT_ID
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    
  2. Crie o pacote de frota para iniciar o lançamento:

    gcloud alpha container fleet packages create new-deployment-fleet-package \
        --source=new-deployment-fleet-package.yaml \
        --project=PROJECT_ID
    
  3. Verifique se o pacote de frota foi criado:

    gcloud alpha container fleet packages list
    

    Clique no link fornecido para visualizar os logs de streaming do job do Cloud Build.

    O pacote de frota começa a lançar os recursos do Kubernetes em sua frota. Pode levar alguns minutos para que o lançamento comece e seja concluído.

  4. Na página do Google Kubernetes Engine do console do Google Cloud, acesse a página Cargas de trabalho para ter uma visualização agregada das cargas de trabalho estão sendo implantadas em todos os clusters do GKE:

    Abrir a página Cargas de trabalho

Você pode continuar explorando diferentes estratégias de implantação com pacotes de frota. Por exemplo, é possível adicionar diferentes tipos de recursos ao seu repositório bifurcado e usar diferentes configurações de pacotes de frota para implantá-los. Você também pode usar um pacote de frota para excluir os recursos implantados nos seus clusters. Para mais informações sobre pacotes de frota, consulte Implantar pacotes de frota na documentação do Config Sync.

Excluir recursos em uma frota

Assim como você pode implantar recursos em uma frota, você também pode excluir recursos com um pacote de frota.

Para remover recursos individuais, as etapas avançadas são as seguintes:

  1. Exclua o recurso do seu repositório Git.
  2. Crie uma nova versão do Git e uma nova tag.
  3. Atualize o campo tag do pacote da frota.
  4. Execute o comando de atualização do pacote da frota.

Como alternativa, você pode excluir o pacote de frota, o que também exclui todos os recursos que foram gerenciados por ele.

Por exemplo, se você quiser remover a implantação do nginx da seção anterior, execute o seguinte comando:

gcloud alpha container fleet packages delete new-deployment-fleet-package --force

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto criado.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Para excluir o repositório bifurcado, siga estas etapas:

  1. Em uma janela do navegador da Web da sua bifurcação do Cymbal Bank no GitHub, embaixo do nome do repositório, clique em Configurações.

  2. Na página de configurações gerais (selecionada por padrão), acesse a seção Zona de perigo e clique em Excluir este repositório.

  3. Clique em Quero excluir este repositório.

  4. Leia os alertas e clique em Li e entendi esses efeitos.

  5. Para verificar se você está excluindo o repositório correto, digite o nome do repositório do Cymbal Bank bifurcado no campo de texto.

  6. Clique em Excluir este repositório.

A seguir

Antes de começar a criar seu próprio ambiente de cluster do GKE Enterprise semelhante ao que você aprendeu neste conjunto de tutoriais, analise algumas das considerações de produção.