Gerenciar máquinas virtuais em racks conectados do Distributed Cloud

Nesta página, descrevemos como gerenciar máquinas virtuais em racks conectados do Google Distributed Cloud que executam o ambiente de execução de VM no Google Distributed Cloud. É necessário conhecer o ambiente de execução de VM no GDC antes de concluir as etapas nesta página. Para uma lista de sistemas operacionais convidados compatíveis, consulte Sistemas operacionais convidados verificados para o ambiente de execução de VMs no GDC.

Para saber como as máquinas virtuais servem como um componente essencial da plataforma conectada do Distributed Cloud, consulte Extensão do GKE Enterprise para gerenciar VMs de borda locais.

Os clusters conectados do Distributed Cloud são compatíveis com webhooks máquina virtual. Isso permite que o Distributed Cloud Connected valide as solicitações de usuários feitas ao servidor da API Kubernetes local. As solicitações rejeitadas geram informações detalhadas sobre o motivo da rejeição.

Ativar o suporte do ambiente de execução de VMs no GDC no Distributed Cloud Connected

Por padrão, o suporte a máquina virtual do ambiente de execução de VMs no GDC está desativado no Distributed Cloud Connected. Para ativar, siga as etapas nesta seção. As instruções nesta seção pressupõem que você tenha um cluster conectado do Distributed Cloud totalmente funcional.

  1. Modifique o recurso personalizado VMRuntime com o conteúdo a seguir e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"
      # Set node grace period to 55 seconds;
      haPolicy:
        defaultRecoveryStrategy: Reschedule
        nodeHeartbeatInterval: 15s
        nodeMonitorGracePeriod: 55s

    Não mude o valor do parâmetro vmImageFormat. O Distributed Cloud Connected não é compatível com nenhum outro formato de disco virtual.

    Esse processo geralmente leva alguns minutos para ser concluído.

    Não mude o valor do parâmetro vmImageFormat. O Distributed Cloud Connected não é compatível com nenhum outro formato de disco virtual.

    Esse processo geralmente leva alguns minutos para ser concluído.

  2. Use o seguinte comando para verificar se o recurso personalizado VMRuntime foi aplicado ao cluster:

    kubectl get vmruntime -o yaml

    O comando retorna uma saída semelhante a este exemplo:

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. Use o comando a seguir para verificar se o suporte a máquina virtual do ambiente de execução de VM no GDC foi ativado no cluster:

    kubectl get pods -n vm-system

    O comando retorna uma saída mostrando os pods do subsistema do VM Runtime no GDC em execução no cluster, semelhante ao exemplo a seguir:

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

Instalar a ferramenta de gerenciamento virtctl

Você precisa da ferramenta de cliente virtctl para gerenciar máquinas virtuais no cluster conectado do Distributed Cloud. Para instalar a ferramenta, siga estas etapas:

  1. Instalar a ferramenta do cliente virtctl como um plug-in kubectl

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl /usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. Verifique se o plug-in virt está instalado:

    kubectl plugin list

    Se o plug-in tiver sido instalado, a saída do comando vai listar kubectl-virt como um dos plug-ins.

Provisionar uma máquina virtual no Distributed Cloud Connected

Esta seção fornece exemplos de configuração que ilustram como provisionar uma máquina virtual Linux e uma máquina virtual Windows em um cluster conectado do Distributed Cloud com a camada de abstração de armazenamento do Symcloud.

Não é possível criar uma máquina virtual diretamente em um cluster conectado do Distributed Cloud usando o comando kubectl virt porque o Distributed Cloud Connected não oferece armazenamento de sistema de arquivos para máquinas virtuais.

Antes de concluir as etapas nesta seção, conclua as etapas em Configurar o Distributed Cloud Connected para o Symcloud Storage. Se você desativar o Symcloud Storage no cluster, as máquinas virtuais configuradas para usar esse serviço vão falhar.

Provisionar uma máquina virtual Linux no Distributed Cloud conectado

O exemplo a seguir ilustra como provisionar uma máquina virtual Linux com o Symcloud Storage executando o Ubuntu Server 22.04. A origem da instalação é a imagem do disco ISO do Ubuntu Server 22.04.

  1. Crie um recurso VirtualMachineDisk com o conteúdo a seguir para a imagem do disco de instalação do Ubuntu Server e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. Crie um recurso VirtualMachineDisk com o seguinte conteúdo para o disco rígido virtual da máquina virtual e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. Crie um recurso VirtualMachineType com o seguinte conteúdo, que especifica a configuração da máquina virtual, e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. Crie um recurso VirtualMachine com o conteúdo a seguir, que instancia e inicia a máquina virtual no cluster. Em seguida, aplique ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    Você também precisa configurar os seguintes recursos no cluster:

  5. Instale o Ubuntu Server na máquina virtual:

    1. Aguarde o pod importer fazer o download da imagem do disco de instalação do Ubuntu Server.
    2. Verifique o status da máquina virtual:

      kubectl get gvm VM_NAME

      Substitua VM_NAME pelo nome da máquina virtual, ubu-vm neste exemplo.

    3. Faça login na máquina virtual usando SSH ou Área de trabalho remota.

    4. Conclua as etapas de instalação do Ubuntu Linux.

  6. Limpeza:

    1. Pare a máquina virtual:

      kubectl virt stop VM_NAME

      Substitua VM_NAME pelo nome da máquina virtual, ubu-vm neste exemplo.

    2. Edite o arquivo YAML da máquina virtual para remover a referência à imagem do disco de instalação:

      kubectl edit gvm VM_NAME

      Substitua VM_NAME pelo nome da máquina virtual, ubu-vm neste exemplo.

    3. Inicie a máquina virtual:

      kubectl virt start VM_NAME

      Substitua VM_NAME pelo nome da máquina virtual, ubu-vm neste exemplo.

    4. Exclua o recurso VirtualMachineDisk para a imagem do disco de instalação:

      kubectl delete virtualmachinedisk ubuntu-iso-disk

