Tutorial: Implementar CI/CD com GitOps usando clusters Kubernetes habilitados para Azure Arc
Importante
Este tutorial usa GitOps com o Flux v1. O GitOps com Flux v2 agora está disponível para clusters Kubernetes habilitados para Azure Arc e Serviço Kubernetes do Azure (AKS); vá para o tutorial que usa GitOps com o Flux v2. Recomendamos migrar para o Flux v2 o mais rápido possível.
O suporte para recursos de configuração de cluster baseados no Flux v1 criados antes de 1º de janeiro de 2024 terminará em 24 de maio de 2025. A partir de 1º de janeiro de 2024, você não poderá criar novos recursos de configuração de cluster baseados no Flux v1.
Neste tutorial, você configurará uma solução de CI/CD usando GitOps com clusters Kubernetes habilitados para Azure Arc. Usando o aplicativo Azure Vote de exemplo, você:
- Crie um cluster Kubernetes habilitado para Azure Arc.
- Conecte seu aplicativo e repositórios GitOps ao Azure Repos.
- Importe pipelines de CI/CD.
- Conecte seu Azure Container Registry (ACR) ao Azure DevOps e Kubernetes.
- Crie grupos de variáveis de ambiente.
- Implante os
dev
ambientes estage
. - Teste os ambientes de aplicativos.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Azure Cloud Shell
O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.
Para iniciar o Azure Cloud Shell:
Opção | Exemplo/Ligação |
---|---|
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. | |
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. | |
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. |
Para usar o Azure Cloud Shell:
Inicie o Cloud Shell.
Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.
Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e Linux ou selecionando Cmd+Shift+V no macOS.
Selecione Enter para executar o código ou comando.
Antes de começar
Este tutorial pressupõe familiaridade com o Azure DevOps, Azure Repos and Pipelines e Azure CLI.
Entre nos Serviços de DevOps do Azure.
Conclua o tutorial anterior para aprender a implantar o GitOps em seu ambiente de CI/CD.
Entenda os benefícios e a arquitetura desse recurso.
Verifique se você tem:
- Um cluster Kubernetes habilitado para Azure Arc conectado chamado arc-cicd-cluster.
- Um Azure Container Registry (ACR) conectado com integração AKS ou autenticação de cluster não AKS.
- Permissões "Administrador de Compilação" e "Administrador de Projeto" para Repositórios do Azure e Pipelines do Azure.
Instale as seguintes extensões da CLI do Kubernetes habilitadas para Azure Arc das versões >= 1.0.0:
az extension add --name connectedk8s az extension add --name k8s-configuration
Para atualizar essas extensões para a versão mais recente, execute os seguintes comandos:
az extension update --name connectedk8s az extension update --name k8s-configuration
Importar repositório de aplicativos e GitOps para o Azure Repos
Importe um repositório de aplicativo e um repositório GitOps para o Azure Repos. Para este tutorial, use o seguinte exemplo de repositórios:
- arc-cicd-demo-src repositório de aplicativos
- URL: https://github.com/Azure/arc-cicd-demo-src
- Contém o exemplo de Aplicativo de Votação do Azure que você implantará usando o GitOps.
- arc-cicd-demo-gitops repositório GitOps
- URL: https://github.com/Azure/arc-cicd-demo-gitops
- Funciona como uma base para seus recursos de cluster que abrigam o Aplicativo Azure Vote.
Saiba mais sobre como importar repositórios Git.
Nota
Importar e usar dois repositórios separados para repositórios de aplicativos e GitOps pode melhorar a segurança e a simplicidade. As permissões e a visibilidade do aplicativo e dos repositórios GitOps podem ser ajustadas individualmente. Por exemplo, o administrador do cluster pode não encontrar as alterações no código do aplicativo relevantes para o estado desejado do cluster. Por outro lado, um desenvolvedor de aplicativos não precisa saber os parâmetros específicos para cada ambiente - um conjunto de valores de teste que fornecem cobertura para os parâmetros pode ser suficiente.
Conecte o repositório GitOps
Para implantar continuamente seu aplicativo, conecte o repositório de aplicativos ao cluster usando o GitOps. Seu repositório GitOps arc-cicd-demo-gitops contém os recursos básicos para colocar seu aplicativo em funcionamento no cluster arc-cicd-cluster .
O repositório inicial do GitOps contém apenas um manifesto que cria os namespaces dev e stage correspondentes aos ambientes de implantação.
A conexão GitOps que você criar irá, automaticamente:
- Sincronize os manifestos no diretório de manifesto.
- Atualize o estado do cluster.
O fluxo de trabalho CI/CD preencherá o diretório de manifesto com manifestos extras para implantar o aplicativo.
Crie uma nova conexão GitOps para seu repositório arc-cicd-demo-gitops recém-importado no Azure Repos.
az k8s-configuration create \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --operator-instance-name cluster-config \ --operator-namespace cluster-config \ --repository-url https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \ --https-user <Azure Repos username> \ --https-key <Azure Repos PAT token> \ --scope cluster \ --cluster-type connectedClusters \ --operator-params='--git-readonly --git-path=arc-cicd-cluster/manifests'
Certifique-se de que o Flux use apenas o
arc-cicd-cluster/manifests
diretório como caminho base. Defina o caminho usando o seguinte parâmetro de operador:--git-path=arc-cicd-cluster/manifests
Nota
Se você estiver usando uma cadeia de conexão HTTPS e estiver tendo problemas de conexão, certifique-se de omitir o prefixo do nome de usuário na URL. Por exemplo,
https://alice@dev.azure.com/contoso/project/_git/arc-cicd-demo-gitops
deve teralice@
removido. O--https-user
especifica o usuário em vez disso, por exemplo--https-user alice
.Verifique o estado da implantação no portal do Azure.
- Se for bem-sucedido, você verá ambos os
dev
namespaces criadosstage
no cluster.
- Se for bem-sucedido, você verá ambos os
Importar os pipelines de CI/CD
Agora que você sincronizou uma conexão GitOps, precisará importar os pipelines de CI/CD que criam os manifestos.
O repositório de aplicativos contém uma .pipeline
pasta com os pipelines que você usará para PRs, CI e CD. Importe e renomeie os três pipelines fornecidos no repositório de exemplo:
Nome do arquivo de pipeline | Description |
---|---|
.pipelines/az-vote-pr-pipeline.yaml |
O pipeline de PR do aplicativo, chamado arc-cicd-demo-src PR |
.pipelines/az-vote-ci-pipeline.yaml |
O pipeline de CI do aplicativo, chamado arc-cicd-demo-src CI |
.pipelines/az-vote-cd-pipeline.yaml |
O pipeline de CD do aplicativo, chamado arc-cicd-demo-src CD |
Ligue o seu ACR
Tanto os pipelines quanto o cluster utilizarão o ACR para armazenar e recuperar imagens do Docker.
Conectar o ACR ao Azure DevOps
Durante o processo de CI, você implantará seus contêineres de aplicativo em um registro. Comece criando uma conexão de serviço do Azure:
- No Azure DevOps, abra a página Conexões de serviço na página de configurações do projeto. No TFS, abra a página Serviços no ícone de configurações na barra de menu superior.
- Escolha + Nova conexão de serviço e selecione o tipo de conexão de serviço que você precisa.
- Preencha os parâmetros para a conexão de serviço. Para este tutorial:
- Nomeie a conexão de serviço arc-demo-acr.
- Selecione myResourceGroup como o grupo de recursos.
- Selecione Conceder permissão de acesso a todos os pipelines.
- Esta opção autoriza arquivos de pipeline YAML para conexões de serviço.
- Escolha OK para criar a conexão.
Conectar ACR ao Kubernetes
Habilite o cluster do Kubernetes para extrair imagens do ACR. Se for privado, a autenticação será necessária.
Conecte o ACR a clusters AKS existentes
Integre um ACR existente com clusters AKS existentes usando o seguinte comando:
az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr
Criar um segredo de pull de imagem
Para conectar clusters locais e não AKS ao seu ACR, crie um segredo de pull de imagem. O Kubernetes usa segredos de extração de imagem para armazenar as informações necessárias para autenticar seu registro.
Crie um segredo de pull de imagem com o seguinte kubectl
comando. Repita para os dev
namespaces e stage
.
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
Para evitar ter que definir um imagePullSecret para cada Pod, considere adicionar o imagePullSecret à conta Service nos dev
namespaces e stage
. Consulte o tutorial do Kubernetes para obter mais informações.
Criar grupos de variáveis de ambiente
Grupo de variáveis de repositório de aplicativos
Crie um grupo de variáveis chamado az-vote-app-dev. Defina os seguintes valores:
Variável | Value |
---|---|
AZ_ACR_NAME | (sua instância ACR, por exemplo. azurearctest.azurecr.io) |
AZURE_SUBSCRIPTION | (sua Conexão de Serviço do Azure, que deve ser arc-demo-acr do início do tutorial) |
AZURE_VOTE_IMAGE_REPO | O caminho completo para o repositório do Aplicativo de Votação do Azure, por exemplo, azurearctest.azurecr.io/azvote |
ENVIRONMENT_NAME | Programador |
MANIFESTS_BRANCH | master |
MANIFESTS_FOLDER | azure-vote-manifests |
MANIFESTS_REPO | arc-cicd-demo-gitops |
ORGANIZATION_NAME | Nome da organização do Azure DevOps |
PROJECT_NAME | Nome do projeto GitOps no Azure DevOps |
REPO_URL | URL completo para repositório GitOps |
SRC_FOLDER | azure-vote |
TARGET_CLUSTER | arc-cicd-cluster |
TARGET_NAMESPACE | dev |
Grupo de variáveis de ambiente de estágio
- Clone o grupo de variáveis az-vote-app-dev .
- Altere o nome para az-vote-app-stage.
- Assegure os seguintes valores para as variáveis correspondentes:
Variável | Value |
---|---|
ENVIRONMENT_NAME | Fase |
TARGET_NAMESPACE | stage |
Agora você está pronto para implantar nos dev
ambientes e stage
.
Conceder mais permissões ao serviço de compilação
O pipeline de CD usa o token de segurança da compilação em execução para autenticar no repositório GitOps. São necessárias mais permissões para que o pipeline crie uma nova ramificação, envie alterações por push e crie solicitações pull.
- Vá para
Project settings
a página principal do projeto Azure DevOps. - Selecione
Repositories
. - Selecione
<GitOps Repo Name>
. - Selecione
Security
. - Para o
<Project Name> Build Service (<Organization Name>)
, permitirContribute
,Contribute to pull requests
, eCreate branch
.
Para obter mais informações, consulte:
- Conceder permissões VC ao serviço de compilação
- Gerenciar permissões de conta de serviço de compilação
Implantar o ambiente de desenvolvimento pela primeira vez
Com os pipelines de CI e CD criados, execute o pipeline de CI para implantar o aplicativo pela primeira vez.
Gasoduto CI
Durante a execução inicial do pipeline de CI, você pode obter um erro de autorização de recurso ao ler o nome da conexão de serviço.
- Verifique se a variável que está sendo acessada está AZURE_SUBSCRIPTION.
- Autorize o uso.
- Execute novamente o pipeline.
O pipeline de IC:
- Garante que a alteração do aplicativo passe por todas as verificações de qualidade automatizadas para implantação.
- Faz qualquer validação extra que não pôde ser concluída no pipeline de RP.
- Específico para GitOps, o pipeline também publica os artefatos para a confirmação que serão implantados pelo pipeline de CD.
- Verifica se a imagem do Docker foi alterada e se a nova imagem foi enviada por push.
Pipeline de CD
Durante a execução inicial do pipeline de CD, você será solicitado a conceder ao pipeline acesso ao repositório GitOps. Selecione Exibir quando solicitado que o pipeline precisa de permissão para acessar um recurso. Em seguida, selecione Permitir para conceder permissão para usar o repositório GitOps para as execuções atuais e futuras do pipeline.
A execução bem-sucedida do pipeline de CI aciona o pipeline de CD para concluir o processo de implantação. Você implantará em cada ambiente de forma incremental.
Gorjeta
Se o pipeline de CD não acionar automaticamente:
- Verifique se o nome corresponde ao gatilho de ramificação em
.pipelines/az-vote-cd-pipeline.yaml
- Deverá ser
arc-cicd-demo-src CI
.
- Deverá ser
- Execute novamente o pipeline de CI.
Depois que o modelo e as alterações de manifesto para o repositório GitOps tiverem sido gerados, o pipeline de CD criará um commit, enviá-lo-á por push e criará um PR para aprovação.
Abra o link PR fornecido na saída da
Create PR
tarefa.Verifique as alterações no repositório GitOps. Deverá ver:
- Alterações no modelo de leme de alto nível.
- Manifestos Kubernetes de baixo nível que mostram as alterações subjacentes para o estado desejado. O Flux implanta esses manifestos.
Se tudo estiver bem, aprove e conclua o PR.
Após alguns minutos, o Flux pega a alteração e inicia a implantação.
Encaminhe a porta localmente usando
kubectl
e verifique se o aplicativo funciona corretamente usando:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Exiba o aplicativo Azure Vote em seu navegador em
http://localhost:8080/
.Vote nos seus favoritos e prepare-se para fazer algumas alterações no aplicativo.
Configurar aprovações de ambiente
Após a implantação do aplicativo, você não só pode fazer alterações no código ou nos modelos, mas também pode colocar o cluster em um estado incorreto sem querer.
Se o ambiente de desenvolvimento revelar uma interrupção após a implantação, evite que ele vá para ambientes posteriores usando aprovações de ambiente.
- Em seu projeto de DevOps do Azure, vá para o ambiente que precisa ser protegido.
- Navegue até Aprovações e Verificações do recurso.
- Selecione Criar.
- Forneça os aprovadores e uma mensagem opcional.
- Selecione Criar novamente para concluir a adição da verificação de aprovação manual.
Para obter mais detalhes, consulte o tutorial Definir aprovação e verificações .
Da próxima vez que o pipeline de CD for executado, o pipeline será pausado após a criação do GitOps PR. Verifique se a alteração foi sincronizada corretamente e passa a funcionalidade básica. Aprove a verificação do pipeline para permitir que a alteração flua para o próximo ambiente.
Fazer uma alteração de aplicativo
Com esse conjunto de linha de base de modelos e manifestos que representam o estado no cluster, você fará uma pequena alteração no aplicativo.
No repositório arc-cicd-demo-src, edite
azure-vote/src/azure-vote-front/config_file.cfg
o arquivo.Como "Cats vs Dogs" não está recebendo votos suficientes, altere-o para "Tabs vs Spaces" para aumentar a contagem de votos.
Confirme a alteração em uma nova ramificação, envie-a por push e crie uma solicitação pull.
- Este é o fluxo típico do desenvolvedor que iniciará o ciclo de vida do CI/CD.
Pipeline de validação de RP
O gasoduto PR é a primeira linha de defesa contra uma mudança defeituosa. As verificações usuais de qualidade do código do aplicativo incluem revestimento e análise estática. Do ponto de vista do GitOps, você também precisa garantir a mesma qualidade para a infraestrutura resultante a ser implantada.
Os gráficos Dockerfile e Helm do aplicativo podem usar linting de maneira semelhante ao aplicativo.
Os erros encontrados durante o revestimento variam de:
- Arquivos YAML formatados incorretamente, para
- Sugestões de práticas recomendadas, como definir limites de CPU e memória para seu aplicativo.
Nota
Para obter a melhor cobertura do Helm linting em uma aplicação real, você precisará substituir valores que são razoavelmente semelhantes aos usados em um ambiente real.
Os erros encontrados durante a execução do pipeline aparecem na seção de resultados do teste da execução. A partir daqui, pode:
- Acompanhe as estatísticas úteis sobre os tipos de erro.
- Encontre a primeira confirmação na qual eles foram detetados.
- O estilo de rastreamento de pilha vincula as seções de código que causaram o erro.
Quando a execução do pipeline for concluída, você terá garantido a qualidade do código do aplicativo e do modelo que o implantará. Agora você pode aprovar e concluir o PR. O CI será executado novamente, regenerando os modelos e manifestos, antes de acionar o pipeline de CD.
Gorjeta
Em um ambiente real, não se esqueça de definir políticas de filial para garantir que o RP passe em suas verificações de qualidade. Para obter mais informações, consulte o artigo Definir políticas de ramificação.
Aprovações de processos de CD
Uma execução bem-sucedida do pipeline de CI aciona o pipeline de CD para concluir o processo de implantação. Semelhante à primeira vez que você pode usar o pipeline de CD, você implantará em cada ambiente de forma incremental. Desta vez, o pipeline exige que você aprove cada ambiente de implantação.
- Aprove a implantação no
dev
ambiente. - Depois que o modelo e as alterações de manifesto para o repositório GitOps tiverem sido gerados, o pipeline de CD criará um commit, enviá-lo-á por push e criará um PR para aprovação.
- Abra o link PR fornecido na tarefa.
- Verifique as alterações no repositório GitOps. Você deve ver:
- Alterações no modelo de leme de alto nível.
- Manifestos Kubernetes de baixo nível que mostram as alterações subjacentes para o estado desejado.
- Se tudo estiver bem, aprove e conclua o PR.
- Aguarde pela conclusão da implementação.
- Como um teste de fumaça básico, navegue até a página do aplicativo e verifique se o aplicativo de votação agora exibe Tabs vs Spaces.
- Encaminhe a porta localmente usando
kubectl
e verifique se o aplicativo funciona corretamente usando:kubectl port-forward -n dev svc/azure-vote-front 8080:80
- Exiba o aplicativo Azure Vote em seu navegador e http://localhost:8080/ verifique se as opções de votação foram alteradas para Guias vs Espaços.
- Encaminhe a porta localmente usando
- Repita as etapas de 1 a 7 para o
stage
ambiente.
Sua implantação agora está concluída. Isso encerra o fluxo de trabalho de CI/CD.
Clean up resources (Limpar recursos)
Se você não vai continuar a usar este aplicativo, exclua todos os recursos com as seguintes etapas:
Exclua a conexão de configuração do Azure Arc GitOps:
az k8s-configuration delete \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ --cluster-type connectedClusters
Remova o
dev
namespace:kubectl delete namespace dev
Remova o
stage
namespace:kubectl delete namespace stage
Próximos passos
Neste tutorial, você configurou um fluxo de trabalho completo de CI/CD que implementa o DevOps desde o desenvolvimento do aplicativo até a implantação. As alterações no aplicativo acionam automaticamente a validação e a implantação, limitadas por aprovações manuais.
Avance para nosso artigo conceitual para saber mais sobre GitOps e configurações com o Kubernetes habilitado para Azure Arc.