Este documento faz parte de uma série que aborda padrões de arquitetura que as empresas podem usar para otimizar a respetiva presença na nuvem em grande escala através do Active Assist. O tutorial mostra como criar um pipeline de automatização para recomendações do Active Assist que funciona com a cadeia de ferramentas do GKE Enterprise. Destina-se a pessoas que usam o Config Sync para gerir os respetivos ambientes do GKE Enterprise e o Config Connector para gerir recursos. Google Cloud As outras partes da série são as seguintes:
- Padrões de utilização do Active Assist em grande escala
- Usar pipelines sem servidor com o Active Assist
- Usar a cadeia de ferramentas do GKE Enterprise com o Active Assist (este documento)
O pipeline de automatização que criar neste tutorial pode ajudar a alcançar o seguinte:
- Expandir a utilização do portefólio do Active Assist na sua organização.
- Integrar o Active Assist no seu pipeline de integração contínua e implementação contínua (CI/CD).
- Controlar a revisão e a ação das recomendações do Active Assist através de construções como problemas e pedidos de envio do GitHub.
Este tutorial também usa o kpt, um conjunto de ferramentas de código aberto desenvolvido pela Google para ajudar a gerir, manipular, personalizar e aplicar ficheiros de dados de configuração de recursos do Kubernetes.
Arquitetura
O diagrama de arquitetura seguinte mostra os componentes que usa neste tutorial.
Os componentes são usados das seguintes formas:
- Um repositório do GitHub não se repita (DRY), que é usado para modelos do Config Connector que implementa em projetos na sua organização Google Cloud .
- Um ou mais repositórios do GitHub específicos de um projeto ou de um ambiente e que contêm ficheiros de configuração preenchidos. Estes repositórios preenchidos destinam-se aos ambientes que o Config Sync gere. Usam o Config Connector para acionar e gerir Google Cloud recursos na Google Cloud organização.
- Um cluster do GKE que usa o Config Sync para controlo de versões e deteção de desvio. Este cluster também tem o Config Connector instalado. O Config Connector permite que o cluster faça a gestão de Google Cloud recursos em toda a Google Cloud organização.
- Um acionador do Cloud Build que aciona uma compilação quando um modelo é enviado para o repositório DRY do GitHub.
- Um acionador do Cloud Build agendado que aciona uma compilação periodicamente. A tarefa de compilação usa uma função kpt. A função invoca as APIs do recomendador do Active Assist para obter recomendações ativas. Revisa e analisa as recomendações para determinar se os Google Cloud recursos que o Config Connector gere precisam de ser redimensionados ou otimizados. A função kpt cria um problema do GitHub no repositório DRY com os detalhes da alteração recomendada se for necessário redimensionar ou otimizar os recursos geridos pelo Config Connector. Google Cloud
O fluxo de trabalho para esta arquitetura é o seguinte:
- As equipas autorizadas com acesso ao repositório DRY criam e gerem modelos do Config Connector no repositório.
- Uma tarefa do Cloud Build é acionada quando um modelo é criado ou
modificado e registado no ramo
main
. - A tarefa do Cloud Build preenche os modelos invocando os definidores do kpt. A tarefa envia os ficheiros de configuração hidratados para o repositório do GitHub hidratado. O Secret Manager é usado para armazenar chaves de implementação do GitHub para o repositório privado.
- O Config Sync monitoriza as alterações ao repositório preenchido e aplica as atualizações encontradas no repositório ao cluster gerido.
- O Config Connector monitoriza as alterações e aciona Google Cloud recursos se for necessário criar ou atualizar recursos como resultado das alterações do modelo de recursos do Kubernetes (KRM) aplicadas pelo Config Sync.
- Um acionador do Cloud Build agendado é executado periodicamente para invocar a API Recommender para obter recomendações ativas para os projetos geridos pelo Config Connector.
- A tarefa do Cloud Build agendada executa uma função kpt personalizada para invocar a API Recommender e obter e analisar as recomendações ativas.
- A função kpt cria um problema do GitHub que mostra uma comparação da configuração de recursos atual e da configuração recomendada para o recurso. Com esta abordagem, os problemas do GitHub são criados no repositório DRY, o que facilita o acompanhamento das alterações ao repositório.
Objetivos
- Crie os seguintes repositórios de exemplo do GitHub:
- Um repositório DRY para KRMs do Config Connector.
- Um repositório para armazenar ficheiros de configuração hidratados gerados com definidores do kpt.
- Crie um cluster do GKE com o Config Sync e o Config Connector.
- Crie uma função kpt de exemplo para obter recomendações do Active Assist para projetos geridos pelo Config Connector.
- Crie um acionador do Cloud Build que seja acionado quando um modelo é enviado para o ramo
main
do repositório DRY. - Crie uma tarefa agendada do Cloud Build que seja executada periodicamente para obter as recomendações do Active Assist disponíveis para os recursos que estão a ser geridos pelo Config Connector.
- Teste o pipeline completo com as recomendações de teste simulado fornecidas no repositório do GitHub para este tutorial.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Cloud Build
- Cloud Run
- Firestore
- Pub/Sub
- Container Registry
- Cloud Scheduler
- Google Kubernetes Engine (GKE) Enterprise edition
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
- Tome nota do Google Cloud ID do projeto. Vai usar este ID na secção seguinte
quando configurar o seu ambiente. Este projeto é referido ao longo do tutorial como o projeto
build
. -
Enable the Cloud Build, Firestore, App Engine, Pub/Sub, Cloud Run, Cloud Scheduler, and Cloud Source Repositories APIs.
Usa as credenciais da aplicação predefinidas para este tutorial. Se lhe for pedido que crie credenciais na página Adicione credenciais ao seu projeto, clique em Cancelar.Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
Configurar o seu ambiente
Neste tutorial, executa todos os comandos no Cloud Shell.
In the Google Cloud console, activate Cloud Shell.
Defina variáveis para o ID do projeto e o número do projeto do projeto
build
Google Cloud atual:export RECO_MGR_PROJECT=PROJECT_ID gcloud config set project $RECO_MGR_PROJECT export RECO_MGR_PROJECT_NUMBER=$(gcloud projects describe $RECO_MGR_PROJECT --format='value(projectNumber)')
Substitua
PROJECT_ID
pelo ID do projeto que anotou na secção anterior.Defina variáveis para a região de implementação:
export REGION=us-central1 export ZONE=us-central1-a
Clone o repositório que contém o código da app de exemplo usada neste tutorial:
git clone https://github.com/GoogleCloudPlatform/activeassist-anthos-toolchain.git
Aceda ao diretório do projeto:
cd activeassist-anthos-toolchain
Crie um repositório privado do GitHub para o repositório DRY. Tome nota do nome que atribui ao repositório.
No Cloud Shell, crie uma variável de ambiente para o seu nome de utilizador do GitHub e o nome do repositório DRY:
export REPO_OWNER=YOUR_GITHUB_USERNAME export DRY_REPO_NAME=YOUR_PRIVATE_DRY_REPO
Substitua o seguinte:
YOUR_GITHUB_USERNAME
: o seu nome de utilizador do GitHub.YOUR_PRIVATE_DRY_REPO
: o nome do seu repositório DRY.
Crie um token de acesso pessoal (PAT) para criar problemas neste repositório. O pipeline cria problemas do GitHub se existirem recomendações do Active Assist que precisam de ser revistas. Para mais informações sobre a criação de PATs no GitHub, consulte a documentação do GitHub.
Quando define um âmbito para este token, selecione Controlo total dos repositórios privados.
No Cloud Shell, crie uma variável de ambiente para o PAT que gerou:
export GITHUB_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN
Substitua
YOUR_PERSONAL_ACCESS_TOKEN
pelo seu próprio token.Crie um repositório privado do GitHub para o repositório preenchido. Tome nota do nome que atribui ao repositório.
No Cloud Shell, defina uma variável de ambiente para o repositório preenchido:
export HYDRATED_REPO_NAME=YOUR_PRIVATE_HYDRATED_REPO export HYDRATED_REPO='git@github.com:$REPO_OWNER/$HYDRATED_REPO_NAME.git'
Substitua
YOUR_PRIVATE_HYDRATED_REPO
pelo nome do seu repositório preenchido.Crie um par de chaves de implementação:
ssh-keygen -t rsa -b 4096 \ -C 'active-assist-robot' \ -N '' \ -f $(pwd)/active-assist-robot
Uma chave de implementação permite-lhe implementar no seu repositório privado do GitHub quando executa uma tarefa do Cloud Build para preencher ficheiros de configuração.
Imprima a chave gerada:
cat $(pwd)/active-assist-robot.pub
Adicione a chave de implementação ao repositório privado do GitHub. Certifique-se de que seleciona Permitir acesso de escrita quando adicionar a chave de implementação. Para saber como adicionar chaves de implementação a repositórios do GitHub, consulte a documentação do GitHub sobre a gestão de chaves de implementação.
No Cloud Shell, crie um segredo para armazenar a chave privada do par de chaves de implementação:
gcloud secrets create github-ssh-key \ --data-file=$(pwd)/active-assist-robot
Crie um segredo para armazenar o PAT:
echo $GITHUB_TOKEN | gcloud secrets create github-pat --data-file=-
No Cloud Shell, crie um novo cluster do GKE com o suplemento Config Connector ativado:
gcloud container clusters create sample-ops \ --machine-type n1-standard-4 \ --zone $ZONE \ --release-channel regular \ --addons ConfigConnector \ --workload-pool=$RECO_MGR_PROJECT.svc.id.goog \ --enable-stackdriver-kubernetes \ --enable-ip-alias
Conclua as secções seguintes no guia Instalar com o suplemento do GKE para criar uma identidade e configurar o Config Connector.
Instale o Config Sync no cluster do GKE que criou. Quando configura o Config Sync, tem de fazer o seguinte:
- Use um
token
para
conceder acesso só de leitura ao Git ao Config Sync.
Use o token do GitHub que
criou quando configurou um repositório DRY privado do GitHub.
O token está disponível através da variável de ambiente
$GITHUB_TOKEN
. - Configure o Config Sync com o gcloud.
Defina as seguintes definições:
- sourceFormat:
hierarchy
- syncRepo:
https://github.com/YOUR_GITHUB_USERNAME/YOUR_PRIVATE_HYDRATED_REPO
- syncBranch:
main
- secretType:
token
- policyDir: não preencha esta opção
- sourceFormat:
- Use um
token
para
conceder acesso só de leitura ao Git ao Config Sync.
Use o token do GitHub que
criou quando configurou um repositório DRY privado do GitHub.
O token está disponível através da variável de ambiente
Aceda à página do GitHub Marketplace para a app Cloud Build.
Clique em Configurar com o Google Cloud Build.
Se lhe for pedido, inicie sessão no GitHub.
Selecione Selecionar apenas repositórios.
Use o menu pendente Selecionar repositórios para ativar o acesso aos seus repositórios
YOUR_PRIVATE_DRY_REPO
eYOUR_PRIVATE_HYDRATED_REPO
através da app Cloud Build.Clique em Instalar.
Inicie sessão em Google Cloud. É apresentada a página Autorização e é-lhe pedido que autorize a app Google Cloud Build a estabelecer ligação a Google Cloud.
Clique em Autorizar o Google Cloud Build por GoogleCloudBuild. É redirecionado para a consola Google Cloud .
Selecione o seu projeto do Google Cloud .
Selecione a caixa de verificação de consentimento e clique em Seguinte.
Clique em Instalar.
Inicie sessão em Google Cloud. É apresentada a página Autorização e é-lhe pedido que autorize a app Google Cloud Build a estabelecer ligação a Google Cloud.
Clique em Autorizar o Google Cloud Build por GoogleCloudBuild. É redirecionado para a consola Google Cloud .
Selecione o seu projeto do Google Cloud .
Selecione a caixa de verificação de consentimento e clique em Seguinte.
Na página Selecionar repositório apresentada, selecione os seguintes repositórios do GitHub:
YOUR_PRIVATE_DRY_REPO
YOUR_PRIVATE_HYDRATED_REPO
Clique em Associar e, de seguida, em Concluído.
No Cloud Shell, execute o seguinte comando:
envsubst < cloudbuild.template.yaml > cloudbuild.yaml
O comando gera um ficheiro
cloudbuild.yaml
.Crie o acionador:
gcloud beta builds triggers create github \ --name ActiveAssistDemo \ --repo-name=$DRY_REPO_NAME \ --repo-owner=$REPO_OWNER \ --branch-pattern="main" \ --build-config=cloudbuild.yaml
Conceda à conta de serviço do Cloud Build autorização para aceder ao Secret Manager:
gcloud secrets add-iam-policy-binding github-ssh-key \ --member="serviceAccount:${RECO_MGR_PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding github-pat \ --member="serviceAccount:${RECO_MGR_PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
No Cloud Shell, crie e envie uma imagem Docker para o Container Registry:
gcloud auth configure-docker docker build -t gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1 ./recommender-kpt-function docker push gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1
No Cloud Shell, crie o ficheiro de configuração necessário para configurar o acionador do Cloud Build agendado:
envsubst < cloudbuild-scheduled-recommendations.template.yaml > cloudbuild-scheduled-recommendations.yaml
Crie o acionador do Cloud Build:
gcloud beta builds triggers create github \ --name ActiveAssistScheduledRecommendations \ --repo-name=YOUR_PRIVATE_HYDRATED_REPO \ --repo-owner=$REPO_OWNER \ --branch-pattern="main" \ --build-config=cloudbuild-scheduled-recommendations.yaml
Obtenha o ID deste acionador:
export TRIGGER_ID=`gcloud beta builds triggers describe \ ActiveAssistScheduledRecommendations \ --format="value(id)"`
No Cloud Shell, crie uma conta de serviço:
gcloud iam service-accounts create build-invoker \ --description "Service Account used by Cloud Scheduler to invoke the sample scheduled Cloud Build job" \ --display-name "recommender-scheduler-sa" \ --project $RECO_MGR_PROJECT
As tarefas do Cloud Scheduler usam esta conta de serviço para executar o serviço
recommender-parser
.Conceda à conta de serviço as autorizações para invocar uma tarefa do Cloud Build:
gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/cloudbuild.builds.editor \ --project $RECO_MGR_PROJECT gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer \ --project $RECO_MGR_PROJECT
Crie uma tarefa do Cloud Scheduler para invocar o acionador que criou no passo anterior:
gcloud scheduler jobs create http scheduled-build \ --project $RECO_MGR_PROJECT \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri="https://cloudbuild.googleapis.com/v1/projects/${RECO_MGR_PROJECT}/triggers/${TRIGGER_ID}:run" \ --description="Scheduler job to invoke Cloud Build" \ --oauth-service-account-email="build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST" \
Se vir a seguinte mensagem, selecione
Y
:There is no App Engine app in the project.
Se lhe for pedido que escolha a região onde quer que a sua aplicação do App Engine esteja localizada, selecione a região
us-central
.No Cloud Shell, no cluster
sample-ops
, valide se tem um espaço de nomes denominadoactiveassist-kcc
:kubectl get ns | grep activeassist-kcc
O Config Connector implementa uma instância do Compute Engine de exemplo em execução no seu projeto.
PROJECT_ID
Valide se a instância do Compute Engine está no projeto:
gcloud compute instances list | grep \ computeinstance-sample-cloudmachine
O tipo
MACHINE_TYPE
desta máquina én1-standard-1
.Abra a página Acionadores de compilação na Google Cloud consola.
Selecione o acionador
ActiveAssistScheduledRecommendations
.Para testar manualmente o acionador, clique em Executar na entrada do acionador na lista de acionadores.
O acionador cria um problema do GitHub no seu
YOUR_PRIVATE_DRY_REPO
repositório. O problema é semelhante ao seguinte:gcloud auth configure-docker docker build -t gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1 ./recommender-kpt-function docker push gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1
No exemplo de problema, o resultado da função kpt mostra que o tipo atual da instância do Compute Engine é o tipo
n1-standard-1
.MACHINE_TYPE
A recomendação do Active Assist é alterá-lo para um tipog1-small
.Os revisores do controlo de versões na sua empresa podem rever problemas automatizados do GitHub e tomar as medidas adequadas para a sua empresa.
Crie a pipeline
Nesta secção, cria os componentes para criar o pipeline. As recomendações do Active Assist são geradas com base nos padrões de utilização e nas métricas do sistema. Cada categoria de recomendações pode usar um período predefinido diferente para analisar os dados de utilização e as métricas com base nas recomendações geradas. Para testar o pipeline ponto a ponto, o repositório que clonou num passo anterior fornece recomendações de exemplo (simulações) que usa para executar o pipeline ponto a ponto.
Em alternativa, se estiver a executar o pipeline num projeto de exemplo com recursos e recomendações existentes, pode fazer as alterações adequadas ao código de exemplo e, em seguida, executar o pipeline.
Configure exemplos de repositórios privados do GitHub
Nas secções seguintes, configura os repositórios de exemplo do GitHub para este tutorial.
Configure um repositório do GitHub DRY privado
Configure um repositório do GitHub privado preenchido
Carregue chaves do GitHub para o Secret Manager
Crie um cluster do GKE
Nesta secção, cria um cluster do GKE com o suplemento do Config Connector, cria uma identidade e configura o Config Connector. Também configura o Config Sync. Pode usar o Config Sync para criar uma configuração comum em toda a sua infraestrutura, incluindo políticas personalizadas, e aplicá-la no local e na nuvem. O Config Sync avalia as alterações e implementa-as em todos os clusters do Kubernetes para que o estado pretendido seja sempre refletido nos seus clusters.
Crie um acionador do Cloud Build para enviar para o repositório hidratado
Nas secções seguintes, cria um acionador do Cloud Build que é acionado quando os modelos são enviados para o ramo principal do seu repositório.YOUR_PRIVATE_DRY_REPO
Este acionador executa os passos que preenchem os modelos KRM de configuração como dados no repositório YOUR_PRIVATE_DRY_REPO
e envia os ficheiros de configuração preenchidos para o seu repositório YOUR_PRIVATE_HYDRATED_REPO
.
Associe o Cloud Build aos seus repositórios do GitHub
Nesta secção, associa os repositórios do YOUR_PRIVATE_DRY_REPO
e do YOUR_PRIVATE_HYDRATED_REPO
ao Cloud Build.
Crie um acionador do Cloud Build para o repositório DRY
Crie um acionador do Cloud Build agendado para recomendações do Active Assist
Google CloudNas secções seguintes, vai criar um acionador do Cloud Build agendado que é executado periodicamente. Este acionador obtém recomendações do Active Assist através de uma função kpt e determina se existem recomendações ativas para os recursos no seu repositório.YOUR_PRIVATE_HYDRATED_REPO
A função kpt também cria um problema do GitHub no seu repositório se existirem recomendações ativas para a configuração de recursos que precisam de ser revistas e acionadas.YOUR_PRIVATE_HYDRATED_REPO
Gere uma imagem do Cloud Build
Nesta secção, vai gerar uma imagem do Cloud Build com os componentes kpt, gh e Node.
Crie um acionador do Cloud Build para o seu repositório hidratado
Crie uma tarefa do Cloud Scheduler para invocar o acionador
Confirme e envie os ficheiros de configuração do Cloud Build para o GitHub
Envie os dois ficheiros de configuração do Cloud Build que criou para o seu repositório:YOUR_PRIVATE_DRY_REPO
git remote add dry https://github.com/$REPO_OWNER/$DRY_REPO_NAME.git
git add cloudbuild.yaml
git add cloudbuild-scheduled-recommendations.yaml
git commit -m "Added cloudbuild configuration YAMLs"
git push dry main
Pode ser-lhe pedido que introduza as suas credenciais do GitHub quando envia conteúdo para o seu repositório privado.
Reveja o resultado da tarefa do Cloud Build
Quando confirma e envia alterações para o seu repositório YOUR_PRIVATE_DRY_REPO
, a tarefa do Cloud Build é acionada. Se a tarefa do Cloud Build for executada com êxito, são criados vários recursos. Nesta secção, vai validar se os recursos são criados após a conclusão da tarefa do Cloud Build.
Execute testes ponto a ponto
Para lhe permitir testar o pipeline ponto a ponto, o repositório que clonou para este tutorial fornece recomendações de exemplo (stubs). Use estes stubs para executar o pipeline completo. O stub imita um payload de recomendação do Active Assist e tem uma recomendação para alterar o tipo de máquina da instância do Compute Engine implementada a partir do tipo de instância n1-standard-1
para o tipo de instância g1-small
.
Nesta secção, invoca o acionador do Cloud Build agendado manualmente para executar a tarefa que usa uma função kpt para obter recomendações do Active Assist. Também verifica se foi criado um problema do GitHub no seu repositório do YOUR_PRIVATE_DRY_REPO
.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
O que se segue?
- Saiba mais sobre as tecnologias Google Cloud sem servidor.
- Leia acerca de como integrar as recomendações da inteligência de políticas numa pipeline de infraestrutura como código (IaC).