É 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:
Localize o nome do servidor da API Management ou pergunte ao administrador da plataforma (PA) qual é o nome do servidor.
Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.
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:
- 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.
- Pare os aplicativos para que não gravem mais dados no disco permanente.
- 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
Selecione um projeto.
No menu de navegação, clique em Máquinas virtuais > Imagens.
Clique em Criar imagem.
Insira um nome exclusivo para a imagem. O nome não pode ter mais de 35 caracteres.
Insira uma versão para adicionar ao nome da imagem.
No campo Disco de origem, selecione um disco.
No campo Tamanho mínimo do disco, insira um tamanho.
Insira uma descrição da imagem.
Clique em Criar.
A imagem aparece na lista de imagens.
API
Liste todos os objetos
VirtualMachineDisk:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECTSelecione um objeto
VirtualMachineDiskpara usar como disco de origem da nova imagem.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":"...."}]- Se a saída retornar um valor para
"name", o disco estará anexado a uma VM indicada pelo camponame. Neste exemplo de saída, évm1. Verifique o status de execução da VM. - Se a saída estiver vazia, siga para receber o
sizedoVirtualMachineDisk.
- Verifique
o status de execução da VM. Se o status não for
Stopped, pare a VM e crie oVirtualMachineImage.
- Se a saída retornar um valor para
Receba o
sizedeVirtualMachineDiskpara criar a imagem:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \ DISK_NAME -o jsonpath='{.spec.size}'Crie um objeto
VirtualMachineImageImportno 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 EOFVerifique 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 }Verifique se a imagem foi criada:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \ CREATED_IMAGE_NAMESubstitua as variáveis usando as seguintes definições.
Variável Definição MANAGEMENT_API_SERVERO arquivo kubeconfigdo servidor da API Management.PROJECTO projeto do GDC em que a imagem será criada. DISK_NAMEO nome do disco de origem, como vm1-boot-disk.VM_IMAGE_IMPORT_NAMEO nome da importação da imagem da VM. O nome não pode ter mais de 35 caracteres. IMAGE_NAMEO nome da imagem criada, como custom-image.OS_NAMEO nome do SO da imagem precisa ser um destes três: ubuntu-2004,windows-2019ourhel-8.MINIMUM_DISK_SIZEO 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_NAMEO nome da imagem criada. O nome da imagem criada precisa ser exclusivo e não pode ser um nome que já existe no projeto.