Para lançar novas versões de uma aplicação de microsserviços com segurança e validar funcionalidades gradualmente, use o Argo CD para executar um lançamento canário de ponta a ponta. Essa abordagem oferece gerenciamento granular de tráfego e controle de versões, garantindo uma transição suave entre elas. Isso minimiza o impacto nos serviços em produção e aumenta a estabilidade do sistema.
Pré-requisitos
Crie uma instância do ASM nas edições Enterprise ou Ultimate com versão 1.20.6.27 ou superior. Para mais informações, consulte Criar uma instância do ASM e Atualizar uma instância do ASM.
Adicione um cluster Kubernetes à instância do ASM.
Instale o Argo CD e crie um gateway do ASM. Para mais detalhes, consulte as etapas 1 a 3 em Integrar o Argo CD ao ASM para implementar GitOps.
Conecte-se ao cluster Kubernetes via kubectl. Consulte Obter o arquivo kubeconfig de um cluster e usar o kubectl para se conectar.
Informações de fundo
O Argo CD adota a metodologia GitOps para implantar e liberar serviços de aplicações. Os desenvolvedores enviam manifests YAML de recursos da aplicação (como Deployments e Services) e regras de gerenciamento de tráfego (como VirtualServices, Gateways e DestinationRules) para um repositório Git. O Argo CD monitora o estado desses recursos no cluster e os compara com o estado desejado definido no repositório. Como o repositório Git atua como fonte única da verdade, o Argo CD sincroniza os recursos automática ou manualmente sempre que detecta alterações.
O Service Mesh ASM permite usar faixas de tráfego para isolar versões específicas (ou outras características) de uma aplicação em um ambiente de execução independente. Isso facilita lançamentos canários de ponta a ponta para serviços de aplicações. A partir da versão 1.20.6.27, o ASM suporta a definição de faixas de tráfego por meio de dois recursos personalizados em YAML: ASMSwimLaneGroup e ASMSwimLane. Gerencie esses recursos personalizados com o Argo CD para implementar lançamentos canários completos. Para saber mais, consulte Visão geral das faixas de tráfego.
Etapa 1: Implantar a aplicação e as faixas de tráfego
-
Crie um exemplo de lançamento canário de ponta a ponta para a aplicação mock.
-
Na interface do Argo CD, clique em NEW APP e configure os parâmetros a seguir.
Parâmetro
Descrição
Application Name
Nome da aplicação. Neste exemplo, insira
mock.SYNC POLICY
Política de sincronização da aplicação. Selecione
Automatically. Essa opção sincroniza automaticamente as definições mais recentes de recursos do repositório Git. Marque tambémPRUNE RESOURCESpara garantir a exclusão de recursos do cluster caso suas definições sejam removidas do repositório.Repository URL
URL do repositório Git de source. Insira a URL do repositório de exemplo:
https://github.com/AliyunContainerService/asm-labs.git. Se desejar modificar o exemplo, faça um fork deste repositório e informe a URL do seu fork.Revision
Tag ou branch do Git a ser sincronizada. Insira a branch do repositório de exemplo:
argocd-asm.Path
Caminho no repositório que contém os manifests dos recursos. Insira o caminho dos recursos do exemplo:
argo-cd/swimlane.Cluster URL
Endereço do servidor de API do cluster de destino. Insira o endereço do servidor de API do cluster Kubernetes onde o Argo CD está implantado:
https://kubernetes.default.svc.
-
-
Após concluir a configuração, clique em CREATE na parte superior da página.
Na página Applications do Argo CD, visualize o status da aplicação
mockrecém-criada.O status da aplicação deve ser Healthy e o status de sincronização deve ser Synced. Isso indica que a implantação e a sincronização ocorreram com sucesso.
-
Clique em a aplicação
mockpara verificar o status de sincronização dos recursos.A visualização de recursos mostra o status da aplicação como Healthy e a sincronização como Synced. Todos os recursos foram sincronizados sem erros.
Além dos recursos Deployment e Service que definem a aplicação, o repositório Git contém recursos de gerenciamento de tráfego (como VirtualService e Gateway) e recursos de faixa de tráfego do ASM (como ASMSwimLaneGroup e ASMSwimLane).
Etapa 2: Verificar o lançamento canário de ponta a ponta
Neste exemplo, os recursos ASMSwimLaneGroup e ASMSwimLane isolam os ambientes v1 e v2 dos serviços da aplicação. Um recurso VirtualService instrui o gateway do ASM a encaminhar o tráfego para as duas versões na proporção de 1:1. Acesse repetidamente o gateway do ASM para validar o lançamento canário de ponta a ponta.
Obtenha o endereço ip público do gateway no console do ASM. Para mais detalhes, consulte Obter o endereço IP de um gateway do ASM.
-
Execute o comando a seguir para definir uma variável de ambiente.
Substitua
xxx.xxx.xxx.xxxpelo endereço ip obtido na etapa anterior.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
Execute o comando abaixo para acessar o gateway do ASM repetidamente.
for i in {1..100}; do curl http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;Saída esperada:
-> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) -> mocka(version: v2, ip: 10.0.239.73)-> mockb(version: v2, ip: 10.0.239.136)-> mockc(version: v2, ip: 10.0.239.139) -> mocka(version: v1, ip: 10.0.239.75)-> mockb(version: v1, ip: 10.0.239.138)-> mockc(version: v1, ip: 10.0.239.137) ...A saída indica que a aplicação de exemplo é composta por três serviços:
mocka,mockbemockc. A cadeia de chamadas segue a ordemmocka→mockb→mockc, e cada serviço possui versões v1 e v2. As requisições são distribuídas entre as versões v1 e v2 em uma proporção aproximada de 1:1. O isolamento da cadeia de chamadas para cada versão confirma o sucesso do lançamento canário de ponta a ponta.
Operações relacionadas
Lançar uma nova versão do serviço
O repositório Git de exemplo utilizado neste tutorial possui a seguinte estrutura de arquivos:
|
Arquivo |
Descrição |
|
mock-v1.yaml mock-v2.yaml |
Definições de Deployment para as versões v1 e v2 dos serviços |
|
swimlanegroup.yaml |
Definição do grupo de faixas. Um grupo de faixas associa-se a uma ou mais faixas de tráfego e define informações compartilhadas entre elas. Especifica os |
|
swimlanes.yaml |
Definições das faixas de tráfego. Este arquivo define dois recursos |
|
mock-route.yaml |
Define os recursos Gateway e VirtualService aplicáveis ao gateway de entrada do ASM. Esses recursos de gerenciamento de tráfego controlam como o gateway do ASM roteia requisições para os serviços em cada faixa de tráfego. |
Para lançar uma nova versão do serviço da aplicação, faça um fork da branch argocd-asm do repositório de exemplo https://github.com/AliyunContainerService/asm-labs.git. Modifique os recursos YAML no caminho argo-cd/swimlane e envie as alterações (commit). Após o push, o Argo CD sincroniza as mudanças automaticamente. Certifique-se de que a Repository URL mencionada na Etapa 1 aponte para a URL do seu repositório com fork.
Por exemplo, para lançar uma nova versão v3 dos serviços mocka, mockb e mockc, modifique os recursos YAML no seu repositório Git conforme descrito abaixo:
-
Adicione o arquivo
argo-cd/swimlane/mock-v3.yaml.Este arquivo YAML define os Deployments para as versões v3 dos serviços
mocka,mockbemockc. -
Modifique o arquivo
argo-cd/swimlane/swimlanes.yamlcom o conteúdo a seguir.Uma nova faixa de tráfego (ASMSwimLane) chamada
v3foi adicionada. Esse recurso associa-se ao grupo de faixasmock(ASMSwimLaneGroup) e especifica que Pods com o rótuloversion:v3pertencem à versão v3 do serviço. -
Atualize o arquivo
argo-cd/swimlane/mock-route.yamlcom o conteúdo abaixo.O VirtualService chamado
mockfoi alterado para incluir a versão v3 do serviçomockanos destinos de rota. O camposubsetmapeia para o nome da faixa de tráfego (ASMSwimLane). O campoweightno VirtualService foi ajustado para dividir o tráfego entre as versões v1, v2 e v3 na proporção de 6:3:1.