Configurar discos persistentes com estado em MIGs


Configurar discos persistentes para serem com estado permite-lhe beneficiar da autorreparação de instâncias de VM e das atualizações automáticas, ao mesmo tempo que preserva o estado dos discos.

Pode configurar qualquer disco definido no modelo de instância para ser com estado para todas as instâncias num grupo de instâncias gerido (MIG) adicionando o nome do dispositivo desse disco à política com estado do MIG.

Também pode configurar discos persistentes com estado individualmente para instâncias num MIG definindo configurações por instância; estes discos não têm de ser definidos no modelo de instância.

Antes de começar

  • Reveja quando usar MIGs com estado e como funcionam os MIGs com estado.
  • 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:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    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.

    Terraform

    Para usar os exemplos do Terraform nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

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

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para mais informações, consulte Set up authentication for a local development environment.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud.

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

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Limitações

Um MIG com uma configuração com estado, ou seja, um MIG com estado, tem as seguintes limitações:

  • Não pode usar o dimensionamento automático se o MIG tiver uma configuração com estado.
  • Se quiser usar atualizações contínuas automáticas, tem de definir o método de substituição como RECREATE.
  • Para os MIGs regionais com estado, tem de desativar a redistribuição proativa (defina o tipo de redistribuição como NONE) para impedir a eliminação de instâncias com estado pela redistribuição automática entre zonas.
  • Se usar uma configuração de todas as instâncias para substituir as propriedades do modelo de instância, não pode especificar essas propriedades em nenhuma configuração por instância e, ao mesmo tempo, na configuração de todas as instâncias do grupo.

  • Um MIG regional com estado não orquestra automaticamente a comutação por falha entre zonas. Quando usa um MIG regional, pode tornar a sua aplicação com estado resiliente a falhas zonais implementando réplicas redundantes em várias zonas e contando com a funcionalidade de replicação de dados da sua aplicação.

Quando usar discos persistentes com estado

Use discos persistentes com estado para tirar partido da autorreparação da VM e das atualizações automáticas, preservando os dados nos discos. Para mais informações, consulte os exemplos de utilização de MIGs com estado.

Quando configura discos com estado, estes discos são preservados através da autorreparação, das atualizações e da recriação da instância da VM. No entanto, isto também significa que os discos com estado não podem ser recriados a partir da imagem original nem atualizados para uma nova imagem.

Como prática recomendada, sugerimos que mantenha os discos de arranque sem estado.

Manter o disco de arranque sem estado tem as seguintes vantagens:

  • Pode reparar um disco de arranque que foi danificado recriando-o a partir da respetiva imagem original. A autorreparação faz essas reparações automaticamente.
  • Pode atualizar um disco de arranque para a imagem mais recente com novas versões e patches de segurança.

Para mais informações, veja como a recuperação automática e a atualização processam o estado preservado.

Configurar discos persistentes com estado para todas as VMs num MIG

Configure qualquer disco definido num modelo de instância para ser com estado adicionando o nome do dispositivo desse disco à política com estado do MIG. O GIG trata os discos com esse nome de dispositivo como com estado para todas as instâncias de VMs existentes e futuras.

Configurar discos com estado na criação de MIGs

Consola

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Selecione o projeto e clique em Continuar.

  3. Clique em Criar grupo de instâncias.

  4. Selecione Novo grupo de instâncias geridas (com estado).

  5. Especifique um Nome para o grupo de instâncias.

  6. Selecione um modelo de instância. Se não estiverem disponíveis modelos, crie um modelo de instância.

  7. No campo Número de instâncias, especifique o número de instâncias para o grupo de instâncias.

  8. A secção Configuração com estado apresenta os discos especificados no modelo de instância. Clique num disco para editar a respetiva configuração com estado.

    1. Em Com estado, selecione Sim.
    2. No menu pendente Na eliminação permanente da instância, selecione a ação a realizar no disco com estado quando a instância de VM for eliminada. As opções disponíveis são:

      • Desanexar disco: (predefinição.) Nunca elimine o disco; desassocie o disco quando a VM for eliminada.
      • Eliminar disco: elimina o disco com estado quando a respetiva VM é eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância gerida é eliminada manualmente ou quando o tamanho do grupo é reduzido.
    3. Depois de concluir a configuração com estado, clique em Concluído.

  9. Clique em Criar.

gcloud

Para especificar que discos de um modelo de instância devem ter estado no momento da criação do MIG, use a flag --stateful-disk com o comando gcloud compute instance-groups managed create:

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

Substitua o seguinte:

  • INSTANCE_GROUP_NAME: o nome do grupo de instâncias gerido a criar.
  • INSTANCE_TEMPLATE: o nome do modelo de instância a usar quando criar instâncias.
  • SIZE: o número inicial de VMs de que precisa neste grupo.
  • DEVICE_NAME: o nome do dispositivo de um disco especificado no modelo de instância.
  • DELETE_RULE: um valor que determina o que deve acontecer a um disco com estado quando uma VM é eliminada. As opções disponíveis são:

    • never: (predefinição.) Nunca elimine o disco. Em vez disso, desassocie o disco quando a respetiva VM for eliminada.
    • on-permanent-instance-deletion: elimine o disco quando a respetiva instância de VM for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância gerida é eliminada manualmente ou quando o tamanho do grupo é reduzido.

    Independentemente do valor da regra de eliminação, os discos com estado são sempre preservados nas operações de autocorreção, atualização e recriação de VMs.

Exemplo

