Ativar ou desativar o ambiente de execução de VMs no Google Distributed Cloud

Neste documento, mostramos como ativar ou desativar o ambiente de execução de VMs no Google Distributed Cloud atualizando o recurso personalizado VMRuntime ou executando comandos bmctl.

Antes de começar

Para ativar ou desativar o ambiente de execução de VMs no Google Distributed Cloud, é preciso ter acesso aos seguintes recursos e ferramentas:

Ativar o ambiente de execução de VMs no Google Distributed Cloud

O ambiente de execução de VMs no Google Distributed Cloud é instalado automaticamente no GKE em Bare Metal versão 1.10 ou mais recente, mas está desativado por padrão. Antes de executar recursos de VM no GKE em Bare Metal, ative o ambiente de execução de VM no Google Distributed Cloud.

bmctl

  • Para ativar o ambiente de execução, use a ferramenta bmctl:

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    Forneça o caminho para o arquivo kubeconfig do cluster. O GKE em Bare Metal gera o arquivo kubeconfig na estação de trabalho do administrador quando você cria um cluster. Por padrão, o caminho é bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    Se o ambiente de execução de VMs no Google Distributed Cloud já estiver ativado, o comando retornará um erro.

Configurações adicionais, como emulação ou formato de imagem, podem ser definidas editando o recurso personalizado VMRuntime.

Recurso personalizado

Para ativar o ambiente de execução, atualize o recurso personalizado VMRuntime. Esse recurso personalizado é instalado por padrão.

  1. Edite o recurso personalizado VMRuntime:

    kubectl edit vmruntime
    
  2. Defina enabled:true na especificação:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation defaults to "false" if not set.
      useEmulation: true
      # vmImageFormat defaults to "qcow2" if not set.
      vmImageFormat: qcow2
    

    Na seção spec anterior, os seguintes valores podem ser definidos:

    • enabled: defina como verdadeiro para ativar o ambiente de execução de VM no Google Distributed Cloud
    • useEmulation: se o nó não for compatível com a virtualização por hardware ou você não tiver certeza, defina o valor como "true". Se disponível, a virtualização de hardware oferece um desempenho melhor do que a emulação de software. O campo useEmulation terá false como padrão se não for especificado.
    • vmImageFormat: compatível com dois valores de formato de imagem de disco: raw e qcow2. Se você não definir vmImageFormat, o ambiente de execução de VM no Google Distributed Cloud usará o formato de imagem de disco raw para criar VMs. O formato raw pode melhorar o desempenho em relação ao qcow2, uma cópia no formato de gravação, mas pode usar mais disco. Para mais informações sobre os formatos de imagem da VM, consulte Formatos de arquivo de imagem de disco na documentação do QEMU.
  3. Salve o recurso personalizado no seu editor.

  4. Verifique se o recurso personalizado VMRuntime está ativado:

    kubectl describe vmruntime vmruntime
    

    Os detalhes do recurso personalizado VMRuntime incluem uma seção Status. O ambiente de execução de VM no Google Distributed Cloud está ativado e funcionando quando VMRuntime.Status.Ready é exibido como true.

Desativar o ambiente de execução de VMs no Google Distributed Cloud

Quando você não precisar mais usar o ambiente de execução de VMs no Google Distributed Cloud, desative esse recurso.

bmctl

  • Para desativar o ambiente de execução, use a ferramenta bmctl:

    bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \
      --force=true
    

    Forneça o caminho para o arquivo kubeconfig do cluster e os valores das seguintes opções de configuração:

    • --force: defina como true para confirmar que você quer excluir os recursos de VM atuais. O valor padrão é false.

Recurso personalizado

