Reversões, implementações graduais e migração de tráfego

O Knative Serving permite-lhe especificar que revisões devem receber tráfego e especificar as percentagens de tráfego recebidas por uma revisão. Esta funcionalidade permite-lhe reverter para uma revisão anterior, implementar gradualmente uma revisão (também conhecida como implementação azul-verde) e dividir o tráfego entre várias revisões. Esta página descreve como usar esta funcionalidade para gerir o tráfego para as revisões do Knative serving.

Reverter para uma revisão anterior

Para reverter para uma revisão anterior:

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Localize o serviço na lista de serviços e clique no mesmo.

  3. Clique no separador Revisões para mostrar a lista de revisões atuais desse serviço.

  4. Na lista de revisões, clique no ícone de reticências à direita da revisão à qual está a reverter:

  5. Clique em Gerir tráfego para apresentar o formulário de gestão de tráfego:

    1. Selecione a revisão anterior para a qual quer reverter na lista pendente.
    2. Defina a percentagem de tráfego dessa revisão anterior como 100.
    3. Defina a percentagem da revisão publicada atualmente como 0.
    4. Clique em Guardar.

Linha de comandos

Use o seguinte comando:

gcloud run services update-traffic SERVICE --to-revisions REVISION=100

  • Substitua SERVICE pelo nome do serviço.
  • Substitua REVISION pelo nome da revisão para a qual está a reverter.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

  2. No ficheiro local, atualize o atributo traffic que se encontra em spec:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    Substituir

    • REVISION com o nome da revisão para a qual está a reverter.
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Implementar gradualmente uma revisão

Para implementar uma nova revisão gradualmente (implementação azul-verde):

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Localize o serviço na lista de serviços e clique no mesmo.

  3. Clique em Implementar nova revisão.

  4. Preencha o formulário de implementação conforme necessário, mas certifique-se de que a caixa de verificação com a etiqueta Publicar esta revisão imediatamente NÃO está selecionada.

  5. Clique em Implementar.

  6. Clique em Gerir tráfego.

  7. A nova revisão é apresentada, mas com uma percentagem de 0: atualmente, não está a publicar tráfego. No formulário:

    1. Defina-o para a percentagem pretendida, por exemplo, 5. Tenha em atenção que a percentagem da versão publicada atualmente é reduzida automaticamente nesse mesmo valor.
    2. Clique em Guardar.
    3. Repita estes passos de Gerir tráfego, mas com percentagens alteradas, aumentando a percentagem conforme necessário para a nova revisão. Não precisa de voltar a implementar para alterar as percentagens de tráfego.

Linha de comandos

  1. Para implementar a revisão que quer implementar gradualmente, definindo-a inicialmente para não receber tráfego, use o comando update com o parâmetro --no-traffic:

    gcloud run deploy --image IMAGE --no-traffic

    Substitua IMAGE pela imagem que está a implementar.

  2. Especifique a percentagem de tráfego que quer que a nova revisão processe, por exemplo, 5 por cento:

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • Substitua SERVICE pelo nome do serviço.
    • Substitua REVISION pelo nome da revisão que está a implementar gradualmente. Para especificar a revisão mais recente, pode usar LATEST, por exemplo, LATEST=5.
    • Substitua PERCENTAGE pela percentagem de tráfego que quer enviar para a nova revisão, por exemplo, 5 para enviar 5% do tráfego.
  3. Quando o desempenho da revisão for satisfatório, repita o passo update-traffic anterior, mas aumente o valor percentual conforme pretendido.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

  2. Faça as alterações de configuração desejadas ao serviço, conforme descrito nas várias páginas de configuração e especifique o nome da revisão que quer para a nova revisão:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • REVISION-NAME com o nome que quer que a nova revisão tenha.
  3. Abaixo do atributo spec, localize e atualize o atributo traffic para que a nova revisão apresente apenas uma pequena quantidade de tráfego:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-NEW
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    Tenha em atenção que as percentagens têm de totalizar 100. Substituir

    • REVISION-NEW com o nome da revisão que está a implementar gradualmente.
    • REVISION-FORMER com o nome da revisão publicada atualmente.
    • PERCENT-NEW com a percentagem de tráfego que quer enviar para a nova revisão. Por exemplo, use 10 para enviar 10% do tráfego para essa revisão.
    • PERCENT-FORMER com a percentagem de tráfego que quer enviar para a revisão antiga

Dividir o tráfego entre várias revisões

Para dividir o tráfego entre duas ou mais revisões:

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Localize o serviço na lista de serviços e clique no mesmo.

  3. Clique em Gerir tráfego.

  4. A nova revisão publicada atualmente é apresentada. No formulário:

    1. Defina a percentagem de revisão publicada atualmente para a divisão pretendida.
    2. Selecione uma das revisões anteriores através da lista pendente e defina-a para a divisão percentual pretendida.
    3. Para dividir o tráfego entre mais revisões, clique em Adicionar revisão, selecione a revisão pretendida e defina a percentagem para a divisão desejada.
    4. Clique em Guardar.

Linha de comandos

Especifique as revisões e a percentagem de tráfego para cada revisão numa lista separada por vírgulas:

gcloud run services update-traffic SERVICE --to-revisions LIST

