Os gateways do ASM suportam upgrades canário para garantir uma experiência de atualização suave. Este tópico usa o upgrade in-place de uma instância do ASM como exemplo para demonstrar como iniciar um único pod na nova versão. Isso permite verificar o tráfego nesse pod antes da atualização de todos os pods do gateway.
Pré-requisitos
Instância e versão do ASM — Certifique-se de ter added a cluster to an ASM instance e que a versão do ASM seja 1.20 ou posterior. Para obter instruções sobre como atualizar uma instância do ASM, consulte Upgrade an ASM instance.
Gateway de entrada — Verifique se você já created an ingress gateway.
Desligamento graceful — Ative o desligamento graceful no gateway antes de realizar o upgrade. Essa medida minimiza o risco de perda de tráfego durante a atualização. Para mais detalhes, consulte Enable graceful shutdown to prevent traffic loss.
Ausência de conflito de nomes com o Canary Deployment — Garanta que não exista nenhum Deployment no namespace do gateway cujo nome corresponda ao nome do Deployment do gateway seguido pelo sufixo
-canary. Por exemplo, se o gateway se chamaringressgateway, confirme que não há nenhum Deployment chamadoistio-ingressgateway-canaryno namespaceistio-system.Acesso ao plano de dados — Obtenha o arquivo KubeConfig do plano de dados para executar comandos kubectl no cluster correspondente.
Funcionamento do upgrade canário de gateway
Como ponto único de entrada e saída para o tráfego de service, o gateway deve atender a rigorosos requisitos de disponibilidade. O upgrade canário ajuda a manter a continuidade dos negócios. Você altera a configuração do gateway para iniciar primeiro um pod com a nova versão e valida o tráfego nele. A atualização completa do gateway ocorre somente após a validação bem-sucedida. Caso surja algum problema durante a verificação, exclua esse novo pod a qualquer momento e retome o upgrade após resolver a questão.
O upgrade canário de um gateway do ASM difere do upgrade canário de uma instância do ASM. A opção de upgrade canário do gateway está disponível independentemente de você realizar um upgrade in-place ou um upgrade canário da instância do ASM.
No ASM, a atualização do plano de controle e a do plano de dados são processos separados. O plano de dados pode ser atualizado após a conclusão da atualização do plano de controle.
Um upgrade canário de gateway cria um Deployment de réplica única compatível com a versão atual do plano de controle. Esse recurso é denominado Canary Deployment, e o único pod gerenciado por ele é o pod canário. O Canary Deployment pertence ao mesmo Service do Deployment original do gateway. A diferença reside no nome, que corresponde ao nome do Deployment original acrescido do sufixo -canary.
Se já existir um Deployment com o mesmo nome e o sufixo -canary no namespace do gateway, esse Deployment não será sobrescrito.
Ambos os caminhos de atualização de instância do ASM listados abaixo suportam o upgrade canário de gateway. Identifique o seu cenário antes de começar:
Upgrade in-place de instância do ASM — Após a conclusão da atualização do plano de controle, o gateway continua executando a versão anterior. Execute do Passo 1 ao Passo 4 descritos neste tópico.
Upgrade canário de instância do ASM — O Passo 1 deste tópico não se aplica. Durante o upgrade canário da instância, após alternar a nova versão para o plano de controle padrão, o gateway fica pendente de atualização. Prossiga a partir do Passo 2 para implantar um pod canário no gateway, validar o tráfego e concluir a atualização do gateway após a verificação bem-sucedida.
Passo 1: Atualize o plano de controle
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Upgrade Management, na aba In-place Upgrades, clique em Perform Upgrade Precheck. Na caixa de diálogo Note, clique em OK.
NotaCaso a página exiba a mensagem Currently, it is the latest version and does not need to be upgraded., significa que a service mesh já está na versão mais recente e não pode ser atualizada.
Após a aprovação da pré-verificação, clique em Upgrade. Na caixa de diálogo Note, clique em OK.
Passo 2: Implante um pod canário para o gateway do ASM
Para implantar um pod canário em um gateway do ASM, adicione a anotação asm.alibabacloud.com/enable-canary-deployment: "true" ao campo annotations, dentro de metadata, no arquivo YAML do gateway. Utilize o console do ASM ou a linha de comando kubectl.
Método 1: Uso do console do ASM
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, clique em View YAML à direita do gateway desejado. Na caixa de diálogo Edit, adicione a anotação e clique em OK.
Método 2: Uso do comando kubectl
-
Execute o comando abaixo para abrir o arquivo YAML do gateway do ASM.
kubectl edit IstioGateway <YOUR-INGRESSGATEWAY-NAME> -n istio-system Edite o arquivo YAML para incluir a anotação e salve as alterações.
O exemplo de arquivo YAML a seguir ilustra uma configuração de gateway do ASM com a anotação adicionada. O resultado final é idêntico em ambos os métodos.
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
labels:
asm-gateway-type: ingress
annotations:
asm.alibabacloud.com/enable-canary-deployment: "true" # Add this annotation.
name: ingressgateway
namespace: istio-system
spec:
clusterIds:
- xxxxxxxxxxxxxx
disableContainerPortExposed: true
dnsPolicy: ClusterFirst
externalTrafficPolicy: Local
gatewayType: ingress
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 4G
requests:
cpu: 200m
memory: 256Mi
rollingMaxSurge: 25%
rollingMaxUnavailable: 25%
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on'
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
serviceType: LoadBalancer
Valide o pod canário e seu tráfego
Siga as etapas abaixo independentemente do método utilizado para adicionar a anotação.
-
Use o arquivo KubeConfig do plano de dados para executar o comando seguinte e visualizar o Canary Deployment implantado. Neste exemplo, o nome do gateway é
ingressgateway. Substitua-o conforme o seu cenário real.kubectl -n istio-system get deployment | grep ingressgatewaySaída esperada:
istio-ingressgateway 1/1 1 1 10m istio-ingressgateway-canary 1/1 1 1 55sO Deployment com o sufixo
-canarycorresponde ao Canary Deployment. Aguarde até que suas réplicas prontas atinjam1/1, conforme exibido na saída anterior. -
Quando o pod canário estiver pronto, parte do tráfego será roteada para ele. Verifique se o tráfego que chega ao gateway está normal.
Se o tráfego estiver normal, prossiga para o Passo 3 a fim de atualizar o gateway. Caso o tráfego apresente anomalias, faça o rollback do pod canário conforme descrito na seção a seguir.
Faça rollback se a validação falhar
Caso o tráfego recebido pelo gateway apresente anomalias, execute as etapas abaixo:
Salve os logs do gateway.
Exclua a anotação
asm.alibabacloud.com/enable-canary-deployment: "true"configurada anteriormente. O pod canário será removido e todo o tráfego retornará aos pods do gateway que executam a versão anterior.Após resolver o problema, readicione a anotação para reimplantar o pod canário e valide o tráfego novamente.
Passo 3: Atualize o gateway após a validação bem-sucedida
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na seção Data Plane, coluna Upgrade, selecione o gateway desejado e clique em Upgrade Gateway. Na caixa de diálogo Note, clique em OK e aguarde a conclusão da atualização do gateway.
Passo 4: Exclua o pod canário
Após concluir a atualização do gateway, remova a anotação adicionada no Passo 2. O pod canário será excluído automaticamente. Para confirmar, visualize novamente os Deployments no namespace do gateway e verifique se o Deployment com o sufixo -canary deixou de existir.
O pod canário sempre acompanha a versão do plano de controle. Se você não o excluir, ele será atualizado juntamente com o plano de controle na próxima atualização.