Edite a configuração da VM no tempo de execução da VM no GDC

Este documento destina-se a proprietários de aplicações que usam o VM Runtime no GDC para executar máquinas virtuais (VMs) em clusters criados com o Google Distributed Cloud (apenas software) em hardware simples. Este documento mostra como editar VMs em execução em clusters bare metal. Por exemplo, pode editar a alocação de recursos, como a CPU e a memória, ou alterar a rede à qual uma MV se liga.

Pode modificar qualquer campo na secção spec de um recurso VirtualMachine. Também pode editar as etiquetas de uma MV. Não é possível editar outros campos, como o nome da VM (metadata.name). Por predefinição, a sua VM tem de estar num estado Stopped antes de editar o recurso. No entanto, a partir da versão 1.13.0 do Google Distributed Cloud, pode configurar o seu VirtualMachinerecurso para reiniciar automaticamente sempre que alterar a configuração.

Se as edições ao recurso VirtualMachine contiverem erros quando as guardar, as alterações são rejeitadas e é apresentada uma notificação. Corrija os erros e tente guardar novamente o recurso VirtualMachine. Se a VM não for iniciada após fazer alterações, use o comando kubectl describe gvm VM_NAME para ver informações de resolução de problemas e corrigir os erros.

Antes de começar

Para preencher este documento, precisa de ter acesso aos seguintes recursos:

Edite recursos de computação

Se as exigências da sua carga de trabalho de computação mudarem, pode atualizar o número de CPUs virtuais e a quantidade de memória virtual que atribui às suas VMs. Para editar as cargas de trabalho de computação, conclua os seguintes passos:

  1. Pare a VM que quer editar:

    kubectl virt stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM que quer parar.

  2. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    

    Substitua VM_NAME pelo nome da MV que quer editar.

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

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

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

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

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

  5. Inicie a VM que editou:

    kubectl virt start VM_NAME
    

    Substitua VM_NAME pelo nome da VM que editou.

  6. Verifique o STATUS da sua VM:

    kubectl get gvm VM_NAME
    

    Certifique-se de que a VM está no estado Running. Se a sua VM pedir mais recursos de computação do que o anfitrião pode fornecer, a VM não pode ser iniciada. Se a VM não estiver num estado Running, verifique o manifesto de recursos VirtualMachine e a disponibilidade de recursos de computação no anfitrião.

    O exemplo de saída seguinte mostra a VM num estado Running:

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

    kubectl describe gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que editou.

    O exemplo de resultado seguinte mostra as informações condensadas de uma VM, com uma alteração ao número de vCPUs aplicada com êxito:

    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 de computação de vCPU e memória específicas.

Edite recursos de disco

Se os seus requisitos de armazenamento mudarem, pode adicionar ou remover discos virtuais de uma VM. Para editar os discos associados à sua VM, conclua os seguintes passos:

  1. Pare a VM que quer editar:

    kubectl virt stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM que quer parar.

  2. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    

    Substitua VM_NAME pelo nome da MV que quer editar.

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

    Por exemplo, o seguinte manifesto de amostra mostra que apenas um disco de arranque está associado à VM:VirtualMachine

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

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

    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 anexar.

  4. Guarde e feche o manifesto de VM.

  5. Inicie a VM que editou:

    kubectl virt start VM_NAME
    

    Substitua VM_NAME pelo nome da MV que editou.

  6. Verifique o STATUS da sua VM:

    kubectl get gvm VM_NAME
    

    Certifique-se de que a VM está no estado Running. Se a sua VM pedir uma atribuição de StorageClass ou de disco que o anfitrião não possa fornecer, a VM não pode ser iniciada. Se a VM não estiver no estado Running, verifique os manifestos de recursos VirtualMachine e VirtualMachineDisk, bem como o suporte de armazenamento do anfitrião.

  7. Veja informações detalhadas sobre uma VM através do comando kubectl describe gvm:

    kubectl describe gvm VM_NAME
    

    Substitua VM_NAME pelo nome da MV que editou.

    O exemplo de resultado seguinte mostra as informações condensadas de uma VM, com uma alteração aos discos anexados aplicada 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 gerir discos.

Edite recursos de rede

