Integre a governança de tráfego do Microservices Engine (MSE) aos pipelines de CI/CD do Jenkins para automatizar liberações canary em aplicações de microsserviços. Esse fluxo de trabalho combina compilação, implantação, verificação e promoção (ou rollback) em um único pipeline, reduzindo os riscos de implantação sem comprometer a velocidade das liberações.
Como funciona
O pipeline do Jenkins automatiza todo o ciclo de vida da liberação:
Compilação -- Empacote o código-fonte e crie uma imagem de contêiner.
Implantação canary -- Implante a nova versão ao lado da versão base estável.
Roteamento de tráfego canary -- O MSE direciona um subconjunto do tráfego para o canary com base em cabeçalhos, cookies ou parâmetros de requisição definidos por você.
Verificação -- Confirme se o canary se comporta conforme o esperado.
Promoção ou rollback -- Promova o canary para produção total se ele passar na verificação ou reverta para a versão base.
O diagrama a seguir ilustra a arquitetura:
O MSE oferece suporte a três estratégias de roteamento canary:
|
Estratégia |
Descrição |
|
Baseada em porcentagem |
Direciona uma porcentagem fixa do tráfego para o canary. |
|
Baseada em regras |
Roteia o tráfego correspondente a cabeçalhos, cookies ou parâmetros de requisição específicos. |
|
Baseada em tags |
Marca o tráfego canary com um cabeçalho integrado, como |
Este tutorial utiliza o roteamento baseado em tags com o cabeçalho x-mse-tag: gray.
Pré-requisitos
Antes de começar, certifique-se de ter:
Habilitado a Governança de Microsserviços para aplicações de microsserviços em um cluster ACK
Implantado o Jenkins em um cluster ACK com permissões para enviar imagens ao seu registro de contêiner
Implantado as aplicações de demonstração descritas na próxima seção ou preparado suas próprias aplicações de microsserviços
Implantar aplicações de demonstração
Este tutorial utiliza cinco aplicações implantadas em um cluster ACK:
|
Aplicação |
Função |
Porta do contêiner |
|
spring-cloud-zuul |
Gateway de entrada |
20000 |
|
spring-cloud-a |
Aplicação A |
20001 |
|
spring-cloud-b |
Aplicação B |
8080 |
|
spring-cloud-c |
Aplicação C |
20003 |
|
nacos-server |
Registro de serviço (modo standalone) |
-- |
A cadeia de chamadas é: spring-cloud-zuul -> spring-cloud-a -> spring-cloud-b -> spring-cloud-c.
O gateway spring-cloud-zuul processa 100 QPS de tráfego normal e mais 10 QPS de tráfego canary. Requisições com o cabeçalho x-mse-tag: gray são roteadas automaticamente para nós downstream marcados com a tag gray. Substitua gray por qualquer valor de tag personalizado para atender aos seus requisitos.
Etapa 1: Criar as implantações
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, localize e clique no nome do seu cluster.
No painel de navegação à esquerda, escolha Workloads > Deployments.
Clique em Create from YAML e aplique os seguintes arquivos YAML.
spring-cloud-zuul (gateway de entrada)
spring-cloud-a (versão base)
spring-cloud-b (versão base)
spring-cloud-c (versão base)
nacos-server (registro de serviço) e serviço SLB
Etapa 2: Verificar a implantação
Após implantar todas as aplicações, abra o console MSE e verifique o tráfego da Aplicação A. Todo o tráfego deve fluir para os nós untagged, sem tráfego nos nós canary.
Criar uma rota para roteamento canary
As rotas definem como o MSE direciona o tráfego canary através de uma cadeia de chamadas de microsserviços. Configure primeiro um grupo de rotas e, em seguida, crie uma rota com regras de roteamento.
Etapa 1: Criar um grupo de rotas
Faça login no console MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Governance > Full link grayscale.
Clique em Create Lane Group and Lane. Se já existir um grupo de rotas no seu namespace de microsserviços, clique em + Create Lane Group.
-
Configure o grupo de rotas:
Parâmetro
Valor
Lane Group Name
Um nome descritivo para o grupo de rotas.
Ingress Type
Selecione Java Microservice Gateway.
Lane Group Traffic Entry
Selecione sua aplicação de entrada (spring-cloud-zuul).
Lane Group Application
Selecione todas as aplicações na cadeia de chamadas.
Clique em OK.
Após a criação, verifique se a aplicação de entrada e as aplicações relacionadas aparecem na seção applications involved in the lane group na página Full link grayscale. Para modificar o grupo de rotas, clique em
.
Etapa 2: Criar uma rota
Na página Full link grayscale, selecione o mesmo namespace de microsserviços do seu grupo de rotas.
-
Clique em Click to Create First Split Lane. Se já existir uma rota, clique em Create Lane.
ImportanteDepois de configurar uma liberação canary de ponta a ponta para as aplicações, elas não oferecerão mais suporte a recursos como liberação canary e roteamento baseado em tags.
-
Configure os parâmetros da rota. As condições de roteamento aceitam os seguintes tipos de parâmetros:
ImportanteO tráfego que não corresponder a nenhuma condição de roteamento canary será direcionado para nós sem tag na versão base.
Parâmetro
Descrição
Add Node Tag
Adicione uma tag (por exemplo,
gray) para identificar os nós canary.Enter lane information
Defina a Lane Tag e use Confirm Matching Relationship para verificar a contagem de nós com tag.
Configure Routing and Canary Release Rules
Defina as condições de roteamento (consulte a tabela a seguir).
Tipo de parâmetro
Descrição
Parameter
Parâmetro de requisição
Header
Cabeçalho de requisição
Cookie
Cookie HTTP
Body Content
Corpo da requisição formatado em JSON
Clique em OK.
Após a configuração, o gateway roteia o tráfego da seguinte forma:
O tráfego que não corresponde às regras canary vai para a versão base.

