Ao lançar uma nova versão de um Knative Service, direcionar todo o tráfego para ela de uma só vez pode causar indisponibilidade caso haja problemas. A divisão de tráfego permite encaminhar uma pequena porcentagem das requisições para a nova Revision primeiro, verificar sua estabilidade e aumentar gradualmente essa participação. Se surgirem falhas em qualquer etapa, reverta o tráfego imediatamente para a Revision anterior.
Como funciona
No Knative no Alibaba Cloud Service Mesh (ASM), cada Knative Service possui uma ou mais Revisions:
O Knative cria automaticamente a primeira Revision ao criar um Knative Service.
O Knative gera uma nova Revision sempre que você atualiza a configuração do Service.
Você define a porcentagem de tráfego encaminhada para cada Revision. A soma das porcentagens de todas as Revisions deve ser igual a 100%.
Uma liberação canary típica segue esta progressão:
Crie uma nova Revision e atribua 0% do tráfego a ela.
Verifique se a nova Revision funciona corretamente.
Transfira gradualmente o tráfego da Revision anterior para a nova (por exemplo, 10% -> 50% -> 100%).
Caso a nova Revision apresente problemas em qualquer fase, defina seu tráfego como 0% e restaure a Revision anterior para 100%.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um Knative Service implantado por meio do Knative no ASM. Para obter detalhes, consulte Usar o Knative no ASM para implantar uma aplicação serverless.
Este tópico utiliza o nome de domínio padrão example.com. Para usar um nome de domínio personalizado, consulte Definir um nome de domínio personalizado no Knative no ASM.
Etapa 1: Criar uma nova Revision com 0% de tráfego
Crie uma nova Revision sem enviar tráfego de produção para ela. Isso permite confirmar o sucesso da implantação antes de expô-la aos usuários.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, escolha Applications > Knative.
Clique na aba Services. Localize o Service e clique no nome dele. No canto superior direito, clique em Create Revision.
-
Na etapa Basic Information, clique em Advanced na parte inferior. Clique em Add ao lado de Environment Variables e configure os seguintes parâmetros. Em seguida, clique em Next.
Parâmetro
Valor
Type
Custom
Variable Key
TARGETValue/ValueFrom
Knative on ASM -
Na etapa Traffic Splitting Settings, defina Percent % como
0para a Latest Revision e100para a Revision anterior. Clique em Create.NotaA soma das porcentagens de tráfego de todas as Revisions deve ser igual a 100%.
Após criar a Revision, clique na aba Services e selecione o nome do Service. Na seção Revision Information, verifique se a nova Revision aparece listada.
-
Execute o comando abaixo para confirmar que todo o tráfego ainda vai para a Revision anterior. Saída esperada: Cada requisição retorna
Hello World!, o que confirma que a Revision anterior continua processando 100% do tráfego.curl http://helloworld-go.default.example.comHello World!
Etapa 2: Transferir tráfego para a nova Revision
Aumente a porcentagem de tráfego da nova Revision em etapas enquanto monitora possíveis problemas.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, escolha Applications > Knative.
Clique na aba Services e selecione o nome do Service. No canto superior direito, clique em Split Traffic. Na caixa de diálogo Split Traffic, defina Percent % como
50tanto para a Revision mais recente quanto para a anterior e clique em OK.Após salvar a divisão de tráfego, clique na aba Services e selecione o nome do Service. Na seção Revision Information, confirme as porcentagens de tráfego atualizadas.
-
Envie várias requisições para verificar se o tráfego está distribuído entre ambas as Revisions. Saída esperada (abreviada): As respostas alternam entre
Hello World!(Revision anterior) eHello Knative on ASM!(nova Revision), correspondendo aproximadamente à divisão 50/50.for i in $(seq 20); do curl http://helloworld-go.default.example.com; doneHello Knative on ASM! Hello Knative on ASM! Hello World! Hello Knative on ASM! Hello World! ... Se a nova Revision estiver estável, repita a etapa 3 para aumentar sua porcentagem de tráfego. Continue até que ela processe 100% do tráfego.
-
Quando a nova Revision atingir 100%, valide a transição completa. Saída esperada: Todas as requisições retornam
Hello Knative on ASM!, confirmando a conclusão da liberação canary.for i in $(seq 20); do curl http://helloworld-go.default.example.com; doneHello Knative on ASM! Hello Knative on ASM! Hello Knative on ASM! ...
Reverter para a Revision anterior
Caso a nova Revision apresente erros, alta latência ou comportamento inesperado durante a liberação canary, faça a reversão imediatamente:
Na página de detalhes do Service, clique em Split Traffic no canto superior direito.
Na caixa de diálogo Split Traffic, defina Percent % como
0para a nova Revision e100para a anterior. Clique em OK.-
Valide a reversão enviando requisições. Todas as respostas devem retornar
Hello World!, confirmando que o tráfego foi totalmente restaurado para a Revision anterior.for i in $(seq 20); do curl http://helloworld-go.default.example.com; done
Próximos passos
Após uma liberação canary, configure o dimensionamento automático para ajustar a quantidade de pods conforme o volume de tráfego. O Knative Serving adiciona um contêiner Queue Proxy a cada pod para relatar métricas de concorrência ao Knative Pod Autoscaler (KPA). O KPA dimensiona o número de pods com base no volume de requisições simultâneas. Para obter detalhes, consulte Ativar o dimensionamento automático de pods com base no número de requisições.