À medida que a sua infraestrutura muda, pode querer alterar a configuração de rede de uma VM. Por exemplo, pode querer ligar a VM a uma rede virtual diferente ou atribuir manualmente um endereço IP. Para editar a configuração de rede de uma VM, conclua os seguintes passos:

  1. Pare a VM que quer editar:

    kubectl virt stop VM_NAME
    

    Substitua VM_NAME pelo nome da VM que quer parar.

  2. Use kubectl para editar a VM:

    kubectl edit gvm VM_NAME
    

    Substitua VM_NAME pelo nome da VM que quer editar.

  3. No editor, atualize as definições de configuração de rede que quer alterar.

    Por exemplo, o seguinte manifesto de amostra mostra que a VM se liga a uma rede denominada backend-vlan100 e usa DHCP, uma vez que não está definido nenhum endereço IP:VirtualMachine

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

    Se quiser alterar a rede à qual a VM se liga ou atribuir um endereço IP manual, atualize a configuração de rede no editor, conforme mostrado no exemplo seguinte:

    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 à qual se quer ligar ou adicione a secção ipAddresses e especifique o IP_ADDRESS que a sua VM deve usar.

  4. Guarde e feche o manifesto de VM.

  5. Inicie a VM que editou:

    kubectl virt start VM_NAME
    

    Substitua VM_NAME pelo nome da MV que editou.

  6. Verifique o STATUS da sua VM:

    kubectl get gvm VM_NAME
    

    Certifique-se de que a VM está no estado Running. Se a sua VM pedir uma ligação de rede que o anfitrião não possa fornecer, a VM não pode ser iniciada. Se a VM não estiver no estado Running, verifique o manifesto do recurso VirtualMachine e o suporte da rede anfitriã.

  7. Veja informações detalhadas sobre uma VM através do comando kubectl describe gvm:

    kubectl describe gvm VM_NAME
    

    Substitua VM_NAME pelo nome da MV que editou.

    O exemplo de resultado seguinte mostra as informações condensadas de uma VM, com uma alteração à configuração de rede e endereço IP aplicada com êxito:

    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 mais informações, veja como criar e gerir redes virtuais.

Configure a VM para reinícios automáticos

Muitas alterações de configuração da VM, como alterações às definições do compute, requerem que a VM seja parada e reiniciada para que as alterações sejam sincronizadas com a instância de VM correspondente (VirtualMachineInstance). As VMs executadas em clusters da versão 1.13.0 ou superior podem ser configuradas para serem reiniciadas automaticamente sempre que fizer alterações à respetiva configuração. Quando configura uma VM para usar esta funcionalidade, não precisa de parar e reiniciar uma VM quando edita o respetivo recurso personalizado. O tempo de execução da VM no GDC monitoriza a VM e, se detetar uma alteração de configuração, reinicia a VM automaticamente para sincronizar as alterações.

Se estiver a usar o Config Sync para gerir os seus ficheiros de configuração YAML, esta funcionalidade é especialmente útil. Sem esta funcionalidade, tem de parar manualmente a VM antes de fazer alterações ao recurso personalizado VirtualMachine e iniciar manualmente a VM depois de concluir as alterações.

Para ativar os reinícios automáticos:

  1. Use kubectl para editar a VM:

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

    Pode fazer alterações adicionais à VM, como atualizar o vcpusvalor. Se editar as definições compute, o tempo de execução da VM no GDC reinicia a VM automaticamente quando guarda 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. Guarde e feche o manifesto de VM.

    Se tiver feito outras alterações à VM que precisem de ser sincronizadas com a instância de VM correspondente, o tempo de execução da VM no GDC reinicia a VM. Se só fez a alteração para ativar os reinícios automáticos, não é necessário reiniciar a MV.

  4. Verifique o status da sua VM:

    kubectl get gvm VM_NAME
    

    Consoante a rapidez com que recebe a VM, pode ver state: Starting quando a VM é reiniciada. Quando a VM for reiniciada com êxito, é apresentado state: Running. As alterações de configuração subsequentes ao recurso personalizado VirtualMachine não exigem que pare e inicie a VM manualmente. As alterações subsequentes ao recurso personalizado refletem-se na instância de VM de forma consistente.

Tenha em atenção o seguinte comportamento das funcionalidades situacionais:

  • Se parar uma VM manualmente antes de editar o recurso personalizado VirtualMachine, a alteração da configuração não aciona um reinício. O estado parado da VM antes da alteração da configuração é mantido.

  • Se fez alterações de etiquetas ou agendamento à VM antes de ativar a funcionalidade de reinício automático, a adição de autoRestartOnConfigurationChange agora sem qualquer outra alteração não aciona um reinício. Idealmente, esta funcionalidade mantém a instância de VM consistente com a configuração de VM. No entanto, o tempo de execução da VM no GDC não consegue detetar inconsistências anteriores.

O que se segue?