Se você tiver um aplicativo com estado em instâncias autônomas (não gerenciadas) de máquinas virtuais (VM) do Compute Engine, poderá migrar esse aplicativo para um grupo de instâncias gerenciadas (MIG) com estado .
Ao configurar um MIG com estado e usar instâncias gerenciadas, você pode obter os seguintes benefícios:
- Estado preservado: preservação de nomes de instâncias, discos e metadados mesmo se uma instância for 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 otimizadas de novas configurações de instância ou versões de software em VMs em um MIG.
Limitações
- Você deve parar suas VMs existentes para migrar seus discos existentes ou, alternativamente, para tirar instantâneos consistentes para uso pelas novas instâncias gerenciadas.
- Você deverá excluir as VMs existentes se quiser reutilizar seus nomes de VM.
- Seu aplicativo deve ser capaz de ser executado em VMs com o mesmo tipo de máquina. Se o seu aplicativo existente exigir diversas 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 deve ser iniciado quando a VM for iniciada. Você pode usar uma imagem personalizada ou um script de inicialização. Cada opção é discutida abaixo.
- Você não pode atualizar o sistema operacional ou o software implementando atualizações de imagem de inicialização em um MIG se optar por criar discos de inicialização com estado.
- Você pode obter alta disponibilidade em várias zonas apenas criando réplicas redundantes em diversas zonas e configurando a replicação de dados em nível de aplicativo. O MIG com estado recupera automaticamente instâncias somente dentro da mesma zona e não orquestra o failover entre zonas.
- Você não pode usar o escalonamento automático com um MIG com estado.
- Revise as limitações do MIG com estado.
Custos
Este tutorial usa componentes faturáveis de Google Cloud incluindo:- Mecanismo de computação
Use a calculadora de preços para gerar uma estimativa de custo com base no uso projetado.
Antes de começar
Este guia usa a CLI gcloud. Você pode acessar esta ferramenta usando Cloud Shell . Ou, se você quiser executar a CLI gcloud em seu computador local, faça download e instale a CLI gcloud mais recente .
Visão geral da migração
- Entenda os componentes que compõem um MIG com estado.
- Revise sua configuração existente para determinar especificações comuns de VM.
- Opcionalmente, crie uma imagem personalizada para servir como imagem de disco de inicialização comum.
- Crie um modelo de instância para especificar a configuração comum de VM para o MIG.
- Crie um MIG vazio.
- Converta suas VMs existentes em instâncias gerenciadas no MIG, incluindo configurações por instância.
- Configure a recuperação automática do MIG para melhorar a resiliência do seu aplicativo.
- Opcionalmente, para reduzir a sobrecarga de configuração, substitua as configurações por instância por uma política com estado.
Componentes
Você configura as instâncias gerenciadas do seu MIG com estado por meio de vários componentes:
- Um modelo de instância contém configuração comum para VMs no MIG, incluindo tipo de máquina, imagem de disco de inicialização, especificações opcionais para discos adicionais e um script de inicialização opcional.
- Uma imagem personalizada opcional contém seu aplicativo e serve como uma imagem de disco de inicialização comum.
- Uma configuração por instância contém itens com estado específicos da instância. Por exemplo, você pode anexar um disco existente a uma instância específica do grupo. Este disco pode ser desanexado de uma instância autônoma existente, recuperado de um instantâneo 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 com estado comuns. Por exemplo, ele define todos os discos com um nome de dispositivo específico (conforme definido no modelo de instância) como com monitoração de estado para todas as instâncias do grupo.
Quais componentes você precisa usar?
Os componentes que você precisa usar dependem da configuração existente. A tabela a seguir fornece um resumo de alto nível de algumas configurações possíveis para um aplicativo executado em uma ou diversas instâncias. Posteriormente neste tutorial, você revisará sua configuração existente para determinar quais dessas configurações você precisa usar.
Você tem algum dado ou configuração com estado em seus discos de inicialização que precisa manter? | Como seu aplicativo é iniciado? | |
---|---|---|
O aplicativo está configurado em um disco de inicialização existente | O aplicativo está configurado com um script de inicialização | |
Não: os discos de inicialização não têm estado |
|
|
Sim: pelo menos um disco de inicialização tem estado |
|
|
Revise sua configuração existente
Revise suas instâncias autônomas existentes para inspecionar o tipo de máquina, os discos e os metadados de cada instância.
Use o comando instances describe
para cada uma de suas instâncias.
gcloud compute instances describe INSTANCE_NAME
Responda às seguintes perguntas para se preparar para as etapas subsequentes deste guia.
Questões | Implicações |
---|---|
Propriedades da VM | |
Qual é o tipo de máquina que você deseja usar para o seu grupo? | Especifique esse tipo de máquina no modelo de instância do seu MIG. |
Como seu aplicativo é iniciado: ele é pré-configurado em um disco de inicialização ou é instalado, configurado e iniciado por um script de inicialização? | Se seu aplicativo estiver pré-configurado em um disco de inicialização, crie uma imagem personalizada e especifique essa imagem no modelo de instância do seu MIG. Se o seu aplicativo for iniciado por um script de inicialização, especifique esse script de inicialização no modelo de instância do seu MIG. Se o seu aplicativo exigir uma imagem de disco de inicialização personalizada e um script de inicialização, especifique ambos no modelo de instância. |
Você deseja preservar os nomes das instâncias existentes? | Você deve excluir as instâncias autônomas existentes para liberar os nomes das instâncias. Se seus discos de inicialização permanecerem sem estado e você quiser usar atualizações contínuas automatizadas em seu MIG, revise a documentação em Preservando 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. |
Seus discos de inicialização estão com estado? Em outras palavras, há algum dado em algum disco de inicialização cujo estado você deva preservar? | Se você precisar preservar o estado dos seus discos de inicialização, não poderá atualizar o sistema operacional ou o software implementando atualizações de imagem de disco de inicialização. |
Todas as instâncias possuem os mesmos tipos de discos? Por exemplo, todos eles possuem um disco de dados? Ou eles possuem e exigem configurações de disco exclusivas? | Se todas as instâncias tiverem uma configuração de disco comum, defina esses nomes de dispositivos comuns em seu modelo de instância – por exemplo, `data-disk`. Isso permite que você use uma política com estado para declarar esses discos como com estado em seu MIG, com menos sobrecarga do que as configurações por instância. |
Se você aumentasse o grupo, o tamanho dos discos atuais seria suficiente? | Especifique os tamanhos de disco necessários em seu modelo de instância. As novas instâncias receberão os discos que você especificar, desde que esses discos não sejam redefinidos em uma política com estado ou em configurações por instância. |
Este guia começa criando configurações por instância para discos com estado existentes. Mas você pode converter essas configurações em uma política com estado posteriormente, desde que os discos tenham nomes de dispositivos comuns declarados no modelo de instância do grupo.
Exemplo de configuração
Este guia usa 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. Suponha 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 possui o mesmo aplicativo, que é configurado no disco de inicialização para iniciar quando a VM for iniciada.
- O disco de inicialização de cada VM não contém nenhum outro dado ou configuração que você deva preservar.
- Cada VM possui um disco permanente secundário com dados com estado, ou seja, dados para os quais você deve manter o estado atual.
Edite os valores abaixo para uso ao longo deste tutorial.
- Machine type: n2-standard-2 - Project: my-project - Zone: europe-west1-c - Name of one of the VMs to migrate: my-instance-1
Crie uma imagem personalizada
Se o seu aplicativo ou algum de seus requisitos já estiver configurado em um disco de inicialização existente, crie uma imagem personalizada que possa ser reutilizada. Como alternativa, se seu aplicativo estiver instalado, configurado e iniciado somente usando um script de inicialização, ignore 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 existente contém o aplicativo configurado. Assim, você pode seguir as etapas para criar uma imagem personalizada com base em qualquer uma dessas VMs.
Pare uma das instâncias.
gcloud compute instances stop my-instance-1
Determine a origem do disco descrevendo a instância.
gcloud compute instances describe my-instance-1
A saída é semelhante à seguinte:
... 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.Use o comando
images create
para preparar uma imagem personalizada que use a mesma origem.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 saída é semelhante à seguinte:
Created [https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image].
Crie 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, você não poderá atualizá-lo. Se precisar alterá-lo posteriormente, crie um novo modelo e distribua-o para o grupo.
Siga as etapas em Criando 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 existentes.
Script de inicialização : se você iniciar seu aplicativo usando um script de inicialização, especifique esse script.
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 existente, especifique-a. Se precisar usar um disco de inicialização existente para uma VM específica, você poderá especificar explicitamente o disco de inicialização para essa VM com uma configuração por instância, ao converter essa VM 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 configurar uma única política com estado para preservar todos os discos no MIG com esse nome de dispositivo. - Tamanho : Especifique um tamanho de disco de inicialização que seja suficiente para instâncias existentes, bem como para instâncias futuras, caso queira adicionar alguma.
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 oferece suporte à configuração de discos regionais, mas você pode configurar discos regionais 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 alguma.
- Nome do dispositivo : para cada disco, especifique um nome de dispositivo que reflita a finalidade do disco – por exemplo,
Para efeitos desta migração, a especificação mais importante para cada disco adicional é o nome do dispositivo, que você usará como chave para especificar quais discos têm 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 discos adicionais no modelo de instância será usada apenas para criar novos discos para novas instâncias que você possa criar além daquelas que você está migrando. Ao migrar instâncias existentes, você preservará os discos de dados existentes, desanexando-os das instâncias originais e, em seguida, reanexando esses 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 um sinalizador --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 saída é semelhante à seguinte:
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
Observe o URL do modelo, que você pode encontrar na primeira linha da saída.
Crie um grupo gerenciado de instâncias
A próxima etapa é criar um grupo gerenciado de instâncias (MIG). Para criar um MIG de zona única, siga as instruções em Criar um MIG em uma zona única . Ou, se você quiser se proteger contra falhas zonais usando um MIG regional, siga as instruções para Criar um MIG com VMs em diversas zonas de uma região .
Ao criar seu MIG, inclua as seguintes especificações:
- Defina o tamanho do grupo como
0
. Você adicionará instâncias 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 seguinte comando instance-groups managed create
cria um MIG zonal para o exemplo de configuração descrito 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 saída é semelhante à seguinte:
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, você poderá usá-lo para interagir com o MIG, por exemplo, para definir políticas no grupo e para adicionar ou remover instâncias do grupo.
Converta VMs existentes em instâncias gerenciadas
Para cada uma das suas VMs não gerenciadas existentes, use o procedimento a seguir para transformá-las em uma instância gerenciada no seu MIG. Este procedimento migra os discos existentes para as novas instâncias gerenciadas. Como alternativa, você pode criar instantâneos de discos existentes e, em seguida, criar discos com base nesses instantâneos para uso pelas instâncias gerenciadas.
Descreva a VM existente.
gcloud compute instances describe my-instance-1
Anote os itens que você deseja preservar da VM existente, que podem incluir o seguinte:
- Nome da instância
- Disco de inicialização
- Discos secundários
- Metadados da instância
Pare a VM existente.
gcloud compute instances stop my-instance-1
Desanexe todos os discos com estado, incluindo o disco de inicialização, se você planeja reutilizá-lo.
gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
Exclua a VM existente para poder criar outra com o mesmo nome. Se não quiser preservar os nomes das instâncias, você poderá excluir a VM existente posteriormente para parar de pagar por ela.
gcloud compute instances delete my-instance-1
Siga as etapas para criar uma instância gerenciada .
- Você poderá reutilizar o nome da instância original se tiver excluído a instância original. Ou forneça um novo nome.
Especifique discos ou metadados com estado exigidos por esta instância gerenciada. O MIG armazena estes 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 os 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 um sinalizador
--stateful-disk
adicional. Use o mesmo nome de dispositivo para o disco de inicialização especificado 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
Repita as etapas para cada uma das VMs não gerenciadas existentes.
Se desejar visualizar as configurações resultantes por instância, execute o comando instance-configs list
.
gcloud compute instance-groups managed instance-configs list my-mig \ --zone=europe-west1-c
Para visualizar 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 obter mais informações, consulte Aplicando, visualizando e removendo configurações com estado em MIGs .
Configurando a recuperação automática
Os MIGs curam automaticamente as instâncias gerenciadas que param de funcionar. Para melhorar ainda mais a disponibilidade do seu aplicativo e verificar se ele está respondendo, configure uma verificação de integridade e uma recuperação automática baseadas no aplicativo . Consulte o exemplo de configuração de verificação de integridade para exemplos de comandos.
Usando uma política com estado em vez de configurações por instância
Uma política com estado permite declarar discos que possuem um nome de dispositivo comum como com estado no MIG. Uma única política com estado dá menos trabalho para gerenciar do que várias configurações por instância. Por exemplo, com uma política com estado, você pode designar todos os discos com nome de dispositivo data-disk
para terem estado para todas as instâncias no MIG.
Se o seu MIG atender às seguintes condições, você poderá substituir 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. Este nome de dispositivo é definido no modelo de instância do MIG. - Nenhuma VM possui 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 deverá manter a configuração por instância para manter os metadados com estado específicos da instância.
Use as etapas a seguir para substituir várias configurações por instância por uma única política com estado.
Configure discos com estado em uma política com estado. Siga as instruções em Definindo e atualizando a configuração com estado para discos em um MIG existente .
Para o cenário de exemplo, use o comando a seguir. Declara que todos os discos do MIG que possuem 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
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 o sinalizador
--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
(Opcional.) Verifique se os itens com estado agora estão armazenados no estado preservado da política (
preservedStateFromPolicy
) para cada instância gerenciada. Para obter mais informações, consulte Visualizando os estados preservados de instâncias gerenciadas .
Adicionando mais VMs
Se precisar adicionar VMs para expandir seu aplicativo, você poderá adicionar VMs extras aumentando o tamanho do seu MIG ou criando manualmente mais instâncias. O MIG cria todas as suas 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 para todas as instâncias novas e existentes no grupo. Se você precisar configurar discos com estado ou metadados apenas para VMs específicas em seu grupo, use configurações por instância .
O que vem a seguir
- Saiba mais sobre como trabalhar com instâncias gerenciadas .
- Saiba como funcionam os MIGs com estado .