O tráfego que corresponde às regras canary vai para a versão canary.

Configurar o pipeline do Jenkins
Etapa 1: Configurar credenciais do registro de imagens
Crie um Kubernetes Secret para que o Jenkins possa enviar imagens ao seu registro de contêiner. Após gerar um arquivo config.json com suas credenciais de registro, execute:
kubectl create secret generic jenkins-docker-cfg -n jenkins --from-file=/root/.docker/config.json
Para obter detalhes, consulte Configurar o Jenkins para criar um pipeline de entrega de aplicações.
Etapa 2: Criar o pipeline
No painel do Jenkins, clique em New Item no painel de navegação à esquerda.
Insira o nome do pipeline, selecione pipeline como tipo e clique em OK.
-
Na página de configuração, clique na aba Pipeline e defina o seguinte:
Definition: Selecione Pipeline script from SCM.
SCM: Selecione Git.
Repository URL: Insira a URL do seu repositório Git. Este tutorial usa
https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/mse-simple-demo. > Nota: Se sua instância do Jenkins não conseguir acessar o GitHub, use um espelho no Gitee.Script Path: Insira
Jenkinsfile.
Clique em Save.
O Jenkinsfile define quatro estágios de pipeline:
Estágios do pipeline:
|
Estágio |
O que faz |
Contêiner |
|
Code packaging |
Compila a aplicação com Maven ( |
maven |
|
Image building and releasing |
Cria e envia uma imagem de contêiner com Kaniko. |
kaniko |
|
Canary deployment |
Atualiza o YAML da implantação gray com a nova tag de imagem e o aplica. |
kubectl |
|
Completing canary deployment |
Aguarda entrada manual. Insira |
kubectl |
Parâmetros do pipeline:
|
Parâmetro |
Padrão |
Descrição |
|
|
cn-shanghai |
Região do Container Registry. |
|
|
yizhan |
Namespace do Container Registry. |
|
|
spring-cloud-a |
Nome do repositório de imagens. |
|
|
gray |
Tag de imagem para a compilação canary. |
|
|
master |
Branch do Git para compilação. |
|
|
2 |
Número de réplicas de pods. |
Executar o pipeline e verificar
Etapa 1: Compilar o pipeline
No painel do Jenkins, clique em
ao lado do nome do pipeline.-
Clique em Build.
NotaA primeira compilação extrai a configuração do repositório Git e inicializa o pipeline. Se ocorrer um erro, clique em Build with Parameters, configure os parâmetros e compile novamente.
Aguarde a conclusão dos estágios Code packaging, Image building and releasing e Canary deployment. O pipeline pausa no estágio Completing canary deployment, aguardando sua confirmação.
Etapa 2: Verificar a implantação canary
Faça login no console ACK. Acesse o seu cluster e escolha Workloads > Deployments.
Confirme se a implantação
spring-cloud-a-grayexiste e usa a imagemspring-cloud-a:gray.Acesse Network > Services, selecione seu namespace e clique no public endpoint do serviço zuul-slb.
-
Teste o roteamento de tráfego: Tráfego normal (sem cabeçalho canary) -- roteado para a versão base: Saída esperada: Tráfego canary (com tag canary) -- roteado para o nó canary: Saída esperada:
curl http://<zuul-slb-public-endpoint>/A/aA[10.4.XX.XX] -> B[10.4.XX.XX] -> C[10.4.XX.XX]%curl http://<zuul-slb-public-endpoint>/A/a?name=xiaomingAgray[10.4.XX.XX] -> B[10.4.XX.XX] -> C[10.4.XX.XX]% No console MSE, abra a página de detalhes da aplicação e confirme se o tráfego canary está sendo roteado para o nó canary.
Promover para liberação completa
Após a aprovação na verificação, promova o canary para produção.
No painel do Jenkins, clique no nome do pipeline.
Clique no estágio Completing canary deployment, insira
truena caixa de diálogo Are you sure that you want to enable a full release e clique em OK.-
No console ACK, verifique se:
A implantação
spring-cloud-a-grayfoi excluída.A implantação
spring-cloud-aagora usa a imagemspring-cloud-a:gray.
No console MSE, confirme que o tráfego canary não aparece mais.
Reverter
Se a verificação falhar, reverta para a versão base.
No painel do Jenkins, clique no nome do pipeline.
Clique no estágio Completing canary deployment, insira
falsena caixa de diálogo Are you sure that you want to enable a full release e clique em OK.-
No console ACK, verifique se:
A implantação
spring-cloud-a-grayfoi excluída.A implantação
spring-cloud-aainda usa sua versão de imagem original.
No console MSE, confirme que o tráfego canary não aparece mais.