Migrar uma carga de trabalho atual para um grupo gerenciado de instâncias com estado


Se você tiver um aplicativo com estado atual em instâncias autônomas (não gerenciadas) de máquina virtual (VM, na sigla em inglês) do Compute Engine, será possível migrá-lo para um grupo gerenciado de instâncias (MIG, na sigla em inglês) com estado.

Ao configurar um MIG com estado e usar instâncias gerenciadas, você pode ter os benefícios a seguir:

  • Estado preservado: preservação de nomes de instâncias, discos e metadados, mesmo que uma instância seja recriada.
  • Recuperação automática: recriação automática de VMs com cargas de trabalho com falha na mesma zona.
  • Atualizações automatizadas: implantações normais de novas configurações de instância ou versões de software para VMs em um MIG.

Limitações

  • É necessário interromper as VMs atuais para migrar os discos atuais ou como alternativa, tirar snapshots consistentes para uso pelas novas instâncias gerenciadas.
  • Você precisará excluir as VMs atuais se quiser reutilizar os nomes de VM.
  • Seu aplicativo precisa ser capaz de executar em VMs com o mesmo tipo de máquina. Se o aplicativo atual exigir várias instâncias de diferentes tipos de máquina, crie vários modelos de instância e MIGs, um por tipo de máquina.
  • Seu aplicativo precisa ser iniciado quando a VM é iniciada. É possível usar uma imagem personalizada ou um script de inicialização. Cada opção é discutida abaixo.
  • Não é possível atualizar o sistema operacional ou o software lançando atualizações de imagens de inicialização em um MIG se você optar por criar discos de inicialização com estado.
  • É possível conseguir alta disponibilidade em várias zonas somente criando réplicas redundantes em várias zonas e configurando a replicação de dados em nível de aplicativo. O MIG com estado recupera automaticamente as instâncias dentro da mesma zona e não orquestra o failover entre zonas.
  • Não é possível usar o escalonamento automático em um MIG com estado.
  • Analise as limitações de MIG com estado.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, como estes:

  • Compute Engine

Use a calculadora de preços para gerar uma estimativa de custos baseada na projeção de uso.

Antes de começar

Este guia usa a CLI gcloud. É possível acessar essa ferramenta usando o Cloud Shell. Se preferir executar a CLI gcloud no computador local, faça o download e instale a CLI gcloud mais recente.

Visão geral da migração

  1. Entenda os componentes que compõem um MIG com estado.
  2. Revise sua configuração atual para determinar especificações comuns de VM.
  3. Como opção, crie uma imagem personalizada para servir como uma imagem de disco de inicialização comum.
  4. Crie um modelo de instância para especificar a configuração de VM comum para o MIG.
  5. Crie um MIG vazio.
  6. Converta as VMs atuais em instâncias gerenciadas no MIG, incluindo as configurações por instância.
  7. Configure a recuperação automática do MIG para melhorar a resiliência do aplicativo.
  8. Opcionalmente, para reduzir a sobrecarga de configuração, substitua as configurações por instância por uma política com estado.

Componentes

Configure as instâncias gerenciadas do MIG com estado por meio de vários componentes:

  • Um modelo de instância contém uma configuração comum para VMs no MIG, incluindo tipo de máquina, imagem do disco de inicialização, especificações opcionais para outros discos e um script de inicialização opcional.
  • Uma imagem personalizada opcional contém seu aplicativo e serve como uma imagem do disco de inicialização comum.
  • Uma configuração por instância contém itens com estado específicos da instância. Por exemplo, é possível anexar um disco atual a uma instância específica no grupo. Esse disco pode ser removido de uma instância autônoma atual, recuperada de um snapshot ou de um disco regional. O nome do dispositivo do disco não precisa ser definido no modelo de instância.
  • Uma política com estado opcional contém itens comuns com estado. Por exemplo, ele define todos os discos com um nome de dispositivo específico (como definido no modelo de instância) como com estado para todas as instâncias no grupo.

Quais componentes você precisa usar?