Provisionar uma máquina virtual do Windows no Distributed Cloud Connected

O exemplo a seguir mostra como provisionar uma máquina virtual do Windows com o Symcloud Storage. As etapas são semelhantes ao provisionamento de uma máquina virtual Linux, com a adição da imagem de disco do driver virtio, que é necessária para instalar o Windows.

  1. Consiga uma cópia licenciada do Windows e a imagem da mídia de instalação.

  2. Crie um recurso VirtualMachineDisk com o seguinte conteúdo para a imagem do disco de instalação do Windows e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    Substitua NAT_GATEWAY pelo URL completo da imagem ISO do disco de instalação do Windows de destino.

  3. Crie um recurso VirtualMachineDisk com o conteúdo a seguir para o driver virtio e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. Crie um recurso VirtualMachineDisk com o seguinte conteúdo para o disco rígido virtual da máquina virtual e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. Crie um recurso VirtualMachineType com o seguinte conteúdo, que especifica a configuração da máquina virtual, e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. Crie um recurso VirtualMachine com o seguinte conteúdo, que instancia e inicia a máquina virtual no cluster, e aplique-o ao cluster:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    Você também precisa configurar os seguintes recursos no cluster:

  7. Instale o Windows na máquina virtual:

    1. Aguarde o pod importer fazer o download da imagem do disco de instalação do Windows.
    2. Verifique o status da máquina virtual:

      kubectl get gvm VM_NAME

      Substitua VM_NAME pelo nome da máquina virtual, win-vm neste exemplo.

    3. Conclua a instalação do Windows seguindo as etapas em Conectar-se à VM do Windows e concluir a instalação do SO.

  8. Limpeza:

    1. Pare a máquina virtual:

      kubectl virt stop VM_NAME

      Substitua VM_NAME pelo nome da máquina virtual, win-vm neste exemplo.

    2. Conclua as etapas em Remover a imagem ISO e o disco dos drivers.

Gerenciar máquinas virtuais em execução no Distributed Cloud Connected

Para instruções sobre como gerenciar máquinas virtuais em execução no Distributed Cloud Connected, consulte a seguinte documentação do ambiente de execução de VM no GDC:

Para gerenciar máquinas virtuais em execução no Distributed Cloud Connected, primeiro é necessário Configurar a conectividade kubectl.

Desativar o ambiente de execução de VM no GDC no Distributed Cloud Connected

Siga as etapas nesta seção para desativar o ambiente de execução de VMs no GDC no Distributed Cloud Connected. Antes de desativar o ambiente de execução de VMs no GDC no Distributed Cloud Connected, você precisa interromper e excluir todas as máquinas virtuais no seu cluster do Distributed Cloud Connected, conforme descrito em Excluir uma VM.

Para desativar o ambiente de execução de VMs no GDC no Distributed Cloud Connected, modifique o recurso personalizado VMRuntime definindo o parâmetro de especificação enabled como false da seguinte maneira e aplique ao cluster:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

Acessar registros de auditoria do sandbox do AppArmor

O Distributed Cloud conectado automaticamente coloca em sandbox as cargas de trabalho máquina virtual com políticas AppArmor em audit-mode. Uma violação de política gera uma entrada de registro de auditoria. Exemplo:

{
  "jsonPayload": {
    "_SOURCE_REALTIME_TIMESTAMP": "1734596844149104",
    "SYSLOG_TIMESTAMP": "Dec 19 08:27:24 ",
    "MESSAGE": "type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"",
    "PRIORITY": "6",
    ...
    "SYSLOG_RAW": "<14>Dec 19 08:27:24 audisp-syslog: type=AVC msg=audit(1734596844.148:27742): apparmor=\"ALLOWED\" operation=\"open\" profile=\"virt-launcher-audit\" name=\"/etc/libvirt/virtlogd.conf\" pid=182406 comm=\"virtlogd\" requested_mask=\"r\" denied_mask=\"r\" fsuid=0 ouid=0 FSUID=\"root\" OUID=\"root\"\n",
    "SYSLOG_IDENTIFIER": "audisp-syslog",
    "_GID": "0",
  },
  "timestamp": "2024-12-19T08:27:24.149109Z",
  "labels": {
    "gke.googleapis.com/log_type": "system"
  },
  "receiveTimestamp": "2024-12-19T08:27:24.721842807Z"
  ...
  ...

A seguir