Quer implementar uma base de dados com 12 partições, cada uma com um disco de arranque sem estado que contenha o sistema operativo e os binários da base de dados, e cada uma com um disco de dados com estado. Siga os passos seguintes:

  1. Crie um modelo de instância com um disco de arranque sem estado com base na imagem img-example-db-v01, que tem um SO e uma base de dados pré-instalados, e com um disco de dados com estado:

    gcloud compute instance-templates create example-database-template-v01 \
        --image img-example-db-v01 \
        --create-disk device-name=data-disk,mode=rw,image=empty10GBext4
    

    A flag --create-disk indica ao MIG que:

    1. Crie um novo disco de 10 GB para cada instância de VM a partir de uma imagem ext4 vazia, preparada antecipadamente.
    2. Anexe o disco à respetiva VM no modo de leitura/escrita através do nome do dispositivo data-disk.
  2. Crie um MIG a partir do modelo de instância e defina o disco de dados como Stateful:

    gcloud compute instance-groups managed create example-database-group \
      --template example-database-template-v01 \
      --base-instance-name shard \
      --size 12 \
      --stateful-disk device-name=data-disk,auto-delete=on-permanent-instance-deletion
    

    O nome do dispositivo data-disk é retirado do modelo de instância. O disco de dados está configurado para ser eliminado juntamente com a instância de VM quando a VM é eliminada permanentemente (devido à eliminação manual da instância ou à diminuição manual do tamanho do grupo). O disco de dados é preservado na autorreparação, nas atualizações e na recriação da VM.

  3. Verifique se o disco de dados está configurado na política com estado:

    gcloud compute instance-groups managed describe example-database-group
    
    
    baseInstanceName: shard
    ...
    name: example-database-group
    ...
    statefulPolicy:
      preservedState:
        disks:
          data-disk:
            autoDelete: ON_PERMANENT_INSTANCE_DELETION
    ...
    

    Pode ver que a política com estado declara os discos com o nome do dispositivo data-disk como com estado, com uma regra para eliminar esses discos na eliminação permanente da VM.

Terraform

Se ainda não criou um modelo de instância, que especifica o tipo de máquina, a imagem do disco de arranque, a rede e outras propriedades da VM que quer para cada VM no MIG, crie um modelo de instância.

O exemplo seguinte cria um MIG zonal com um disco com estado. Para especificar que disco do modelo de instância deve ter estado no momento da criação do MIG, inclua o bloco stateful_disk. Para mais informações sobre o recurso usado no exemplo, consulte o recurso google_compute_instance_group_manager. Para criar um GIG regional, use o recurso google_compute_region_instance_group_manager.

resource "google_compute_instance_group_manager" "default" {
  name               = "example-database-group"
  base_instance_name = "shard"
  target_size        = 12
  zone               = "us-central1-f"
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  stateful_disk {
    device_name = "data-disk"
    delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

REST

Para especificar que discos do modelo de instância devem ter estado no momento da criação do MIG, inclua-os no campo statefulPolicy no corpo do pedido do instanceGroupManagers.insert método:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers

{
  "name": "NAME",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/TEMPLATE"
    }
  ],
  "targetSize": SIZE,
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

Substitua o seguinte:

  • PROJECT: o ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG a criar.
  • TEMPLATE: O nome do modelo de instância a usar quando criar instâncias.
  • SIZE: o número inicial de instâncias de que precisa neste grupo.
  • DEVICE_NAME: o nome do dispositivo de um disco especificado no modelo de instância.
  • DELETE_RULE: um valor que prescreve o que deve acontecer ao disco com estado quando a instância de VM é eliminada. As opções disponíveis são:

    • never: (predefinição.) Nunca elimine o disco; desassocie o disco quando a VM for eliminada.
    • on_permanent_instance_deletion: elimine o disco com estado quando a respetiva VM for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância gerida é eliminada manualmente ou quando o tamanho do grupo é reduzido.

Exemplo

Quer implementar uma base de dados com 12 partições, cada uma com um disco de arranque sem estado que contenha o sistema operativo e os binários da base de dados, e cada uma com um disco de dados com estado. Siga os passos seguintes.

  1. Crie um modelo de instância com um disco de arranque sem estado com base na imagem img-example-db-v01, com o SO e a base de dados pré-instalados, e com um disco de dados com estado, através do método instanceTemplates.insert:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates
    
    {
      "name": "example-database-template-v01",
      "properties": {
        "machineType":"e2-standard-2",
        "disks": [
          {
            "boot": true,
            "deviceName": "boot-disk",
            "initializeParams": {
              "sourceImage": "projects/example-project/global/images/mg-example-db-v01"
            }
          },
          {
            "deviceName": "data-disk",
            "mode": "READ_WRITE",
            "initializeParams": {
              "sourceImage": "projects/example-project/global/images/empty10GBext4"
            }
          }
        ],
        "networkInterfaces": [
          {
            "network": "global/networks/default"
          }
        ]
      }
    }
    

    O disco de dados no modelo de instância tem o nome do dispositivo data-disk e está configurado para ser criado a partir de uma imagem ext4 vazia, preparada antecipadamente, e para ser anexado no modo de leitura/escrita.

  2. Crie um MIG a partir do modelo de instância e defina o disco de dados como Stateful através do método instanceGroupManagers.insert:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers
    
    {
      "name": "example-database-group",
      "baseInstanceName": "shard",
      "versions": [
        {
          "instanceTemplate": "global/instanceTemplates/example-database-template-v01"
        }
      ],
      "targetSize": 12,
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
          }
        }
      }
    }
    

    O MIG cria 12 instâncias, cada uma com um disco com as seguintes propriedades:

    • Um nome do dispositivo, data-disk, retirado do modelo de instância.
    • Uma regra de eliminação para eliminar o disco de dados quando a VM é eliminada (devido à eliminação manual da instância ou à diminuição manual do tamanho do grupo).
    • Uma entrada no estado preservado da política (preservedStateFromPolicy) de cada instância gerida para que o disco de dados seja preservado na autorreparação, nas atualizações e na recriação de instâncias.
  3. Use o método instanceGroupManagers.get para verificar se o disco de dados está configurado na política com estado do novo recurso instanceGroupManagers:

    GET https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
    
    
    {
      "name": "example-database-group",
      "baseInstanceName": "shard",
      ...
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
          }
        }
      }
      ...
    }
    

    Pode ver que a política com estado declara os discos com o nome do dispositivo data-disk como com estado com a regra para eliminar esses discos na eliminação permanente da instância.

Definir e atualizar a configuração com estado para discos num MIG existente

Se executar uma aplicação com estado num MIG sem estado (um MIG sem qualquer configuração com estado), pode configurar os discos existentes definidos no modelo de instância para serem com estado para todas as instâncias neste MIG. Isto permite-lhe preservar os discos na recriação de instâncias, na autorreparação e nas operações de atualização, e opcionalmente nas operações de eliminação.