Os componentes necessários dependem da configuração atual. A tabela a seguir fornece um resumo detalhado de algumas configurações possíveis para um aplicativo executado em uma ou várias instâncias. Mais adiante neste tutorial, você analisará sua configuração atual para determinar qual dessas configurações será necessária.

Você tem algum dado ou configuração com estado nos discos de inicialização que precisa manter? Como iniciar o aplicativo?
O aplicativo está configurado em um disco de inicialização atual O aplicativo está configurado com um script de inicialização
Não: os discos de inicialização são sem estado
  1. Usar um modelo de instância com uma imagem personalizada
  2. Adicionar configurações por instância (ou uma política com estado) para discos de dados com estado
  1. Usar um modelo de instância com um script de inicialização
  2. Adicionar configurações por instância (ou uma política com estado) para discos de dados com estado
Sim: pelo menos um disco de inicialização com estado
  1. Usar um modelo de instância com uma imagem personalizada
  2. Adicionar configurações por instância (ou uma política com estado) para a inicialização com estado e discos de dados
  1. Usar um modelo de instância com um script de inicialização
  2. Adicionar configurações por instância (ou uma política com estado) para a inicialização com estado e discos de dados

Analisar a configuração atual

Revisar as instâncias independentes atuais para inspecionar o tipo de máquina, os discos e os metadados de cada uma delas.

Use o comando instances describe para cada uma das instâncias.

gcloud compute instances describe INSTANCE_NAME

Responda às perguntas a seguir para se preparar para as etapas seguintes deste guia.

Perguntas Implicações
Propriedades da VM
Qual é o tipo de máquina que você quer usar no seu grupo? Especifique esse tipo de máquina no modelo de instância do MIG.
Como o aplicativo é iniciado: ele está pré-configurado em um disco de inicialização ou está instalado, configurado e iniciado por um script de inicialização? Se o aplicativo estiver pré-configurado em um disco de inicialização, crie uma imagem personalizada e especifique-a no modelo de instância do MIG.

Se o aplicativo for iniciado por um script de inicialização, especifique esse script de inicialização no modelo de instância do MIG.

Se o aplicativo exigir uma imagem de disco de inicialização personalizada e um script de inicialização, especifique ambos no modelo de instância.
Você quer preservar os nomes das instâncias existentes? Exclua as instâncias independentes para liberar os nomes delas.

Se os discos de inicialização permanecerem sem estado e você quiser usar atualizações graduais automatizadas no MIG, leia a documentação sobre como preservar nomes de instâncias.
Itens com estado
Para cada instância, há algum metadado específico da instância que você precisa preservar? Especifique metadados específicos da instância usando configurações por instância.
Os discos de inicialização são com estado? Em outras palavras, há dados que residem em qualquer disco de inicialização que precisam ser preservados? Se for necessário preservar o estado dos discos de inicialização, não será possível atualizar o sistema operacional ou o software lançando atualizações de imagens do disco de inicialização.
Todas as instâncias têm os mesmos tipos de discos? Por exemplo, todas elas têm um disco de dados? Ou elas têm e exigem configurações de disco exclusivas? Se todas as instâncias tiverem uma configuração de disco comum, defina esses nomes de dispositivo comuns no modelo de instância, por exemplo, "disco de dados". Isso permite que você use uma política com estado para declarar esses discos como sendo com estado no MIG, com menos sobrecarga do que as configurações por instância.
Se você ampliar o grupo, o tamanho dos discos atuais será suficiente? Especifique os tamanhos de disco necessários no modelo de instância. As novas instâncias receberão os discos que você especificar, desde que eles não sejam redefinidos em uma política com estado ou nas configurações por instância.

Este guia começa criando configurações por instância para discos com estado atuais. No entanto, é possível converter essas configurações em uma política com estado posteriormente, desde que os discos tenham nomes de dispositivos comuns que você declare no modelo de instância do grupo.

Exemplo de configuração

