Ative ou desative o VM Runtime no GDC

Este documento mostra como ativar ou desativar o tempo de execução da VM no Google Distributed Cloud atualizando o recurso personalizado VMRuntime ou executando comandos bmctl.

Antes de começar

Para ativar ou desativar o VM Runtime no GDC, precisa de aceder aos seguintes recursos e ferramentas:

Ative o tempo de execução de VMs no GDC

O tempo de execução da VM no GDC é instalado automaticamente no Google Distributed Cloud versão 1.10 ou superior, mas está desativado por predefinição. Antes de poder executar recursos de VMs no Google Distributed Cloud, tem de ativar o VM Runtime no GDC.

bmctl

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

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    Indique o caminho para o ficheiro kubeconfig do seu cluster. O Google Distributed Cloud gera o ficheiro kubeconfig na estação de trabalho do administrador quando cria um cluster. Por predefinição, o caminho é bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    Se o tempo de execução da VM no GDC já estiver ativado, o comando devolve um erro.

Pode configurar definições adicionais, como as de emulação ou formato de imagem, editando o recurso personalizado VMRuntime.

Recurso personalizado

Para ativar o tempo de execução, atualize o VMRuntime recurso personalizado. Este recurso personalizado é instalado por predefiniçã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 secção spec anterior, podem ser definidos os seguintes valores:

    • enabled: definido como verdadeiro para ativar o tempo de execução da VM no GDC
    • useEmulation: se o seu nó não suportar a virtualização de hardware ou não tiver a certeza, defina o valor como verdadeiro. Se estiver disponível, a virtualização de hardware oferece um melhor desempenho do que a emulação de software. O campo useEmulation tem como predefinição o valor false, se não for especificado.
    • vmImageFormat: suporta dois valores de formato de imagem de disco: raw e qcow2. Se não definir vmImageFormat, o tempo de execução da VM no GDC usa o formato de imagem de disco raw para criar VMs. O formato raw pode oferecer um desempenho melhorado em relação ao formato qcow2, um formato de cópia na gravação, mas pode usar mais espaço em disco. Para mais informações sobre os formatos de imagem da sua VM, consulte Formatos de ficheiros de imagem de disco na documentação do QEMU.
  3. Guarde o recurso personalizado no editor.

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

    kubectl describe vmruntime vmruntime
    

    Os detalhes do recurso personalizado VMRuntime incluem uma secção Status. O tempo de execução da VM no GDC está ativado e a funcionar quando VMRuntime.Status.Ready é apresentado como true.

Desative o VM Runtime no GDC

Quando já não precisar de usar o VM Runtime no GDC, pode desativar esta funcionalidade.

bmctl

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

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

    Indique o caminho para o ficheiro kubeconfig do cluster e os valores das seguintes opções de configuração:

    • --force: defina como true para confirmar que quer eliminar os recursos de VM existentes. O valor predefinido é false.

Recurso personalizado

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

  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. Guarde a especificação de recursos personalizados atualizada no editor.

  4. Para verificar se o recurso personalizado VMRuntime está desativado, veja os pods que são executados no espaço de nomes vm-system:

    kubectl get pods --namespace vm-system
    

    O tempo de execução da VM no GDC está desativado quando apenas os pods que pertencem à implementação vmruntime-controller-manager estão em execução no espaço de nomes.

Compreenda o comportamento para executar VMs

A anotação baremetal.cluster.gke.io/vmrumtime-force-disable pode ser usada no recurso VM Runtime no GDC para definir o comportamento quando o tempo de execução é desativado enquanto as VMs estão em execução no cluster.

O exemplo seguinte mostra que o valor desta anotação está definido como false por predefiniçã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 esta anotação está definida como false, o tempo de execução da VM no GDC tenta proteger as VMs em execução. Elimine todas as VMs em execução antes de o tempo de execução de VMs no GDC ser desativado ou especifique o parâmetro --force=true com o comando bmctl disable vmruntime, conforme mostrado na secção anterior.

A tabela seguinte explica o que acontece às VMs em execução quando esta anotação está definida como true ou false e se especifica o parâmetro --force=true ou não:

Estado do cluster Parâmetro --force vmrumtime-force-disable annotation Comportamento
Nenhuma VM N/A N/A Desative o tempo de execução de VMs no GDC.
VMs existentes True True Eliminar todas as VMs em execução e os recursos relacionados. Desative o tempo de execução de VMs no GDC.
True Falso Eliminar todas as VMs em execução e os recursos relacionados. Desative o tempo de execução de VMs no GDC.
Falso True Pede para eliminar VMs em execução e recursos relacionados. Quando todas as VMs em execução forem eliminadas, desative o VM Runtime no GDC.
Falso Falso Não elimine nenhuma VM existente em execução. Não desative o tempo de execução de VMs no GDC. O comando bmctl devolve um erro.

Verificação prévia do tempo de execução da VM no GDC

A verificação prévia do tempo de execução da VM no GDC valida um conjunto de pré-requisitos no ambiente da máquina antes de usar o tempo de execução da VM no GDC e nas VMs. A criação de VMs é bloqueada se a verificação prévia do tempo de execução de VMs no GDC falhar. A verificação prévia do tempo de execução da VM no GDC é executada automaticamente quando spec.enabled está definido como verdadeiro.

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

A verificação prévia do tempo de execução da VM no GDC é executada quando realiza qualquer uma das seguintes operações:

  1. Ative o tempo de execução de VMs no GDC

  2. Ative o tempo de execução de VMs nas funcionalidades do GDC, como useEmulation

  3. Atualize clusters

  4. Remova a etiqueta kubevm.io/VM-SkipSchedule nos nós

  5. Crie independentemente o VM Runtime no objeto de verificação prévia do GDC executando o comando bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH ou aplicando um manifesto YAML VMRuntimePreflightCheck.

Pode iniciar VMs quando a pré-verificação do tempo de execução da VM mais recente no GDC for bem-sucedida. Se a verificação prévia falhar, a criação da VM é bloqueada e recebe erros de verificação prévia.

Validar o êxito da verificação prévia

Para verificar se as verificações pré-voo foram bem-sucedidas, execute os seguintes comandos:

  1. Encontre as últimas verificações pré-publicação realizadas:

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

    O resultado deve 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 estado de uma verificação pré-publicaçã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
    ...
    

Falhas na verificação prévia de depuração

Se a verificação prévia falhar, siga estes passos para depurar:

  1. Encontre as últimas verificações pré-voo realizadas.

    kubectl get vmruntimepfc -n vm-system
    
  2. Verifique o estado dessa verificação pré-voo para ver 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 novamente a verificação prévia do tempo de execução da VM no GDC. O exemplo seguinte mostra um manifesto YAML VMRuntimePreflightCheck:

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

O que se segue?