Pode fazer as seguintes operações:

  • Adicione discos definidos no modelo de instância à política com estado de um MIG existente para os declarar como tendo estado. Isto marca os discos com o nome do dispositivo indicado como com estado para todas as instâncias existentes e futuras no MIG.
  • Atualize a política com estado para alterar a configuração com estado para discos.

O MIG aplica a configuração atualizada na política com estado automaticamente e de forma assíncrona a todas as instâncias. As atualizações às configurações de disco numa política com estado não interrompem as VMs em execução. Para mais informações, consulte o artigo sobre como aplicar atualizações de políticas com estado.

Para um MIG regional, tem de desativar a redistribuição proativa de instâncias entre zonas antes de poder configurar discos com estado. Para mais informações, consulte como os grupos regionais processam o estado preservado.

Consola

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Clique no nome do grupo de instâncias no qual quer especificar a configuração com estado para o disco.

  3. Clique em Editar para modificar o grupo de instâncias gerido.

  4. Clique em Configuração com estado e por instância para expandir a secção.

  5. Na secção Configuração do grupo, clique no disco que quer tornar com estado. Na secção expandida, faça o seguinte:

    1. Para Com estado, selecione Sim.
    2. Na lista Na eliminação permanente da instância, selecione a ação a realizar no disco com estado quando a instância de VM for eliminada.

      • Desanexar disco: (predefinição). Nunca elimine o disco; desassocie o disco quando a VM for eliminada.
      • Eliminar disco: elimina o disco com estado quando a respetiva VM é eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância gerida é eliminada manualmente ou quando o tamanho do grupo é reduzido.

    3. Depois de atualizar a configuração com estado, clique em Concluído.

  6. Clique em Guardar para concluir a atualização.

gcloud

Para especificar que discos do modelo de instância devem ter estado ou para atualizar a configuração de discos com estado de um MIG existente, use uma ou várias flags --stateful-disk com o comando gcloud compute instance-groups managed update:

gcloud compute instance-groups managed update NAME \
  --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

Substitua o seguinte:

  • NAME: o nome do grupo de instâncias gerido a atualizar.
  • DEVICE_NAME: o nome do dispositivo de um disco especificado no modelo de instância.
  • DELETE_RULE: um valor que prescreve o que deve acontecer ao disco com estado quando uma instância de VM é eliminada. As opções disponíveis são:

    • never: (predefinição.) Nunca elimine o disco. Desassocie o disco quando a respetiva instância for eliminada.
    • on-permanent-instance-deletion: eliminar o disco com estado quando a respetiva instância for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância gerida é eliminada manualmente ou quando o tamanho do grupo é reduzido.

Se um nome de dispositivo especificado já estiver configurado na política com estado, o comando atualiza a configuração.

Exemplo

Executa uma base de dados com vários fragmentos num MIG denominado example-database- group. Cada VM no MIG armazena um fragmento num disco adicional com o nome do dispositivo data-disk, que é definido pelo modelo de instância. O MIG não tem uma configuração com estado e quer preservar os discos de dados na recriação, na autorreparação e nas atualizações de instâncias. Também quer proteger os discos de dados contra a eliminação quando uma VM é eliminada.

  1. Atualize o MIG para definir o disco de dados como com estado através do seguinte comando:

    gcloud compute instance-groups managed update example-database-group \
      --stateful-disk device-name=data-disk,auto-delete=never
    

    Como resultado, o MIG aplica as atualizações de configuração da política com estado automaticamente e de forma assíncrona aos discos de dados de todas as instâncias. Os discos de dados são agora preservados na autorrecuperação, nas atualizações e na recriação de instâncias, e os discos de dados são desanexados na eliminação de instâncias porque a regra auto-delete está definida como never.

  2. Verifique se o disco de dados está configurado na política com estado executando o comando gcloud compute instance-groups managed describe example-database-group.

REST

Para especificar que discos do modelo de instância devem ser com estado ou para atualizar a configuração do disco com estado para um MIG existente, configure os discos na política com estado do MIG através do método instanceGroupManagers.patch:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

Substitua o seguinte:

  • PROJECT: o ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG a atualizar.
  • DEVICE_NAME: o nome do dispositivo de um disco, especificado no modelo de instância, para o qual quer atualizar a configuração com estado.
  • DELETE_RULE: um valor que prescreve o que deve acontecer ao disco com estado quando uma instância de VM é eliminada. As opções disponíveis são:

    • never: (predefinição.) Nunca elimine o disco. Desassocie o disco quando a respetiva instância for eliminada.
    • on-permanent-instance-deletion: eliminar o disco com estado quando a respetiva instância for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância é eliminada manualmente ou quando o tamanho do grupo é reduzido.

Se o nome do dispositivo especificado já estiver configurado na política com estado, o método patch atualiza a respetiva configuração.

Exemplo

Executa uma base de dados com vários fragmentos num MIG denominado example-database- group. Cada VM no MIG armazena um fragmento num disco adicional com o nome do dispositivo data-disk, que é definido pelo modelo de instância. O MIG não tem uma configuração com estado e quer preservar os discos de dados na recriação, na autorreparação e nas atualizações de instâncias. Também quer proteger os discos de dados contra a eliminação quando uma VM é eliminada.

  1. Aplique uma correção ao MIG para definir o disco de dados como Stateful:

    PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
    
    {
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "NEVER" }
          }
        }
      }
    }
    

    O MIG aplica esta configuração com estado automaticamente e de forma assíncrona aos discos de dados de todas as instâncias. Os discos de dados são preservados na autorreparação, nas atualizações e na recriação de instâncias. Os discos de dados vão ser desanexados na eliminação da instância porque a regra autoDelete está definida como NEVER.

  2. Verifique se o disco de dados está configurado na política com estado ao ver o recurso instanceGroupManagers, devolvido pelo método instanceGroupManagers.get.

Declarar discos persistentes com estado anterior como sem estado

Pode ter de configurar um disco com estado para ser tratado como sem estado. Por exemplo:

  • Se reestruturar a sua app para mover o estado do disco.
  • Se configurou o disco para ser com estado por engano e quiser reverter a configuração.

Para declarar todos os discos com um determinado nome de dispositivo como sem estado, remova a configuração do disco da política com estado.

O MIG aplica a alteração à política com estado automaticamente e de forma assíncrona a todas as instâncias. As atualizações à configuração do disco numa política com estado não interrompem as instâncias de VM em execução.

Para mais informações, consulte o artigo Aplicação de atualizações de políticas com estado.

Consola

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Clique no nome do grupo de instâncias do qual quer remover a configuração com estado para discos.

  3. Clique em Editar para modificar o grupo de instâncias gerido.

  4. Clique em Configuração com estado e por instância para expandir a secção.

  5. Na secção Configuração do grupo, clique nos discos com estado que quer tornar sem estado. Na secção expandida, faça o seguinte:

    1. Altere a opção Com estado para Não.
    2. Clique em Concluído.
  6. Depois de fazer as alterações, clique em Guardar.

gcloud

Para especificar os discos de uma política com estado de um MIG que devem ser sem estado, use o sinalizador --remove-stateful-disks com o comando gcloud compute instance-groups managed update:

gcloud compute instance-groups managed update NAME \
  --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...]

Substitua o seguinte:

  • NAME: o nome do MIG a atualizar.
  • DEVICE_NAME: o nome do dispositivo de um disco a remover da política com estado e a tratar como sem estado. Pode indicar um ou vários nomes de dispositivos na lista.

Exemplo

Executa uma aplicação antiga com vários nós num MIG denominado example-legacy-group. Cada VM no MIG armazena dados da aplicação num disco de arranque com o nome do dispositivo boot-disk, que configurou como com estado na política com estado do MIG. Moveu os dados da aplicação para um disco adicional e agora quer tornar o disco de arranque sem estado para facilitar a atualização para novas imagens.

Para remover a configuração com estado do disco de arranque, atualize o grupo de instâncias gerido:

gcloud compute instance-groups managed update example-legacy-group \
  --remove-stateful-disks boot-disk

O MIG remove a configuração com estado para o nome do dispositivo boot-disk de forma automática e assíncrona para os discos de arranque de todas as instâncias no grupo. Os discos de arranque permanecem associados às instâncias, mas deixam de ter estado. Quando recria ou atualiza as instâncias, ou quando as instâncias são reparadas automaticamente, o MIG recria os discos de arranque a partir da imagem especificada no modelo de instância.

REST

Para especificar que discos de uma política com estado de um MIG devem ser sem estado, remova a configuração de cada disco da política com estado do MIG através do método instanceGroupManagers.patch:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": null,
        ...
      }
    }
  }
}

Substitua o seguinte:

  • PROJECT: o ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG a atualizar.
  • DEVICE_NAME: o nome do dispositivo de um disco que quer remover da política com estado. Se fornecer um valor null, a configuração com estado desse disco é removida. Pode indicar um ou vários nomes de dispositivos a remover.

Exemplo

Executa uma aplicação antiga com vários nós num MIG denominado example-legacy-group. Cada VM no MIG armazena dados da aplicação num disco de arranque com o nome do dispositivo boot-disk, que configurou como Stateful na política Stateful do MIG. Moveu os dados da aplicação para um disco adicional e agora quer tornar o disco de arranque sem estado para facilitar a atualização para novas imagens.

Para remover a configuração com estado do disco de arranque, aplique uma patch ao grupo de instâncias gerido:

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "boot-disk": null
      }
    }
  }
}

O MIG remove a configuração com estado para o nome do dispositivo boot-disk de forma automática e assíncrona para os discos de arranque de todas as instâncias no grupo. Os discos de arranque permanecem associados às instâncias, mas deixam de ter estado. Quando recria ou atualiza as instâncias, ou quando as instâncias são reparadas automaticamente, o MIG recria os discos de arranque a partir da imagem especificada no modelo de instância.

Remover discos persistentes com estado de um MIG

Pode ter de remover completamente um disco com estado de instâncias num MIG, por exemplo, se tiver reestruturado a sua aplicação e movido o estado para fora desse disco.

Os MIGs não permitem a remoção de discos com estado, pelo que tem de seguir os seguintes passos:

  1. Remova a configuração com estado do disco da política com estado. Isto torna os discos com o nome do dispositivo indicado sem estado.
  2. Desassocie os discos das VMs se ainda os quiser manter.
  3. Implemente um novo modelo de instância que já não defina o disco com o nome do dispositivo indicado.

Configurar discos persistentes com estado individualmente para uma VM num MIG

Configure discos persistentes com estado para uma VM específica num MIG adicionando o nome do dispositivo do disco à configuração por instância dessa VM. Atualize a VM para aplicar a configuração por instância e torná-la eficaz.

Configurar discos persistentes com estado individualmente para VMs específicas num MIG é útil se precisar de:

  • Migre cargas de trabalho existentes (traga discos existentes) de VMs autónomas para GIGs com estado para beneficiar da autorreparação e de atualizações fáceis.
  • Restaurar cópias de segurança de discos, configuradas individualmente para VMs.
  • Anexe discos com estado adicionais a uma VM específica temporariamente para testar, depurar ou copiar dados.

Adicionar discos com estado existentes a novas VMs num MIG

Pode adicionar discos com estado a novas instâncias que criar manualmente num MIG. Isto é útil para migrar uma aplicação com estado de VMs autónomas existentes para um MIG com estado, por exemplo:

  1. Crie um modelo de instância com uma configuração comum para todas as instâncias de VM.
  2. Desanexe os discos de dados das instâncias autónomas e elimine estas instâncias. Também pode desassociar discos de arranque se contiverem um estado que deva ser preservado.
  3. Crie um MIG vazio com o modelo de instância criado anteriormente.
  4. Crie instâncias no MIG com os nomes adequados e os discos associados do passo anterior. O MIG responde ao seu pedido com as seguintes ações:

    1. Cria uma VM a partir do modelo de instância com o nome da instância fornecido.
      • Um MIG regional cria a VM na mesma zona onde o disco está localizado. Se o disco for regional, o MIG regional cria a VM em qualquer uma das zonas de réplica do disco.
    2. Cria uma configuração por instância com a configuração com estado fornecida para os discos.
    3. Anexa os discos à nova instância.

Adicione discos com estado existentes quando criar manualmente instâncias específicas num MIG através da CLI gcloud ou da API REST. O MIG aplica a configuração imediatamente na criação da VM.

gcloud

Para criar uma VM com um nome personalizado e anexar um ou mais discos com estado existentes a essa VM, use o comando gcloud compute instance-groups managed create-instance com uma ou várias flags --stateful-disk.

