Como realizar upgrades de imagem do SO com um clique em MIGs


Ao usar uma combinação de famílias de imagens personalizadas e atualizações graduais, é possível ativar upgrades de imagem do SO com um clique no seu grupo de instâncias gerenciadas (MIG, na sigla em inglês).

O uso da atualização de imagem do SO com um clique oferece vários benefícios, incluindo os seguintes:

  • Funciona com todos os tipos de máquinas de VM e todos os tamanhos de grupos de instâncias.
  • É compatível com imagens e contêineres do Windows e do Linux.
  • As instâncias são recriadas com base no modelo de instância atual ou, opcionalmente, com base em um novo modelo, para que você possa preservar scripts e metadados de inicialização personalizados.
  • Funciona com MIGs com estado. Portanto, é possível, opcionalmente, preservar dados em discos que não são de inicialização.
  • O lançamento de uma atualização para a nova versão do SO acontece automaticamente, sem a necessidade de outra entrada do usuário após a solicitação inicial.
  • Suporta atualizações em lote com uma verificação de integridade opcional.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.
    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

Como funciona o upgrade da imagem do SO com um clique?

Quando você invoca uma atualização, o MIG substitui os discos de inicialização de todas as VMs no grupo pela versão de imagem do SO mais recente disponível da família de imagens personalizada. O MIG preserva os metadados e os scripts de inicialização que você configura no modelo de instância para cada VM no grupo. Os discos que não são de inicialização são recriados com base nas especificações no modelo de instância. Para informações sobre como preservar dados, consulte Como configurar discos com estado em MIGs.

Para limitar a interrupção do aplicativo, é possível realizar atualizações em lotes, mantendo uma porcentagem específica de VMs em execução durante a atualização. Para aumentar a confiabilidade, é possível configurar uma verificação de integridade baseada em aplicativo para seu MIG: o grupo aguarda uma resposta íntegra de um aplicativo em VMs atualizadas antes de prosseguir com atualizações para outras VMs.

Antes de começar

  • Instale ou atualize para a versão mais recente da Google Cloud CLI.

  • Certifique-se de ter criado um modelo de instância que aponte para uma família de imagens. O Google recomenda que você use famílias de imagens personalizadas para reduzir o risco de implantação de uma versão de imagem incompatível com seu aplicativo. É possível garantir que apenas versões de imagem compatíveis sejam implantadas adicionando imagens à família de imagens personalizadas somente após o teste de compatibilidade com o aplicativo.

    Quando o modelo de instância aponta para uma família de imagens, o MIG sempre cria instâncias a partir da imagem mais recente da família, por exemplo:

    • Quando o MIG adiciona novas instâncias porque você ou o escalonador automático do MIG aumentaram o tamanho do MIG.
    • Quando o MIG recria uma instância, acionada manualmente ou por recuperação automática.
  • Teste a nova imagem com o app antes de adicioná-la à família de imagens e implantá-la.

  • Opcionalmente, crie uma verificação de integridade baseada em aplicativo para o MIG. Uma verificação de integridade baseada em aplicativo verifica se o aplicativo está respondendo conforme o esperado em cada uma das VMs no MIG. É possível configurar sua atualização para permitir no máximo uma VM indisponível. Se um aplicativo não responder como esperado, o MIG marcará essa VM como indisponível e sua implementação não continuará.

Como executar upgrades de imagem de SO com um clique para MIGs

Para atualizar todas as VMs em um MIG para a imagem mais recente de uma família de imagens personalizada, siga as etapas abaixo:

  1. Inicie uma substituição gradual com o comando a seguir.

    gcloud compute instance-groups managed rolling-action replace instance-group-name \
        [--max-surge=max-surge ] [--max-unavailable=max-unavailable]

    Substitua:

    • instance-group-name: o nome do MIG a ser operado
    • max-surge: o número máximo de VMs que podem ser criadas temporariamente durante o processo de atualização. Pode ser um número fixo (por exemplo, 5) ou uma porcentagem do tamanho do MIG (por exemplo, 10%).
    • max-unavailable: o número máximo de VMs que podem estar indisponíveis durante o processo de atualização. Pode ser um número fixo (5) ou uma porcentagem do tamanho do MIG (10%).

    É possível combinar verificações de integridade usando as opções --max-unavailable e --max-surge para interromper outras atualizações que possam deixar as VMs indisponíveis.

  2. Monitore a atualização usando o subcomando wait-until para verificar se o campo status.versionTarget.isReached do MIG está definido como true.

    gcloud compute instance-groups managed wait-until instance-group-name --version-target-reached

    Substitua:

    • instance-group-name: o nome do MIG a ser operado

    O comando retorna quando o grupo é atualizado.

    Também é possível listar instâncias para ver o status de cada uma.

    gcloud compute instance-groups managed list-instances instance-group-name

    O comando retorna uma lista de instâncias e seus detalhes, incluindo o status, estado de integridade e ações atuais de cada VM. Quando todas as VMs estiverem RUNNING e sem ação atual, o MIG estará atualizado e estável.

  3. Caso precise reverter para uma imagem do SO anterior, crie um modelo de instância e especifique a imagem que quer usar. Em seguida, inicie uma atualização gradual para atualizar todas as instâncias gerenciadas para usar esse modelo. Para mais informações, consulte Como reverter uma atualização.