Substituição:

  • SERVICE com o nome do serviço.
  • LIST com uma lista de revisões delimitada por vírgulas para as quais quer receber tráfego e a percentagem de tráfego correspondente, num total de 100 por cento:
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEn
    por exemplo, hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

  2. No ficheiro local, atualize o atributo traffic para que a nova revisão sirva apenas uma pequena quantidade de tráfego:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-A
        percent: PERCENT-A
      - revisionName: REVISION-B
        percent: PERCENT-B
      - revisionName: REVISION-C
        percent: PERCENT-C
    

    Tenha em atenção que as percentagens têm de totalizar 100. Substituir

    • REVISION-A, REVISION-B, REVISION-C com as revisões às quais está a atribuir tráfego.
    • PERCENT-A, PERCENT-B, PERCENT-C com a percentagem da revisão correspondente.
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Enviar todo o tráfego para a revisão mais recente

Quando implementa uma nova revisão, pode fazer com que esta revisão e todas as futuras apresentem 100% do tráfego assim que possível, substituindo qualquer divisão de tráfego estabelecida:

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Localize o serviço na lista de serviços e clique no mesmo.

  3. Clique em Implementar nova revisão.

  4. Preencha o formulário de implementação conforme necessário, certificando-se de que seleciona a caixa de verificação com a etiqueta Publicar esta revisão imediatamente. Isto substitui qualquer divisão de tráfego existente, com a nova revisão a publicar 100% do tráfego.

  5. Clique em Implementar.

Linha de comandos

Para enviar todo o tráfego para a revisão implementada mais recentemente:

gcloud run services update-traffic SERVICE --to-latest

Substitua SERVICE pelo nome do serviço.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

  2. No ficheiro local, atualize o atributo traffic que se encontra em spec:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Usar etiquetas para testes, migração de tráfego e reversões

Depois de implementar um serviço, pode criar uma nova revisão e atribuir uma etiqueta que lhe permita aceder à revisão num URL específico sem publicar tráfego. Em seguida, pode usar essa etiqueta para migrar gradualmente o tráfego para a revisão etiquetada e para reverter uma revisão etiquetada.

Um exemplo de utilização comum desta funcionalidade é usá-la para testar e validar uma nova revisão do serviço antes de publicar tráfego, nesta sequência típica:

  1. Executar testes de integração num contentor durante o desenvolvimento.
  2. Implemente o contentor num Google Cloud projeto que usa apenas para preparação, sem publicar tráfego, e teste-o com uma revisão etiquetada.
  3. Implemente-o em produção, sem publicar tráfego, e teste-o com uma revisão etiquetada em produção.
  4. Migre o tráfego para a revisão etiquetada.

Implementar uma nova revisão etiquetada

Para implementar uma nova revisão de um serviço existente na produção:

gcloud run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME

Substituição:

  • IMAGE_URL com o URL da sua imagem
  • TAG_NAME com o nome da etiqueta em letras minúsculas

A etiqueta permite-lhe testar diretamente a nova revisão num URL específico, sem publicar tráfego. O URL de teste começa com o nome da etiqueta que indicou: http://{TAG_NAME}---{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io

Por exemplo, se usou o nome da etiqueta green no serviço myservice, testaria a revisão etiquetada no URL: https://green---myservice.default.kuberun.11.111.11.111.nip.io

Migrar tráfego para uma revisão etiquetada

Depois de confirmar que a nova revisão funciona corretamente, pode começar a migrar tráfego para a mesma através da Google Cloud consola, da linha de comandos gcloud ou de um ficheiro YAML:

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative serving

  2. Localize o serviço na lista de serviços e clique no mesmo:

  3. Selecione a revisão etiquetada para a qual quer enviar tráfego:

  4. Clique em Gerir tráfego.

  5. Localize o nome da revisão etiquetada: é apresentado, mas com uma percentagem de 0: atualmente, não está a publicar tráfego. No formulário Gerir tráfego*:

    1. Defina-o para a percentagem pretendida, por exemplo, 5. Tenha em atenção que a percentagem da versão publicada atualmente é reduzida automaticamente nesse mesmo valor.
    2. Clique em Guardar.
    3. Ao longo de um período de horas ou dias, conforme necessário, repita estes passos de Gestão de tráfego, mas com percentagens alteradas, aumentando a percentagem conforme necessário para a revisão etiquetada. Não precisa de voltar a implementar para alterar as percentagens de tráfego.

Linha de comandos

Para migrar tráfego para uma etiqueta de revisão específica:

gcloud run deploy update-traffic myservice --tag TAG_NAME=TRAFFIC_PERCENT

Substituir

  • TAG_NAME com o nome da etiqueta para a qual está a migrar o tráfego
  • TRAFFIC_PERCENT com a percentagem de tráfego que quer que a revisão etiquetada publique, por exemplo, 1.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço de fornecimento do Knative.

  2. Faça as alterações de configuração desejadas ao serviço, conforme descrito nas várias páginas de configuração.

  3. Abaixo do atributo spec, localize e atualize o atributo traffic para a revisão etiquetada, de modo que a revisão etiquetada apresente apenas uma pequena quantidade de tráfego:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        tag: TAG_NAME
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    Tenha em atenção que as percentagens têm de totalizar 100. Substituir

    • REVISION com o nome da revisão etiquetada.
    • TAG_NAME com o nome da etiqueta que está a implementar gradualmente.
    • PERCENT-NEW com a percentagem de tráfego que quer enviar para a revisão etiquetada. Por exemplo, use 10 para enviar 10% do tráfego para essa revisão.
    • REVISION-FORMER com o nome da revisão publicada atualmente.
    • PERCENT-FORMER com a percentagem de tráfego que quer enviar para a revisão antiga
  4. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml