Editar a configuração da VM no ambiente de execução de VMs no Google Distributed Cloud

Este documento destina-se a proprietários de aplicativos que usam o ambiente de execução de VMs no Google Distributed Cloud para executar máquinas virtuais (VMs) no GKE em Bare Metal. Neste documento, mostramos como editar VMs em execução nos cluster do GKE. Por exemplo, é possível editar a alocação de recursos, como CPU e memória, ou alterar a rede a que uma VM se conecta.

É possível modificar qualquer campo na seção spec de um recurso VirtualMachine. Também é possível editar os rótulos de uma VM. Outros campos, como o nome da VM (metadata.name), não podem ser editados. Por padrão, a VM precisa estar no estado Stopped antes de editar o recurso. No entanto, a partir do GKE em Bare Metal versão 1.13.0, é possível configurar o recurso VirtualMachine para reiniciar automaticamente sempre que você alterar a configuração.

Se as edições no recurso VirtualMachine tiverem erros quando você as salvar, as mudanças serão recusadas, e você verá uma notificação. Corrija os erros e tente salvar o recurso VirtualMachine novamente. Se a VM não iniciar depois que você fizer alterações, use o comando kubectl describe gvm VM_NAME para ver informações de solução de problemas e corrigir os erros.

Antes de começar

Para concluir este documento, você precisa de acesso aos seguintes recursos:

Editar recursos de computação

Se as demandas de carga de trabalho de computação mudarem, será possível atualizar o número de CPUs virtuais e a quantidade de memória virtual atribuída às VMs. Para editar suas cargas de trabalho de computação, siga as seguintes etapas:

  1. Pare a VM que você quer editar:

    kubectl virt stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você quer interromper.

  2. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você quer iniciar.

  3. No editor, atualize os valores dos recursos de computação que você quer alterar.

    Por exemplo, o manifesto de amostra VirtualMachine a seguir mostra que o recurso da VM tem 2 vCPUs atribuídas:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 2
    ...
    

    Se você quiser atualizar o número de vCPUs atribuídas, altere o valor no editor, como mostrado no exemplo a seguir:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      compute:
        cpu:
          vcpus: 4
    ...
    
  4. Salve e feche o manifesto da VM.

  5. Inicie a VM que você editou:

    kubectl virt start VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você editou.

  6. Verifique o STATUS da sua VM:

    kubectl get gvm VM_NAME
    

    Verifique se a VM está no estado Running. Se a VM solicitar mais recursos de computação do que o host pode fornecer, a VM não poderá ser iniciada. Se a VM não estiver no estado Running, verifique o manifesto do recurso VirtualMachine e a disponibilidade do recurso de computação no host.

    O exemplo de saída a seguir mostra a VM em um estado Running

    NAME   STATUS    AGE   IP
    vm1    Running   1m    192.168.2.72
    
  7. Veja informações detalhadas sobre uma VM usando kubectl describe gvm:

    kubectl describe gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você editou.

    O exemplo de saída a seguir mostra as informações condensadas de uma VM, com uma alteração no número de vCPUs aplicadas:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
        Cpu:
          Vcpus:  4
    ...
    

Para mais informações, veja como criar VMs com configurações específicas de computação de vCPU e memória.

Editar recursos de disco

Se os requisitos de armazenamento mudarem, será possível adicionar ou remover discos virtuais de uma VM. Para editar os discos anexados à sua VM, siga estas etapas:

  1. Pare a VM que você quer editar:

    kubectl virt stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você quer interromper.

  2. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você quer iniciar.

  3. No editor, atualize a seção spec.disks para anexar ou desanexar discos.

    Por exemplo, o exemplo de manifesto VirtualMachine a seguir mostra que apenas um disco de inicialização está anexado à VM:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
      ...
    

    Se você quiser adicionar um disco vazio, atualize a configuração do disco no editor, conforme mostrado no exemplo a seguir:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: vm1-boot-dv
        - virtualMachineDiskName: DISK_NAME
      ...
    

    Substitua DISK_NAME pelo nome do disco a ser anexado.

  4. Salve e feche o manifesto da VM.

  5. Inicie a VM que você editou:

    kubectl virt start VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você editou.

  6. Verifique o STATUS da sua VM:

    kubectl get gvm VM_NAME
    

    Verifique se a VM está no estado Running. Se a VM solicitar uma StorageClass ou atribuição de disco que o host não possa fornecer, a VM não será iniciada. Se a VM não estiver no estado Running, verifique os manifestos de recursos de VirtualMachine e VirtualMachineDisk e o suporte ao armazenamento do host.

  7. Veja informações detalhadas sobre uma VM usando kubectl describe gvm:

    kubectl describe gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você editou.

    O exemplo de saída a seguir mostra as informações condensadas de uma VM, com uma alteração nos discos anexados aplicados com êxito:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Disks:
        Name:  vm1-boot-dv
        Name:  data-disk-01
    ...
    

Para mais informações, veja como criar e gerenciar discos.

Editar recursos de rede

À medida que sua infraestrutura é alterada, talvez seja necessário alterar a configuração de rede de uma VM. Por exemplo, é possível conectar a VM a uma rede virtual diferente ou atribuir manualmente um endereço IP. Para editar a configuração de rede de uma VM, siga estas etapas:

  1. Pare a VM que você quer editar:

    kubectl virt stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você quer interromper.

  2. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você quer iniciar.

  3. No editor, atualize as configurações de rede que você quer mudar.

    Por exemplo, o manifesto de amostra VirtualMachine a seguir mostra que a VM se conecta a uma rede chamada backend-vlan100 e usa DHCP porque nenhum endereço IP está definido:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: backend-vlan100
          default: true
    ...
    

    Se você quiser alterar a rede a que a VM se conecta ou atribuir um endereço IP manual, atualize a configuração de rede no editor, conforme mostrado no exemplo a seguir:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: vm1
    spec:
      ...
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
            ipAddresses:
              - IP_ADDRESS
          default: true
    ...
    

    Substitua NETWORK_NAME pelo nome da rede a que se conectar ou adicione a seção ipAddresses e especifique o IP_ADDRESS a ser usado pela VM.

  4. Salve e feche o manifesto da VM.

  5. Inicie a VM que você editou:

    kubectl virt start VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você editou.

  6. Verifique o STATUS da sua VM:

    kubectl get gvm VM_NAME
    

    Verifique se a VM está no estado Running. Se a VM solicitar uma conexão de rede que o host não possa fornecer, a VM não será iniciada. Se a VM não estiver no estado Running, verifique o manifesto do recurso de VirtualMachine e o suporte à rede do host.

  7. Veja informações detalhadas sobre uma VM usando kubectl describe gvm:

    kubectl describe gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que você editou.

    O exemplo de saída a seguir mostra as informações condensadas de uma VM, com uma mudança na configuração de rede e endereço IP aplicada com sucesso:

    Name:         vm1
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  vm.cluster.gke.io/v1
    Kind:         VirtualMachine
    ...
    Spec:
      Compute:
      Interfaces:
        Name:          eth0
        Network Name:  backend-vlan200
    ...
    Status:
      ...
      Interfaces:
        Dns Config:
          Nameservers:
            8.8.8.8
        gateway4:  10.200.0.9
        Ip Addresses:
          10.200.0.22/24
        Mac Address:    22:b4:e3:d2:ef:fb
        Name:           eth0
        Resource Name:  vm1-eth0-f2468
    ...
    

Para saber mais, veja como criar e gerenciar redes virtuais.

Configurar a VM para reinicializações automáticas

Muitas alterações na configuração da VM, como mudanças nas configurações de compute, exigem que a VM seja interrompida e reiniciada para que as alterações sejam sincronizadas com a instância de VM correspondente (VirtualMachineInstance). As VMs em execução no GKE em Bare Metal versão 1.13.0 ou mais recente podem ser configuradas para reiniciar automaticamente sempre que você fizer mudanças na configuração. Ao configurar uma VM para usar esse recurso, não é necessário interromper e reiniciar uma VM ao editar o recurso personalizado dela. O ambiente de execução de VMs no Google Distributed Cloud monitora a VM e, se detectar uma alteração de configuração, reinicia a VM automaticamente para sincronizar as mudanças.

Se você estiver usando o Gerenciamento de configurações para gerenciar seus arquivos de configuração YAML, esse recurso será especialmente útil. Sem esse recurso, é necessário parar a VM manualmente antes de fazer alterações no recurso personalizado VirtualMachine e iniciar a VM manualmente depois de concluir as alterações.

Para ativar as reinicializações automáticas, siga estas etapas:

  1. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    
  2. No editor, adicione o campo autoRestartOnConfigurationChange e defina-o como true.

    É possível fazer outras alterações na VM, como atualizar o valor de vcpus. Se você editar as configurações de compute, o ambiente de execução de VMs no Google Distributed Cloud reiniciará a VM automaticamente ao salvar as alterações.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      ...
      name: vm-sample-01
      namespace: default
      resourceVersion: "16711824"
      uid: ed623879-0cfa-52de-ad2c-b63308e6116c
    spec:
      autoRestartOnConfigurationChange: true
      compute:
        cpu:
          vcpus: 2
          ...
    
  3. Salve e feche o manifesto da VM.

    Se você precisa sincronizar outras alterações na VM com a instância de VM correspondente, o ambiente de execução de VMs no Google Distributed Cloud reinicia a VM. Se você fez a mudança apenas para ativar as reinicializações automáticas, não é preciso reiniciar a VM.

  4. Verifique o status da sua VM:

    kubectl get gvm VM_NAME
    

    Dependendo da velocidade em que a VM é recebida, é possível ver state: Starting à medida que a VM é reiniciada. Quando a VM for reiniciada, você verá state: Running. As alterações de configuração subsequentes no recurso personalizado VirtualMachine não exigem que você pare e inicie a VM manualmente. As alterações subsequentes no recurso personalizado são refletidas na instância da VM de maneira consistente.

Observe o seguinte comportamento situacional de recursos:

  • Se você interromper uma VM manualmente antes de editar o recurso personalizado VirtualMachine, a alteração de configuração não acionará uma reinicialização. O estado interrompido da VM antes de persistir a mudança de configuração.

  • Se você fez alterações no rótulo ou na programação da VM antes de ativar o recurso de reinicialização automática, adicionar autoRestartOnConfigurationChange agora sem nenhuma outra alteração não acionará uma reinicialização. O ideal é que esse recurso mantenha a instância de VM consistente com a configuração da VM. No entanto, o ambiente de execução de VMs no Google Distributed Cloud não consegue detectar inconsistências anteriores.

A seguir