Neste guia, usamos o exemplo básico a seguir para ilustrar as etapas de migração. Suponha que você tenha um aplicativo com estado em execução em três VMs autônomas do Compute Engine. Considere as seguintes especificações de VM:

  • Cada VM tem o mesmo tipo de máquina.
  • Cada VM existe no mesmo projeto e zona.
  • O disco de inicialização de cada VM tem o mesmo aplicativo, que é configurado no disco de inicialização para iniciar quando a VM é iniciada.
  • O disco de inicialização de cada VM não contém outros dados ou configurações que você precisa preservar.
  • Cada VM tem um disco permanente secundário com dados com estado, ou seja, dados para os quais você precisa manter o estado atual.

Edite os valores abaixo para usar neste tutorial.

- Machine type: n2-standard-2
- Project: my-project
- Zone: europe-west1-c
- Name of one of the VMs to migrate: my-instance-1

Criar uma imagem personalizada

Se o aplicativo ou qualquer um dos requisitos dele já estiver configurado em um disco de inicialização, crie uma imagem personalizada que possa ser reutilizada. Como alternativa, se o aplicativo estiver instalado, configurado e iniciado apenas usando um script de inicialização, pule esta etapa e prossiga para Criar um modelo de instância.

No cenário de exemplo discutido anteriormente, o disco de inicialização de cada VM independente atual contém o aplicativo configurado. Siga as etapas para criar uma imagem personalizada com base em qualquer uma dessas VMs.

  1. Interrompa uma das instâncias.

    gcloud compute instances stop my-instance-1
  2. Determine a origem do disco descrevendo a instância.

    gcloud compute instances describe my-instance-1

    A resposta será semelhante a:

    ...
    disks:
    – autoDelete: true
      boot: true
      ...
      source: https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
      ...
    

    Localize o campo source na saída e anote o URL completo do disco de inicialização nesse campo.

  3. Use o comando images create para preparar uma imagem personalizada que usa a mesma fonte.

    gcloud compute images create my-boot-image \
        --source-disk=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
    

    A resposta será semelhante a:

    Created [https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image].
    

Criar um modelo de instância

Um modelo de instância é um recurso imutável do Compute Engine que armazena a configuração da VM. Depois de criar um modelo, não é possível atualizá-lo. Se você precisar mudá-lo depois, crie um novo modelo e implemente-o no grupo.

Siga as etapas em Como criar um novo modelo de instância, usando as configurações a seguir.

  • Tipo de máquina: especifique um tipo de máquina que funcione para todas as instâncias atuais.

  • Script de inicialização: se você iniciar o aplicativo usando um script de inicialização, especifique-o.

  • Disco de inicialização:

    • Imagem: especifique uma imagem de disco de inicialização comum para todas as VMs no MIG. Por exemplo, se você criou uma imagem personalizada com base no disco de inicialização de uma VM atual, especifique-a. Se você precisar usar um disco de inicialização atual para uma VM específica, poderá especificar explicitamente o disco de inicialização dessa VM com uma configuração por instância ao convertê-la em uma instância gerenciada, conforme explicado posteriormente neste documento.
    • Nome do dispositivo: especifique um nome de dispositivo que reflita a finalidade do disco, por exemplo, boot-disk. Isso permite que você configure uma única política com estado para preservar todos os discos no MIG com esse nome de dispositivo.
    • Tamanho: especifique um tamanho do disco de inicialização que seja suficiente para instâncias existentes e futuras, caso você queira adicionar qualquer uma delas.
  • Discos adicionais: por padrão, quando você adiciona instâncias ao MIG, o MIG cria discos com base no modelo. Observe que um modelo de instância não é compatível com a configuração de discos regionais, mas é possível configurá-los posteriormente usando configurações por instância.

    • Nome do dispositivo: para cada disco, especifique um nome de dispositivo que reflita a finalidade do disco, por exemplo, data-disk.
    • Tamanho: especifique um tamanho de disco que seja suficiente para instâncias futuras, caso você adicione algum.

Para esta migração, a especificação mais importante para cada disco extra é o nome do dispositivo, que você usará como chave para especificar quais discos são com estado. Ter um nome de dispositivo comum para discos semelhantes permite usar uma política com estado comum para preservar todos esses discos no MIG. A especificação de tamanho ou imagem para outros discos no modelo de instância será usada apenas para criar novos discos para novas instâncias que possam ser criadas além daquelas que estão sendo migradas. Ao migrar instâncias atuais, você preserva os discos de dados atuais removendo-os das instâncias originais e, em seguida, reenviando os mesmos discos às novas instâncias gerenciadas, conforme explicado posteriormente neste documento.