gcloud compute instance-groups managed create-instance NAME \
  --instance VM_NAME \
  [--zone ZONE | --region REGION] \
  --stateful-disk device-name=DEVICE_NAME,source=DISK[,mode=MODE][,auto-delete=DELETE_RULE]

Substitua o seguinte:

  • NAME: o nome do MIG no qual tem de criar uma instância.
  • VM_NAME: o nome da nova instância a criar.
  • ZONE: a zona onde o GIG está localizado (aplica-se a um GIG zonal).
  • REGION: a região onde a GIG está localizada (aplica-se a uma GIG regional).
  • DEVICE_NAME: O nome do dispositivo a usar quando anexar o disco.
  • DISK: O URI de um disco persistente existente a anexar no DEVICE_NAME especificado no formato projects/project-id/zones/zone/disks/disk-name para um disco zonal e projects/project-id/regions/region/disks/disk-name para um disco regional.
  • MODE: especifica o modo do disco. As opções suportadas são:
    • ro: só de leitura.
    • rw: (predefinição.) Leitura/escrita.
  • DELETE_RULE: um valor que prescreve o que deve acontecer a um disco com estado quando uma instância de VM é eliminada. As opções disponíveis são:

    • never: (predefinição.) Nunca elimine o disco. Em alternativa, desanexe o disco quando a respetiva instância for eliminada.
    • on-permanent-instance-deletion: eliminar o disco com estado quando a respetiva instância for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância é eliminada manualmente ou quando o tamanho do grupo é reduzido.

    Independentemente do valor da regra de eliminação, os discos com estado são sempre preservados nas operações de autocorreção, atualização e recriação de instâncias.

Exemplo

Quer ter a autocorreção para um servidor de base de dados que está atualmente em execução numa VM autónoma denominada db-instance e que armazena atualmente dados num disco denominado db-data-disk-1.

Crie um GIG com estado com autorreparação, crie uma VM semelhante no GIG e anexe o disco de dados existente db-data-disk-1 à nova instância como um disco com estado:

  1. Parar a VM, db-instance, durante um período de manutenção.
  2. Crie um modelo de instância denominado db-template com a configuração db-instance.
  3. Desassocie db-data-disk-1 de db-instance e elimine db-instance.
  4. Crie um GIG vazio, example-database-mig, a partir de db-template e configure a autorreparação.
  5. Crie uma instância gerida com o nome db-instance original e anexe o db-data-disk-1 como um disco com estado:

    gcloud compute instance-groups managed create-instance example-database-mig \
      --instance db-instance \
      --zone us-east1-c \
      --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/db-data-disk-1,auto-delete=never
    

    O comando cria uma instância, db-instance, no GIG, cria uma configuração por instância correspondente com o disco com estado db-data-disk-1 e anexa o disco à nova VM, usando data-disk como o nome do dispositivo.

REST

Para criar uma ou várias instâncias num MIG, definir nomes de VMs personalizados e anexar um ou vários discos com estado existentes a estas instâncias, use o método instanceGroupManagers.createInstances.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances

{
  "instances": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      }
    },
    ...
  ]
}

Substitua o seguinte:

  • PROJECT_ID: ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG no qual criar uma instância.
  • VM_NAME: o nome da instância a criar.
  • DEVICE_NAME: O nome do dispositivo a usar quando anexar o disco.
  • DISK: o URI de um disco persistente existente a anexar no DEVICE_NAME especificado no formato projects/project-id/zones/zone/disks/disk-name para um disco zonal ou projects/project-id/regions/region/disks/disk-name para um disco regional.
  • MODE: especifica o modo do disco. As opções suportadas são:
    • READ_ONLY: só de leitura.
    • READ_WRITE: (predefinição.) Leitura/escrita.
  • DELETE_RULE: um valor que determina o que deve acontecer a um disco com estado quando uma VM é eliminada. As opções disponíveis são as seguintes:

    • never: (predefinição.) Nunca elimine o disco. Em vez disso, desassocie o disco quando a respetiva VM for eliminada.
    • on-permanent-instance-deletion: eliminar o disco com estado quando a respetiva instância for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância é eliminada manualmente ou quando o tamanho do grupo é reduzido.

    Independentemente do valor da regra de eliminação, os discos com estado são sempre preservados nas operações de autocorreção, atualização e recriação de instâncias.

Exemplo

Quer ter a autocorreção para um servidor de base de dados que está atualmente em execução numa VM autónoma denominada db-instance e que armazena atualmente dados num disco denominado db-data-disk-1.

Crie um GIG com estado com autorreparação, crie uma instância semelhante no GIG e anexe o disco de dados existente db-data-disk-1 à nova VM como um disco com estado:

  1. Parar a VM, db-instance, durante um período de manutenção.
  2. Crie um modelo de instância denominado db-template com a configuração db-instance.
  3. Separe db-data-disk-1 de db-instance e elimine db-instance.
  4. Crie um GIG vazio, example-database-mig, a partir de db-template e configure a autorreparação.
  5. Crie uma instância com o nome original db-instance e anexe o db-data-disk-1 como um disco com estado:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/createInstances
    
    {
      "instances": [
        {
          "name": "db-instance",
          "preservedState" : {
            "disks": {
              "data-disk" : {
                "source": "projects/example-project/zones/us-east1-c/disks/db-data-disk-1",
                "mode": "READ_WRITE",
                "autoDelete": "never"
              }
            }
          }
        }
      ]
    }
    

    O método cria uma instância, db-instance, no MIG, cria uma configuração por instância correspondente com o disco com estado db-data-disk-1 e anexa o disco à nova instância, usando data-disk como nome do dispositivo.

Adicionar, declarar e substituir discos com estado individualmente para VMs num MIG

Configure discos com estado individualmente para uma instância gerida adicionando ou atualizando uma configuração de disco com estado na configuração por instância associada. Em seguida, atualize a instância para aplicar a configuração por instância à VM.

Configurar discos com estado individualmente é útil para as seguintes tarefas:

  • Adicionar um disco com estado de fora de um MIG a uma VM nesse MIG.
  • Declarar um disco anteriormente sem estado como com estado para uma VM num MIG.
  • Substituir um disco com estado por um disco diferente para uma VM num MIG.