Para desativar o ambiente de execução, atualize o recurso personalizado VMRuntime:

  1. Edite o recurso personalizado VMRuntime:

    kubectl edit vmruntime
    
  2. Defina enabled:false na especificação:

    apiVersion: vm.cluster.gke.io/v1`
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: false
      useEmulation: true
      vmImageFormat: qcow2
    
  3. Salve a especificação atualizada de recursos personalizados no editor.

  4. Para verificar se o recurso personalizado VMRuntime está desativado, veja os pods executados no namespace vm-system:

    kubectl get pods --namespace vm-system
    

    O ambiente de execução de VMs no Google Distributed Cloud é desativado quando apenas os pods que pertencem à implantação vmruntime-controller-manager estão em execução no namespace.

Entenda o comportamento para executar VMs

A anotação baremetal.cluster.gke.io/vmrumtime-force-disable pode ser usada no ambiente de execução de VMs no recurso do Google Distributed Cloud para definir o comportamento quando o ambiente de execução for desativado enquanto as VMs estão em execução no cluster.

O exemplo a seguir mostra que o valor dessa anotação é definido como false por padrão:

  // VM runtime yaml file
  apiVersion: vm.cluster.gke.io/v1
  kind: VMRuntime
  metadata:
    annotations:
      baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
    name: vmruntime
  [...]

Quando essa anotação é definida como false, o ambiente de execução de VMs no Google Distributed Cloud tenta proteger as VMs em execução. Exclua todas as VMs em execução antes que o ambiente de execução de VMs no Google Distributed Cloud seja desativado ou especifique o parâmetro --force=true com o comando bmctl disable vmruntime, conforme a seção anterior.

A tabela a seguir explica o que acontece com as VMs em execução quando essa anotação está definida como true ou false e se você especifica o parâmetro --force=true ou não:

Estado do cluster --force parameter vmrumtime-force-disable annotation Comportamento
Nenhuma VM N/A N/A Desativar o ambiente de execução de VMs no Google Distributed Cloud.
VMs atuais Verdadeiro Verdadeiro Exclua todas as VMs em execução e os recursos relacionados. Desativar o ambiente de execução de VMs no Google Distributed Cloud.
Verdadeiro Falso Exclua todas as VMs em execução e os recursos relacionados. Desativar o ambiente de execução de VMs no Google Distributed Cloud.
Falso Verdadeiro Solicitação para excluir VMs em execução e recursos relacionados. Quando todas as VMs em execução forem excluídas, desative o ambiente de execução de VMs no Google Distributed Cloud.
Falso Falso Não exclua nenhuma VM atual que esteja em execução. Não desative o ambiente de execução de VMs no Google Distributed Cloud. O comando bmctl retorna um erro.

Verificação de simulação do ambiente de execução de VMs no Google Distributed Cloud

A verificação de simulação do ambiente de execução de VMs no Google Distributed Cloud define um conjunto de pré-requisitos no ambiente da máquina antes de usar o ambiente de execução de VMs no Google Distributed Cloud e em VMs. A criação da VMs é bloqueada se o ambiente de execução de VMs falha na verificação de simulação do Google Distributed Cloud falhar. A verificação de simulação do ambiente de execução de VMs no Google Distributed Cloud é executada automaticamente quando spec.enabled é definido como verdadeiro.

kubectl label nodes NODE_NAME   "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH

A verificação de simulação do ambiente de execução de VMs no Google Distributed Cloud é executada quando você realiza qualquer uma das seguintes operações:

  1. Ativar o ambiente de execução da VM no Google Distributed Cloud
  2. Ativar o ambiente de execução de VMs nos recursos do Google Distributed Cloud, como useEmulation
  3. Fazer upgrade de clusters
  4. Remover o identificador kubevm.io/VM-SkipSchedule nos nós
  5. Crie de maneira independente o ambiente de execução de VMs no objeto de verificação de simulação do Google Distributed Cloud. Basta executar o comando bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH ou aplicar um manifesto YAML VMRuntimePreflightCheck.

É possível iniciar VMs quando a verificação de simulação do ambiente de execução de VMs mais recente no Google Distributed Cloud for bem-sucedida. Se a verificação de simulação falhar, a criação da VM será bloqueada e você receberá erros de verificação de simulação.

Como verificar o sucesso da verificação da simulação

Para verificar se as verificações de simulação foram bem-sucedidas, execute os seguintes comandos:

  1. Encontre as últimas verificações de simulação realizadas:

    kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
    

    A saída será semelhante ao seguinte exemplo:

    NAME                                                             PASS    AGE
    vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e   false   42s
    vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5   true    21s
    
  2. Para encontrar o status de uma verificação de simulação, execute o seguinte comando:

       kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
    
       ...
         preflightCheckSummary:
         preflightCheckSummary:
           featureStatuses:
             CPU:
               passed: true
             KVM:
               passed: true
           preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5
           preflightCheckPassed: true
       ...
    
     ```
    

Falha na verificação da simulação de depuração

Se a verificação de simulação falhar, siga estas etapas para depurar:

  1. Encontre as últimas verificações de simulação realizadas.

    kubectl get vmruntimepfc -n vm-system
    
  2. Verifique o status da verificação de simulação para mais detalhes.

    kubectl get vmruntimepfc -n vm-system \
        vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \
        --kubeconfig KUBECONFIG_PATH
    
      ...
      status:
      checks:
       worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos:
         passed: false
         results:
         - checkName: CPU
           passed: true
         - checkName: KVM
           message: |
             command terminated with exit code 1
             ls: /mnt/dev/kvm: No such file or directory
           passed: false
      ...
    
  3. Corrija o problema e execute o ambiente de execução de VMs na verificação de simulação do Google Distributed Cloud novamente. Veja a seguir um exemplo de manifesto YAML VMRuntimePreflightCheck:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

A seguir