Criar imagens personalizadas

É possível criar imagens personalizadas com base em discos de origem e usá-las para criar e iniciar máquinas virtuais (VMs). As imagens personalizadas são ideais para uso quando você criou e modificou um disco de inicialização permanente para determinado estado e precisa salvar esse estado para criar VMs. Criar e salvar uma imagem personalizada para usar como uma nova imagem de VM na criação de VMs futuras evita a duplicação das etapas de configuração mais tarde.

Antes de começar

Para usar os comandos da interface de linha de comando (CLI) gdcloud, verifique se você baixou, instalou e configurou a CLI gdcloud. Todos os comandos para o appliance isolado do GDC usam a CLI gdcloud ou kubectl e exigem um ambiente Linux.

Extrair o caminho do arquivo kubeconfig

Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:

  1. Localize o nome do servidor da API Management ou pergunte ao administrador da plataforma (PA) qual é o nome do servidor.

  2. Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.

  3. Use o caminho para substituir MANAGEMENT_API_SERVER{"</var>"}} nestas instruções.

Solicitar permissões e acesso

Para criar uma imagem personalizada, você precisa ter acesso à imagem de VM no nível do projeto. Siga as etapas fornecidas para que o administrador do IAM do projeto atribua a você a função de administrador de imagens de máquinas virtuais do projeto (project-vm-image-admin) no namespace do projeto em que a VM reside. Se você usar o console do GDC ou a CLI gdcloud para criar uma imagem, também precisará das funções de administrador de máquina virtual do projeto (project-vm-admin) e leitor do projeto (project-viewer).

Criar uma imagem personalizada

Nesta seção, descrevemos como criar uma imagem personalizada em uma VM do Linux.

Prepare a VM para uma imagem

É possível criar uma imagem de um disco enquanto ele está anexado a uma VM em execução. No entanto, a imagem torna-se mais confiável se você a coloca em um estado mais fácil para a captura da imagem.

Minimizar a gravação de dados no disco permanente

Use um dos seguintes processos para reduzir as gravações de disco. Pare a VM ou minimize as gravações no disco:

  • Pare a VM para que ela possa ser encerrada e parar de gravar dados no disco permanente.

Se não for possível parar a VM antes de criar a imagem, minimize as gravações no disco e sincronize o sistema de arquivos. Para minimizar as gravações no disco permanente, siga estas etapas:

  1. Pause os apps ou processos do SO que gravam dados nesse disco permanente. Execute uma limpeza de app no disco, se necessário. Outros aplicativos talvez usem processos semelhantes.
  2. Pare os aplicativos para que não gravem mais dados no disco permanente.
  3. Execute sudo sync.

Criar a imagem

Siga estas etapas para criar imagens de disco de um disco permanente, mesmo que ele esteja anexado a uma VM:

Console

  1. Selecione um projeto.

  2. No menu de navegação, clique em Máquinas virtuais > Imagens.

  3. Clique em Criar imagem.

  4. Insira um nome exclusivo para a imagem. O nome não pode ter mais de 35 caracteres.

  5. Insira uma versão para adicionar ao nome da imagem.

  6. No campo Disco de origem, selecione um disco.

  7. No campo Tamanho mínimo do disco, insira um tamanho.

  8. Insira uma descrição da imagem.

  9. Clique em Criar.

A imagem aparece na lista de imagens.

API

  1. Liste todos os objetos VirtualMachineDisk:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. Selecione um objeto VirtualMachineDisk para usar como disco de origem da nova imagem.

  3. Verifique se o disco da VM está anexado a uma VM:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
          get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
          DISK_NAME -o jsonpath='{.status.virtualMachineAttachments}'
    

    Exemplo de saída mostrando que um disco está anexado a uma VM:

      [{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]
    
    1. Verifique o status de execução da VM. Se o status não for Stopped, pare a VM e crie o VirtualMachineImage.
  4. Receba o size de VirtualMachineDisk para criar a imagem:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. Crie um objeto VirtualMachineImageImport no servidor da API Management:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImageImport
    metadata:
      name: VM_IMAGE_IMPORT_NAME
    spec:
      source:
        diskRef:
          name: DISK_NAME
      imageMetadata:
        name: IMAGE_NAME
        operatingSystem: OS_NAME
        minimumDiskSize: MINIMUM_DISK_SIZE
    EOF
    
  6. Verifique se a importação de imagens foi concluída e se o status é Ready:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimageimports.virtualmachine.gdc.goog --namespace PROJECT \
        VM_IMAGE_IMPORT_NAME -o jsonpath='{.status}'
    

    O status vai ficar assim quando a importação for concluída:

    {
      "conditions": [
        {
          "lastTransitionTime": "",
          "message": "",
          "observedGeneration": 1,
          "reason": "ImportJobComplete",
          "status": "True",
          "type": "Ready"
        }
      ],
      "imageName": IMAGE_NAME
    }
    
  7. Verifique se a imagem foi criada:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \
        CREATED_IMAGE_NAME
    

    Substitua as variáveis usando as seguintes definições.

    VariávelDefinição
    MANAGEMENT_API_SERVER O arquivo kubeconfig do servidor da API Management.
    PROJECT O projeto do GDC em que a imagem será criada.
    DISK_NAME O nome do disco de origem, como vm1-boot-disk.
    VM_IMAGE_IMPORT_NAME O nome da importação da imagem da VM. O nome não pode ter mais de 35 caracteres.
    IMAGE_NAME O nome da imagem criada, como custom-image.
    OS_NAME O nome do SO da imagem precisa ser um destes três:
    ubuntu-2004, windows-2019 ou rhel-8.
    MINIMUM_DISK_SIZE O tamanho mínimo do disco na importação de imagens de VM, como 20G:
    minimumDiskSize, precisa ser sempre maior ou igual ao tamanho do disco de inicialização de origem.
    CREATED_IMAGE_NAME O nome da imagem criada. O nome da imagem criada precisa ser exclusivo e não pode ser um nome que já existe no projeto.