Adicionar um disco com estado de fora de um MIG a uma VM nesse MIG. Pode anexar qualquer disco de fora de um MIG a uma instância gerida adicionando a configuração com estado do disco à configuração por instância associada. Depois de aplicar a configuração, o GIG anexa automaticamente o disco à instância e trata-o como com estado.

Declarar um disco persistente anteriormente sem estado como com estado. Pode declarar um disco anteriormente sem estado, atualmente anexado a uma VM, como com estado adicionando a configuração com estado para este disco, incluindo o nome do dispositivo e o URI, à configuração por instância associada. Depois de aplicar a configuração, o MIG começa a preservar o disco como Stateful.

Substituir um disco com estado por um disco diferente. A substituição de um disco com estado por outro disco com estado pode ser útil, por exemplo, se precisar de aceder a uma cópia de segurança recuperada. Pode trocar um disco com estado por outro atualizando o URI do disco, mantendo o mesmo nome do dispositivo na configuração por instância. Depois de aplicar a configuração atualizada por instância, o MIG desanexa o disco antigo e anexa o novo com o mesmo nome do dispositivo. Quando aplicar a atualização, escolha se quer manter a instância em execução, reiniciá-la ou recriá-la. A troca de um disco de arranque requer, pelo menos, o reinício de uma VM.

gcloud

Para configurar discos com estado individualmente para uma VM num MIG, adicione ou atualize a configuração de disco com estado na configuração por instância associada. Em seguida, atualize a instância para aplicar a configuração.

Se não existir uma configuração por instância para a instância, use o comando gcloud compute instance-groups managed instance-configs create com uma ou várias flags --stateful-disk:

gcloud compute instance-groups managed instance-configs create NAME \
--instance VM_NAME \
--stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \
[--no-update-instance | --update-instance] \
[--instance-update-minimal-action MINIMAL_ACTION]

Se já existir uma configuração por instância para a instância, use o comando gcloud compute instance-groups managed instance-configs update com uma ou várias flags --stateful-disk.

A flag --update-instance (predefinição) aplica as alterações imediatamente à instância. Se usar --no-update-instance, as alterações permanecem não aplicadas e são aplicadas quando recria ou atualiza a instância.

gcloud compute instance-groups managed instance-configs update NAME \
--instance VM_NAME \
--stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \
[--no-update-instance | --update-instance] \
[--instance-update-minimal-action MINIMAL_ACTION]

Substitua o seguinte:

  • NAME: o nome do grupo de instâncias gerido.
  • VM_NAME: o nome da instância de VM para a qual configurar discos com estado.
  • DEVICE_NAME: o nome do dispositivo usado para anexar o disco.
  • DISK: O URI de um disco persistente existente a anexar no DEVICE_NAME especificado, no formato projects/project-id/zones/zone/disks/disk-name para um disco zonal e projects/project-id/regions/region/disks/disk-name para um disco regional.

    A subflag source=DISK é opcional se o dispositivo já estiver definido na configuração por instância da instância. Caso contrário, é obrigatório.

    Se for omitido, o URI do disco configurado atualmente permanece inalterado.

  • MODE: especifica o modo do disco. Só pode especificar mode se também especificar source. As opções suportadas são:

    • ro: só de leitura.
    • rw: (predefinição.) Leitura/escrita.

    Se for omitido, o valor predefinido é definido para uma nova configuração de disco com estado; o valor permanece inalterado numa configuração existente.

  • DELETE_RULE: um valor que determina o que deve acontecer a um disco com estado quando uma VM é eliminada. As opções disponíveis são as seguintes:

    • never: (predefinição.) Nunca elimine o disco. Em alternativa, desanexe o disco quando a respetiva instância for eliminada.
    • on-permanent-instance-deletion: elimine o disco com estado quando a respetiva instância for eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância é eliminada manualmente ou quando o tamanho do grupo é reduzido.

    Se for omitido, o valor predefinido é definido para uma nova configuração de disco com estado; o valor permanece inalterado numa configuração existente.

    Independentemente do valor da regra de eliminação, os discos com estado são sempre preservados nas operações de autocorreção, atualização e recriação de instâncias.

  • MINIMAL_ACTION: execute, pelo menos, a ação especificada quando aplicar a atualização da configuração por instância à instância. Tem de ser usado em conjunto com a flag --update-instance. O valor tem de ser um dos seguintes:

    • none: nenhuma ação.
    • refresh: aplique atualizações que sejam possíveis aplicar sem parar a VM.
    • restart: pare a VM e, em seguida, inicie-a novamente.
    • replace: recrie a VM.

    Se for omitido, é usada a ação menos disruptiva exigida pela atualização.

Exemplo

Os dados num disco com estado atualmente anexado, data-disk-1, foram danificados e quer restaurá-los a partir da cópia de segurança mais recente. Criou um disco, data-disk-2, a partir de um instantâneo para substituir o disco danificado na instância, db-instance-1, gerida por um MIG com estado, example-database-mig. O disco original data-disk-1 está anexado com o nome do dispositivo data-disk com uma regra de eliminação automática para nunca eliminar o disco.

Para substituir data-disk-1 por data-disk-2, execute o seguinte comando:

gcloud compute instance-groups managed instance-configs update example-database-mig \
  --instance db-instance-1 \
  --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/data-disk-2 \
  --update-instance \
  --instance-update-minimal-action restart

O comando faz o seguinte:

  1. Atualiza a configuração por instância para db-instance-1:
    1. Atualiza a origem do disco com o nome do dispositivo data-disk de data-disk-1 (última configuração) para data-disk-2 (nova configuração).
    2. Mantém a regra de eliminação automática para nunca eliminar o disco porque o parâmetro auto-delete é omitido na flag --stateful-disk e, por predefinição, a regra de eliminação é never.
  2. Aplica imediatamente a atualização de configuração por instância à VM db-instance-1 porque a flag --update-instance está incluída. O MIG separa-se data-disk-1 e volta a ligar-se data-disk-2 com o mesmo nome do dispositivo, data-disk.
  3. Uma vez que a ação mínima está definida como restart, o MIG reinicia a instância db-instance-1 para atualizar a VM, o que ajuda a aplicação de base de dados a começar a usar o novo disco.

Terraform