O comando instance-templates create a seguir cria um modelo para o cenário de exemplo. O comando inclui uma sinalização --image que aponta para a imagem de inicialização personalizada criada anteriormente, bem como um disco de dados adicional.

gcloud compute instance-templates create my-instance-template \
 --machine-type=n2-standard-2 \
 --image=https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image \
 --boot-disk-device-name=boot-disk \
 --create-disk=mode=rw,size=100,type=pd-standard,device-name=data-disk

A resposta será semelhante a:

Created [https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template].
NAME                     MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
my-instance-template  n2-standard-2               2021-04-27T11:02:07.552-07:00

Anote o URL do modelo, que pode ser encontrado na primeira linha da saída.

Criar um grupo de instâncias gerenciadas

A próxima etapa é criar um grupo gerenciado de instâncias (MIG). Para criar um MIG de zona única, siga as instruções para Criar um MIG em uma única zona. Ou, se você quiser se proteger contra falhas zonais usando um MIG regional, siga as instruções em Criar um MIG com VMs em várias zonas em uma região.

Ao criar seu MIG, inclua as seguintes especificações:

  • Defina o tamanho do grupo como 0. As instâncias serão adicionadas mais tarde.
  • Se você estiver criando um MIG regional, defina o tipo de redistribuição de instância como NONE para que o MIG não redistribua automaticamente as instâncias entre zonas.

O comando instance-groups managed create a seguir cria um MIG zonal para a configuração de exemplo descrita anteriormente. Para criar um MIG regional, substitua --zone=ZONE por --region=REGION.

gcloud compute instance-groups managed create my-mig \
    --size=0 \
    --template=https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template \
    --zone=europe-west1-c

A resposta será semelhante a:

Created [https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/instanceGroupManagers/my-mig].
NAME    LOCATION        SCOPE  BASE_INSTANCE_NAME  SIZE  TARGET_SIZE  INSTANCE_TEMPLATE         AUTOSCALED
my-mig  europe-west1-c  zone   my-mig              0     0            my-instance-template      no

Depois de criar esse recurso, é possível usá-lo para interagir com o MIG, por exemplo, para definir políticas no grupo e adicionar ou remover instâncias do grupo.

Converter VMs atuais em instâncias gerenciadas

Para cada uma das suas VMs não gerenciadas atuais, use o procedimento a seguir para transformá-lo em uma instância gerenciada no seu MIG. Este procedimento migra os discos atuais para as novas instâncias gerenciadas. Como alternativa, é possível criar snapshots de discos atuais e, em seguida, criar discos com base nesses snapshots para uso pelas instâncias gerenciadas.

  1. Descreve a VM atual.

    gcloud compute instances describe my-instance-1
    

    Anote os itens que você quer preservar da VM atual, o que pode incluir o seguinte:

    • Nome da instância
    • Disco de inicialização
    • Discos secundários
    • Metadados de instância
  2. Pare a VM atual.

    gcloud compute instances stop my-instance-1
    
  3. Remova todos os discos com estado, incluindo o de inicialização, se você pretende reutilizá-los.

    gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
    
  4. Exclua a VM atual para criar outra com o mesmo nome. Se você não quiser preservar os nomes das instâncias, exclua a VM atual mais tarde para parar de pagar por ela.

    gcloud compute instances delete my-instance-1
    
  5. Siga as etapas para criar uma instância gerenciada.

    • É possível reutilizar o nome da instância original se você a tiver excluído. Ou forneça um novo nome.
    • Especifique discos ou metadados com estado que essa instância gerenciada exige. O MIG armazena esses itens específicos da instância em uma configuração por instância:

      • Especifique um ou mais discos, como discos que foram desanexados da instância de VM original.

      • Especifique metadados da instância de VM original.

    Por exemplo, o comando a seguir cria uma instância gerenciada com o mesmo nome da VM original e reutiliza o disco de dados original. O disco de inicialização da VM é criado a partir da imagem especificada no modelo de instância do grupo.

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1    \
        --stateful-metadata=role=primary      \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --zone=europe-west1-c
    

    Se você precisar reutilizar um disco de inicialização de uma VM antiga, use o mesmo comando com uma sinalização --stateful-disk extra. Use o mesmo nome de dispositivo no disco de inicialização que você especificou no modelo de instância, por exemplo:

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1 \
        --stateful-metadata=role=secondary    \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --stateful-disk=device-name=boot-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1-boot-disk \
        --zone=europe-west1-c
    
  6. Repita as etapas para cada uma das VMs não gerenciadas atuais.

