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:
- Acesso ao cluster da versão 1.12.0 (anthosBareMetalVersion: 1.12.0) ou superior do Google Distributed Cloud. Pode usar qualquer tipo de cluster capaz de executar cargas de trabalho. Se necessário, experimente o Google Distributed Cloud no Compute Engine ou consulte a vista geral da criação de clusters.
- A ferramenta de linhas de comandos bmctl. Para mais informações, consulte o artigo Transfira e instale a ferramentabmctl.
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.
- Edite o recurso personalizado - VMRuntime:- kubectl edit vmruntime
- Defina - enabled:truena 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 - specanterior, 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- useEmulationtem como predefinição o valor- false, se não for especificado.
- vmImageFormat: suporta dois valores de formato de imagem de disco:- rawe- qcow2. Se não definir- vmImageFormat, o tempo de execução da VM no GDC usa o formato de imagem de disco- rawpara criar VMs. O formato- rawpode 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.
 
- Guarde o recurso personalizado no editor. 
- Verifique se o recurso personalizado - VMRuntimeestá ativado:- kubectl describe vmruntime vmruntime- Os detalhes do recurso personalizado - VMRuntimeincluem 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- truepara 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:
- Edite o recurso personalizado - VMRuntime:- kubectl edit vmruntime
- Defina - enabled:falsena especificação:- apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2
- Guarde a especificação de recursos personalizados atualizada no editor. 
- Para verificar se o recurso personalizado - VMRuntimeestá 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-managerestã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 bmctldevolve 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:
- Ative o tempo de execução de VMs no GDC 
- Ative o tempo de execução de VMs nas funcionalidades do GDC, como useEmulation 
- Atualize clusters 
- Remova a etiqueta - kubevm.io/VM-SkipSchedulenos nós
- Crie independentemente o VM Runtime no objeto de verificação prévia do GDC executando o comando - bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATHou 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:
- 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
- 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:
- Encontre as últimas verificações pré-voo realizadas. - kubectl get vmruntimepfc -n vm-system
- 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 ...
- 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