Para configurar discos com estado individualmente para uma VM num MIG, adicione a configuração do disco com estado na configuração por instância associada. Em seguida, atualize a instância para aplicar a configuração.

Para adicionar uma configuração por instância para uma VM, use o recurso google_compute_per_instance_config e inclua o bloco preserved_state, conforme mostrado no exemplo seguinte.

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "db-instance"
  preserved_state {
    disk {
      device_name = "data-disk"
      source      = google_compute_disk.default.id
      delete_rule = "NEVER"
    }
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

REST

Para configurar discos com estado individualmente para VMs num MIG, adicione ou atualize a configuração do disco com estado nas configurações por instância associadas. Em seguida, atualize as instâncias para aplicar a configuração.

Se ainda não existirem configurações por instância para as VMs indicadas, use o método instanceGroupManagers.updatePerInstanceConfigs ou o método regionInstanceGroupManagers.updatePerInstanceConfigs com configuração com estado para um ou vários discos:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Se já existirem configurações por instância para as VMs indicadas, use o método instanceGroupManagers.patchPerInstanceConfigs ou o método regionInstanceGroupManagers.patchPerInstanceConfigs com a configuração com estado para um ou vários discos:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG.
  • VM_NAME: o nome da VM para a qual configurar discos com estado.
  • DEVICE_NAME: o nome do dispositivo usado para anexar o disco.
  • DISK: O URI de um disco persistente existente a anexar no DEVICE_NAME especificado, no formato projects/project-id/zones/zone/disks/disk-name para um disco zonal e projects/project-id/regions/region/disks/disk-name para um disco regional.

    O campo "source": "DISK" é opcional se o dispositivo já estiver definido na configuração por instância da instância. Caso contrário, é obrigatório.

    Se o campo source for omitido, o URI do disco configurado atualmente permanece inalterado.

  • MODE: (opcional.) Especifica o modo do disco. Só é possível especificar mode se for indicado source. As opções suportadas são:

    • READ_ONLY: só de leitura.
    • READ_WRITE: (predefinição.) Leitura/escrita.

    Se for omitido, o valor predefinido é definido para uma nova configuração de disco com estado; o valor permanece inalterado numa configuração existente.

  • DELETE_RULE: (opcional.) Um valor que prescreve o que deve acontecer a um disco com estado quando uma VM é eliminada. As opções disponíveis são as seguintes:

    • Nunca: (predefinição). Nunca elimine o disco. Em alternativa, desanexe o disco quando a respetiva instância for eliminada.
    • on-permanent-instance-deletion: Eliminar o disco com estado quando a respetiva instância é eliminada permanentemente do grupo de instâncias, por exemplo, quando a instância é eliminada manualmente ou quando o tamanho do grupo é reduzido.

    Se o campo autoDelete for omitido, o valor predefinido é definido para uma nova configuração de disco com estado; o valor permanece inalterado numa configuração existente.

    Independentemente do valor da regra de eliminação, os discos com estado são sempre preservados nas operações de autocorreção, atualização e recriação de instâncias.

  • FINGERPRINT: (opcional). A impressão digital da configuração fornecida, se já existir. Usado para bloqueio otimista. Para ver a impressão digital mais recente, faça um pedido get() para obter o recurso.

Os métodos updatePerInstanceConfigs e patchPerInstanceConfigs atualizam as configurações especificadas por instância, mas não aplicam as atualizações de configuração às VMs geridas associadas. As alterações são aplicadas a uma instância quando o MIG recebe instruções para recriar ou atualizar a instância. Também pode atualizar seletivamente a instância para aplicar as alterações.

Exemplo

Os dados num disco com estado atualmente anexado, data-disk-1, foram danificados e quer restaurá-los a partir da cópia de segurança mais recente. Criou um disco, data-disk-2, a partir de um instantâneo para substituir o disco danificado na instância, db-instance-1, gerida por um MIG com estado, example-database-mig. O disco original data-disk-1 está anexado com o nome do dispositivo data-disk com uma regra de eliminação automática para nunca eliminar o disco.

Para atualizar a configuração por instância para db-instance-1 com o novo disco, chame o método patchPerInstanceConfigs:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "db-instance-1",
      "preservedState" : {
        "disks": {
          "data-disk" : {
            "source": "projects/example-project/zones/us-east1-c/disks/data-disk-2"
          }
        }
      }
    }
  ]
}

O método aplica patches à configuração por instância para db-instance-1:

  1. Atualiza o source para um disco com o nome do dispositivo data-disk de data-disk-1 (última configuração) para data-disk-2 (nova configuração).
  2. Mantém os parâmetros mode e autoDelete inalterados porque os parâmetros são omitidos no pedido.

A atualização da configuração ainda não foi aplicada à VM db-instance-1. O MIG aplica a atualização da configuração quando recria ou atualiza a instância.

Para aplicar a atualização de configuração por instância à VM db-instance-1, chame o método instanceGroupManagers.applyUpdatesToInstances para a instância:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/applyUpdatesToInstances
{
  "instances": ["/zones/us-east1-c/instances/db-instance-1"],
  "minimalAction": "RESTART"
}

O método atualiza o estado preservado da instância gerida, desanexando data-disk-1 e anexando data-disk-2 com o mesmo nome do dispositivo data-disk. Uma vez que o valor de minimalAction está definido como RESTART, o método reinicia a VM db-instance-1, o que permite que a aplicação de base de dados comece a usar o novo disco.

Desassociar um disco com estado ou declará-lo sem estado para uma VM individual

Pode ter de desassociar um disco com estado ou configurá-lo para ser tratado como sem estado para uma VM individual. Por exemplo:

  • Se reestruturar a sua app para mover o estado do disco.
  • Se configurar o disco como Stateful por engano e quiser reverter a configuração.

Desanexe um disco com estado ou torne-o sem estado para uma VM individual removendo a configuração com estado do disco da configuração por instância associada ou eliminando toda a configuração por instância. Quando aplica a alteração:

  • Se o disco não estiver definido no modelo de instância, o MIG desanexa o disco.
    • O MIG não elimina o disco quando elimina a respetiva configuração da configuração por instância, independentemente da regra de eliminação automática na configuração.
  • Se o disco for definido pelo modelo de instância, o MIG trata o disco como sem estado, o que significa que o MIG recria o disco a partir da respetiva origem no modelo de instância em eventos subsequentes de recriação, atualização ou autorreparação de instâncias.