Se você quiser visualizar as configurações por instância resultantes, execute o comando instance-configs list.

gcloud compute instance-groups managed instance-configs list my-mig \
    --zone=europe-west1-c

Para ver o estado preservado de uma instância, execute o comando describe-instance.

gcloud compute instance-groups managed describe-instance my-mig \
  --instance=my-instance-1 \
  --zone=europe-west1-c

Para mais informações, consulte Como aplicar, visualizar e remover configurações com estado em MIGs.

Como configurar a recuperação automática

Os MIGs recuperam automaticamente as instâncias gerenciadas que deixam de ser executadas. Para melhorar ainda mais a disponibilidade do aplicativo e verificar se ele está respondendo, configure uma verificação de integridade baseada em aplicativo. Veja o exemplo de configuração de verificação de integridade para comandos de amostra.

Como usar uma política com estado em vez de configurações por instância

Uma política com estado permite que você declare discos com um nome de dispositivo comum como com estado no MIG. Uma única política com estado requer menos trabalho para gerenciar do que várias configurações por instância. Por exemplo, com uma política com estado, é possível designar todos os discos com o nome de dispositivo data-disk como com estado para todas as instâncias no MIG.

Se o MIG atender às condições a seguir, substitua as configurações por instância por uma política com estado:

  • Todas as VMs têm o mesmo nome de dispositivo (por exemplo, data-disk) para discos com estado semelhantes. Esse nome de dispositivo é definido no modelo de instância do MIG.
  • Nenhuma VM tem metadados com estado exclusivos especificados em uma configuração por instância. Se você tiver metadados com estado definidos em uma configuração por instância, poderá remover o disco da configuração por instância, mas precisará manter a configuração por instância para manter essa instância de metadados com estado específicos.

Use as etapas a seguir para substituir várias configurações por instância por uma única política com estado.

  1. Configure discos com estado em uma política com estado. Siga as instruções em Como configurar e atualizar a configuração com estado para discos em um MIG atual.

    No cenário de exemplo, use o comando a seguir. Ele declara que todos os discos no MIG que têm um nome de dispositivo específico serão preservados.

    gcloud compute instance-groups managed update my-mig \
      --stateful-disk=device-name=data-disk,auto-delete=never
    
  2. Se você precisar preservar metadados específicos da instância, atualize a configuração por instância. Caso contrário, exclua a configuração por instância. Aplique a alteração de configuração imediatamente com a sinalização --update-instance. Por exemplo, para excluir a configuração por instância, use o seguinte comando:

    gcloud compute instance-groups managed instance-configs delete my-mig \
      --instances=my-instance-1 \
      --update-instance
    
  3. Opcional. Verifique se os itens com estado agora estão armazenados no estado preservado da política (preservedStateFromPolicy) para cada instância gerenciada. Para mais informações, consulte Como visualizar os estados preservados de instâncias gerenciadas.

Como adicionar mais VMs

Se você precisar adicionar VMs para expandir o aplicativo, poderá adicionar VMs extras aumentando o tamanho do MIG ou criando manualmente mais instâncias. O MIG cria todas as VMs, incluindo os discos permanentes, com base no modelo de instância do grupo. Se o grupo tiver uma política com estado, todos os itens listados na política com estado serão preservados nas operações de reinicialização, recriação, recuperação automática e atualização de todas as instâncias novas e atuais no grupo. Se você precisar configurar discos ou metadados com estado somente para VMs específicas no grupo, use configurações por instância.

A seguir