Exemplo

Este exemplo abrange as seguintes tarefas:

  1. Criar um modelo de instância para atualizações fáceis de imagem do SO:
  2. Criar um MIG com base no modelo.
  3. Configurar uma verificação de integridade para limitar a interrupção por uma atualização de imagem.
  4. Adicionar uma nova imagem a uma família de imagens.
  5. Invocar uma atualização do SO com um único comando.
  6. Monitorar a atualização.

Siga as etapas abaixo para ativar e executar upgrades de sistema operacional com apenas um clique em um MIG:

  1. Criar um modelo de instância que especifique uma família de imagens personalizada. A família de imagens deve conter imagens testadas e confiáveis. Cada VM que o MIG cria a partir do modelo usa a imagem mais recente disponível dessa família.

    gcloud compute instance-templates create example-template \
        --machine-type n1-standard-4 \
        --image-family my-image-family \
        --image-project my-project \
        --tags=http-server
    
  2. Crie um MIG com base no modelo da instância. Este exemplo inicia o MIG com três instâncias baseadas em example-template. Como o modelo de instância especifica uma família de imagens, o MIG cria cada VM com a imagem mais recente da família.

    gcloud compute instance-groups managed create example-group \
      --base-instance-name example \
      --size 3 \
      --zone us-east1-b \
      --template example-template
    
  3. Opcional: configure e ative uma verificação de integridade baseada em aplicativo. Se o app não responder após uma atualização de imagem, será possível usar o status da verificação de integridade combinado com a configuração maxUnavailable para interromper o lançamento do MIG.

    1. Crie uma verificação de integridade que procure uma resposta HTTP 200 no caminho da solicitação /health. O app do GitHub que está em cada instância exibe esse caminho.

      gcloud compute health-checks create http example-autohealer-check \
          --check-interval 10 \
          --timeout 5 \
          --healthy-threshold 2 \
          --unhealthy-threshold 3 \
          --request-path "/health"
      
    2. Crie uma regra de firewall para permitir que as sondagens do verificador de integridade acessem as instâncias. As sondagens do verificador de integridade são provenientes de endereços nos intervalos: 130.211.0.0/22 e 35.191.0.0/16

      gcloud compute firewall-rules create default-allow-http-health-check \
          --network default \
          --allow tcp:80 \
          --source-ranges 130.211.0.0/22,35.191.0.0/16
      
    3. Adicione a verificação de integridade ao seu MIG.

      gcloud compute instance-groups managed update example-group \
          --zone us-east1-b --health-check example-autohealer-check
      
  4. Quando uma atualização estiver disponível, testada e determinada como compatível com seu app, crie uma nova imagem e use a sinalização --family para incluir essa imagem na família de imagens personalizada.

    gcloud compute images my-image-v2 \
        --source-disk boot-disk-1 \
        --source-disk-zone us-central1-f \
        --family my-image-family

    Neste exemplo, a imagem mais recente em my-image-family agora é my-image-v2, que é baseada no disco de origem boot-disk-1.

  5. Invoque uma substituição gradual para substituir todas as VMs no MIG. O MIG substitui cada VM com base no modelo de instância do grupo. O modelo de instância especifica my-image-family. Portanto, cada VM recebe a imagem mais recente da família (my-image-v2).

    É possível configurar o nível de interrupção que a atualização causa. Neste exemplo, o MIG cria mais uma VM acima do tamanho de destino do grupo e não remove nenhuma VM existente até que uma VM esteja em execução.

    gcloud compute instance-groups managed rolling-action replace example-group \
        --max-surge 1 --max-unavailable 0
    
  6. Se você quiser monitorar o status das atualizações, use o comando wait-until com a sinalização --version-target-reached. O comando é retornado quando o grupo é atualizado.

    gcloud compute instance-groups managed wait-until --version-target-reached example-group \
        --zone us-east1-
    Waiting for group to reach version target
    ...
    Version target is reached
    

    Também é possível usar o comando list-instances para ver o status, o estado de integridade, as ações atuais, o modelo da instância e a versão para cada VM.

    gcloud compute instance-groups managed list-instances example-group \
        --zone us-east1-b
    
    
    NAME       ZONE        STATUS   HEALTH_STATE  ACTION     INSTANCE_TEMPLATE  VERSION_NAME                        LAST_ERROR
    test-211p  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-30 13:34:28.843377+00:00
    test-t5qb  us-east1-b  RUNNING  UNKNOWN       VERIFYING  example-template   0/2020-01-30 13:34:28.843377+00:00
    test-x331  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-20 20:39:51.819399+00:00
    
  7. Se você precisar reverter para uma imagem anterior, siga as etapas abaixo:

    1. Crie um novo modelo de instância que especifique a imagem que você quer.
    2. Inicie uma atualização gradual para aplicar o modelo de instância.

A seguir