A remoção de uma configuração de disco de uma configuração por instância não reinicia uma instância de VM em execução, a menos que opte explicitamente por fazê-lo.

Para mais informações, consulte o artigo Aplicação de atualizações de configurações por instância.

gcloud

Para desanexar discos com estado ou declará-los sem estado individualmente para uma VM num MIG, remova a configuração do disco com estado da configuração por instância associada ou elimine toda a configuração por instância se não contiver outro estado. Atualize a instância para aplicar a configuração.

Para remover uma configuração de disco com estado da configuração por instância associada, use o comando gcloud compute instance-groups managed instance-configs update com a flag --remove-stateful-disks. A flag --update-instance (predefinição) aplica as alterações imediatamente à instância. Se usar --no-update-instance, as alterações permanecem não aplicadas e são aplicadas quando recria ou atualiza a instância.

gcloud compute instance-groups managed instance-configs update NAME \
  --instance VM_NAME \
  --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Substitua o seguinte:

  • NAME: o nome do MIG.
  • VM_NAME: nome da VM da qual remover a configuração com estado.
  • DEVICE_NAME: o nome do dispositivo usado para anexar o disco.
  • MINIMAL_ACTION: execute, pelo menos, a ação especificada quando atualizar a VM com a respetiva configuração por instância. Só pode ser usado em conjunto com o --update-instance. O valor tem de ser um dos seguintes:

    • none: nenhuma ação.
    • refresh: aplique atualizações que sejam possíveis aplicar sem parar a VM.
    • restart: pare a VM e, em seguida, inicie-a novamente.
    • replace: recrie a VM.

    Se for omitido, é usada a ação menos disruptiva exigida pela atualização.

Exemplo

Executa uma aplicação antiga num MIG denominado example-legacy-group. Cada VM no MIG armazena dados da aplicação num disco de arranque com o nome do dispositivo boot-disk. Usando configurações por instância, configurou cada disco de arranque para ser com estado. Agora, moveu os dados da aplicação para um disco adicional e quer tornar o disco de arranque sem estado para cada VM de modo a facilitar a atualização para novas imagens.

Para cada instância, por exemplo, para node-1, execute o comando:

gcloud compute instance-groups managed instance-configs update example-legacy-group \
  --instance node-1 \
  --remove-stateful-disks boot-disk \
  --update-instance

O comando faz o seguinte:

  1. Remove a configuração do disco com o nome do dispositivo boot-disk da configuração por instância para node-1.
  2. Aplica imediatamente a atualização de configuração por instância à VM node-1 porque a flag --update-instance está incluída. O MIG remove o disco de arranque da instância gerida e trata o disco de arranque como sem estado, o que significa que o MIG recria o disco a partir da respetiva imagem de arranque no modelo de instância em eventos subsequentes de recriação, atualização ou autocura de instâncias.preservedStateFromConfig

REST

Para desanexar discos com estado ou declará-los sem estado individualmente para uma VM num MIG, remova a configuração do disco com estado da configuração por instância associada ou elimine toda a configuração por instância se não contiver outro estado. Em seguida, atualize a instância para aplicar a configuração.

Para remover uma configuração de disco com estado da configuração por instância associada, use o método instanceGroupManagers.patchPerInstanceConfigs ou o método regionInstanceGroupManagers.patchPerInstanceConfigs:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : null
        },
        ...
      },
      "fingerprint: "FINGERPRINT"
      ...
    }
  ]
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto para o pedido.
  • ZONE: A zona onde o GIG está localizado (aplica-se a um GIG zonal).
    • Para um MIG regional, substitua zones/ZONE por regions/REGION e especifique a região do MIG.
  • NAME: o nome do MIG.
  • VM_NAME: o nome da VM da qual remover a configuração com estado.
  • DEVICE_NAME: o nome do dispositivo usado para anexar o disco.
  • FINGERPRINT: a impressão digital da configuração fornecida, se já existir. Usado para bloqueio otimista. Para ver a impressão digital mais recente, faça um pedido get() para obter o recurso.

O método patchPerInstanceConfigs corrige as configurações especificadas por instância, mas não aplica as alterações às VMs associadas. As alterações são aplicadas a uma VM quando recria ou atualiza a instância. Pode aplicar as alterações manualmente ou usar atualizações contínuas automatizadas.

Exemplo

Executa uma aplicação antiga num MIG denominado example-legacy-group. Cada VM no MIG armazena dados da aplicação num disco de arranque com o nome do dispositivo boot-disk. Configurou o disco de arranque como com estado nas configurações por instância do MIG ao migrar as VMs autónomas para o MIG. Moveu os dados da aplicação para um disco adicional e agora quer tornar o disco de arranque sem estado para cada VM, de modo a facilitar a atualização para novas imagens.

  1. Chame o método patchPerInstanceConfigs para as instâncias, por exemplo, para node-1 com um valor null para o disco de arranque:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/patchPerInstanceConfigs
    
    {
      "perInstanceConfigs": [
        {
          "name": "node-1",
          "preservedState" : {
            "disks": {
              "boot-disk" : null
            }
          }
        }
      ]
    }
    

    O método remove a configuração do disco com o nome do dispositivo boot- disk da configuração por instância para node-1. A atualização da configuração ainda não foi aplicada à instância de VM node-1. A atualização da configuração vai ser aplicada na próxima recriação ou atualização da instância.

  2. Para aplicar a atualização de configuração por instância à instância de VM node-1, chame o método instanceGroupManagers.applyUpdatesToInstances para a instância:

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/applyUpdatesToInstances
    {
      "instances": ["/zones/us-east1-c/instances/node-1"]
    }
    

    O MIG remove o disco de arranque da instância preservedStateFromConfig para a instância node-1 e trata o disco como sem estado. Ou seja, o MIG recria o disco a partir da respetiva imagem de arranque no modelo de instância em eventos subsequentes de recriação, atualização ou autorreparação de instâncias.

Feedback

Queremos saber mais sobre os seus exemplos de utilização, desafios e feedback acerca dos MIGs com estado. Pode partilhar o seu feedback com a nossa equipa através do endereço de email mig-discuss@google.com.

O que se segue?