Realizar atualizações de imagens do SO com um clique em MIGs

Ao usar uma combinação de famílias de imagens personalizadas e atualizações contínuas, pode ativar atualizações de imagens do SO com um clique no seu grupo de instâncias gerido (MIG).

A utilização da atualização de imagem do SO de um clique oferece várias vantagens, incluindo:

  • Funciona com todos os tipos de máquinas de VMs e todos os tamanhos de grupos de instâncias.
  • Suporta imagens e contentores do Windows e Linux.
  • As instâncias são recriadas com base no respetivo modelo de instância atual ou, opcionalmente, com base num novo modelo, para que possa preservar os scripts de arranque personalizados e os metadados.
  • Funciona com MIGs com estado, para que possa preservar opcionalmente os dados em discos que não sejam de arranque.
  • A implementação de uma atualização para a nova versão do SO ocorre automaticamente, sem necessidade de introdução de dados adicionais pelo utilizador após o pedido inicial.
  • Suporta atualizações em lote com uma verificação de funcionamento opcional.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:
    1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

Como funciona a atualização de imagem do SO com um clique?

Quando invoca uma atualização, o MIG substitui os discos de arranque de todas as VMs no grupo pela versão da imagem do SO mais recente disponível da sua família de imagens personalizadas. O MIG preserva os metadados e os scripts de arranque que configurou no modelo de instância para cada VM no grupo. Os discos não de arranque são recriados com base na respetiva especificação no modelo de instância. Para obter informações sobre como preservar dados, consulte o artigo Configurar discos com estado em MIGs.

Para limitar a interrupção das aplicações, pode fazer atualizações em lotes, mantendo uma percentagem específica de VMs em execução durante a atualização. Para aumentar a fiabilidade, pode configurar uma verificação de estado baseada na aplicação para o seu MIG: o grupo aguarda uma resposta válida de uma aplicação em VMs atualizadas antes de avançar com outras atualizações para outras VMs.

Antes de começar

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

  • Certifique-se de que criou um modelo de instância que aponta para uma família de imagens. A Google recomenda que use famílias de imagens personalizadas para reduzir o risco de implementar uma versão de imagem incompatível com a sua aplicação. Pode garantir que apenas são implementadas versões de imagens compatíveis adicionando imagens à sua família de imagens personalizada apenas após os testes de compatibilidade com a sua aplicação.

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

    • Quando o MIG adiciona novas instâncias porque o utilizador ou o escalador automático do MIG aumentou o tamanho do MIG.
    • Quando o MIG recria uma instância, acionado manualmente ou pela autorreparação.
  • Teste a nova imagem com a sua app antes de a adicionar à família de imagens e implementá-la.

  • Opcionalmente, crie uma verificação de funcionamento baseada na aplicação para o seu MIG. Uma verificação de funcionamento baseada na aplicação verifica se a sua aplicação está a responder conforme esperado em cada uma das VMs no MIG. Pode configurar a atualização para permitir, no máximo, uma VM indisponível. Se uma aplicação não responder como esperado, o MIG marca essa VM como indisponível e a implementação não prossegue.

Realizar atualizações de imagens do SO com um clique para MIGs

Para atualizar todas as VMs num MIG para a imagem mais recente de uma família de imagens personalizadas, conclua os seguintes passos:

  1. Inicie uma substituição contínua com o seguinte comando.

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

    Substitua o seguinte:

    • instance-group-name: o nome do MIG no qual operar.
    • max-surge: o número máximo adicional de VMs que podem ser criadas temporariamente durante o processo de atualização. Pode ser um número fixo (por exemplo, 5) ou uma percentagem da dimensão 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 percentagem do tamanho do MIG (10%).

    Pode combinar verificações de funcionamento usando as opções --max-unavailable e --max-surge para parar atualizações adicionais se fizerem com que as VMs fiquem indisponíveis.

  2. Monitorize 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 o seguinte:

    • instance-group-name: o nome do MIG no qual operar.

    O comando é devolvido quando o grupo é atualizado.

    Também pode listar instâncias para ver o estado de cada instância.

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

    O comando devolve uma lista de instâncias e os respetivos detalhes, incluindo o estado, o estado de funcionamento e as ações atuais para cada MV. Quando todas as VMs estão RUNNING e não têm nenhuma ação atual, o MIG está atualizado e estável.

  3. Caso precise de reverter para uma imagem do SO anterior, tem de criar um modelo de instância e especificar a imagem que quer usar. Em seguida, inicie uma atualização contínua para atualizar todas as instâncias geridas de modo a usar esse modelo. Para mais informações, consulte Reverter uma atualização.

Exemplo

Este exemplo aborda as seguintes tarefas:

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

Siga estes passos para ativar e fazer atualizações do SO com um clique num MIG:

  1. Crie um modelo de instância que especifique uma família de imagens personalizada. A família de imagens deve conter imagens testadas e fidedignas. Cada VM que o MIG cria a partir do modelo usa a imagem mais recente disponível desta 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 de instância. Este exemplo inicia o MIG com três instâncias baseadas em example-template. Uma vez que 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 funcionamento baseada na aplicação. Se a sua app não responder após uma atualização de imagem, pode usar o estado da verificação de integridade combinado com a definição maxUnavailable para impedir implementações adicionais do MIG.

    1. Crie uma verificação de funcionamento que procure uma resposta HTTP 200 no caminho do pedido /health. A app GitHub que está em cada instância serve 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 sondas do verificador de funcionamento acedam às instâncias. As sondas do verificador de funcionamento provêm 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 funcionamento 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, for testada e for considerada compatível com a sua app, crie uma nova imagem e use a flag --family para incluir essa imagem na família de imagens personalizadas.

    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 se baseia no disco de origem boot-disk-1.

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

    Pode configurar o nível de interrupção que a atualização causa. Neste exemplo, o MIG cria uma VM adicional acima do tamanho pretendido do grupo e não remove nenhuma VM existente até que essa VM esteja em funcionamento.

    gcloud compute instance-groups managed rolling-action replace example-group \
        --max-surge 1 --max-unavailable 0
    
  6. Se quiser monitorizar o estado das atualizações, use o comando wait-until com a flag --version-target-reached. O comando é devolvido 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 pode usar o comando list-instances para ver o estado, estado de funcionamento, ações atuais, modelo de instância e versão de cada MV.

    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 precisar de reverter para uma imagem anterior, siga estes passos:

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

O que se segue?