Práticas recomendadas para famílias de imagens

Neste documento, você saberá quais são as práticas recomendadas ao usar famílias de imagens no Compute Engine.

Antes de começar

Família de imagens públicas

O Compute Engine fornece famílias de imagens para ajudar você a garantir que seus sistemas de automação possam fazer referência às imagens mais recentes. Como administrador, é possível agrupar um conjunto de imagens como uma família de imagens. Nesse caso, os usuários das imagens só precisarão tomar nota do nome da família de imagens, em vez do nome de uma determinada imagem. Como os nomes das imagens precisam ser exclusivos, os pipelines de criação de imagens geralmente criam nomes de imagens com informações codificadas neles, como nome, data e versão do aplicativo (por exemplo, my-application-v3-20210101). Em relação às ferramentas de automação, é possível fazer referência ao nome da família de imagens em vez de precisar atualizar o nome da imagem em intervalos. O uso de famílias de imagens garante que você sempre acesse a imagem mais recente na família, por exemplo, my-application.

Famílias de imagens

As imagens públicas são agrupadas em famílias. Uma família de imagens públicas sempre indica a versão mais recente de uma imagem que está disponível em cada zona. Quando novas imagens são lançadas globalmente, a disponibilidade inicial delas nas famílias depende da zona, o que melhora a tolerância a falhas zonais para seus fluxos de trabalho durante as atualizações de imagens do Google.

Durante o lançamento, a versão mais recente de uma imagem em uma família pode ser diferente em zonas diferentes. Por exemplo, a família de imagens debian-10 no projeto debian-cloud sempre indica a imagem mais recente do Debian 10, mas a imagem mais recente do Debian 10 nas zonas us-central1-a e southamerica-east1-b podem ser diferentes.

Quando você cria VMs a partir de famílias de imagens usando o Console do Google Cloud e a ferramenta de linha de comando gcloud, o Compute Engine cria sua VM usando a imagem mais recente disponível na zona da VM. Se você quiser criar VMs usando a imagem mais recente disponível globalmente, use o comando instances create da ferramenta gcloud e especifique --image-family-scope=global.

Como visualizar a versão da imagem mais recente disponível

Globalmente

Para visualizar a imagem mais recente disponível globalmente em uma família de imagens, use um dos seguintes métodos:

gcloud

Use o comando gcloud compute images describe-from-family (em inglês).

gcloud compute images describe-from-family IMAGE_FAMILY_NAME  \
   --project=IMAGE_PROJECT

Substitua:

  • IMAGE_FAMILY_NAME: o nome da família de imagens que você quer pesquisar. Para uma lista completa de nomes de famílias de imagens, consulte Detalhes do sistema operacional.
  • IMAGE_PROJECT: o nome do projeto de imagem. Para uma lista completa de nomes de projetos de imagem, consulte Detalhes do sistema operacional.

API

Faça uma solicitação GET ao método images.getFromFamily.

GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY_NAME

Substitua:

  • IMAGE_PROJECT: o nome do projeto de imagem. Para uma lista completa de nomes de projetos de imagem, consulte Detalhes do sistema operacional.
  • IMAGE_FAMILY_NAME: o nome da família de imagens que você quer pesquisar. Para uma lista completa de nomes de famílias de imagens, consulte Detalhes do sistema operacional.

Por zona

Para visualizar a imagem mais recente disponível em uma família de imagens de uma zona específica, use um dos seguintes métodos:

gcloud

Use o comando gcloud beta compute images describe-from-family (em inglês).

gcloud beta compute images describe-from-family IMAGE_FAMILY_NAME  \
   --project=IMAGE_PROJECT \
   --zone=ZONE

Substitua:

  • IMAGE_FAMILY_NAME: o nome da família de imagens que você quer pesquisar. Para uma lista completa de nomes de famílias de imagens, consulte Detalhes do sistema operacional.
  • IMAGE_PROJECT: o nome do projeto de imagem. Para uma lista completa de nomes de projetos de imagem, consulte Detalhes do sistema operacional.
  • ZONE: a zona que você quer consultar.

API

Faça uma solicitação GET ao método imageFamilyViews.

GET https://compute.googleapis.com/compute/beta/projects/IMAGE_PROJECT/zones/ZONE/imageFamilyViews/IMAGE_FAMILY_NAME

Substitua:

  • IMAGE_PROJECT: o nome do projeto de imagem. Para uma lista completa de nomes de projetos de imagem, consulte Detalhes do sistema operacional.
  • ZONE: a zona que você quer consultar.
  • IMAGE_FAMILY_NAME: o nome da família de imagens que você quer pesquisar. Para uma lista completa de nomes de famílias de imagens, consulte Detalhes do sistema operacional.

Famílias de imagens personalizadas

É possível criar suas próprias imagens com uma família de imagens personalizadas. A família de imagens indica a imagem mais recente usada para criar a família de imagens. Para reverter uma família de imagens para uma versão anterior, suspenda o uso da imagem mais recente dessa família (contanto que a imagem anterior não esteja obsoleta). Para mais informações, consulte Como definir versões em uma família de imagens.

Para criar uma imagem com uma família de imagens ou criar uma família dessas, caso não exista, é preciso adicionar uma sinalização --family adicional à etapa de criação da imagem. Por exemplo:

gcloud compute images create my-application-v3-20210101 \
    --source-disk my-application-disk-1 \
    --source-disk-zone us-central1-f \
    --family my-application

Depois de executar esse comando, todas as chamadas para executar uma instância com base na imagem my-application indicarão a imagem recém-criada: my-application-v3-20210101.

Como usar famílias de imagens

Embora as famílias de imagens permitam fazer referência à imagem mais recente, essa imagem pode gerar incompatibilidade com seu aplicativo, o que pode causar problemas em um ambiente de produção se não for validado. Se você quiser aproveitar os benefícios das famílias de imagens ao mesmo tempo que reduz os riscos, recomendamos testar a imagem referenciada mais recente da família de imagens antes de usá-la no ambiente de produção.

Em resumo, é possível considerar esta abordagem:

  • Configure um ambiente de teste separado do ambiente de produção.
  • No ambiente de teste, conclua as seguintes etapas:
    • Crie uma família de imagens personalizada da família de imagens de origem.
    • Verifique a estabilidade da nova imagem na família de imagens personalizada em relação às cargas de trabalho.
  • Após a verificação, mova essa família de imagens personalizada para um ambiente de produção.

Por exemplo, talvez o processo seja semelhante ao procedimento a seguir.

  1. No projeto de teste, crie uma imagem da família de imagens de origem. Essa nova família de imagens de origem também precisa ter a própria família de imagens personalizada para referenciar no ambiente de teste. Para criar a imagem com uma família de imagens personalizada, execute este comando:

    gcloud compute images create test-image-name \
    --source-image-project source-project \
    --source-image-family source-image-family \
    --project test-project \
    --family test-image-family
    

    Substitua:

    • test-image-name: nome da imagem de teste.
    • source-project: projeto ao qual a família de imagens de origem pertence.
    • source-image-family: nome da família de imagens de origem.
    • test-project: nome do projeto de teste em que você quer adicionar a família de imagens.
    • test-image-family: nome da família de imagens de teste.
  2. Usando a família de imagens personalizada test-image-family, crie uma VM para testar a carga de trabalho. Para criar a VM, execute o seguinte comando:

    gcloud compute instances create test-instance-name \
    --image-family your-test-image-family \
    --project test-project
    

    Substitua:

    • test-instance-name: nome da instância de teste.
    • test-image-family: nome da família de imagens de teste.
    • test-project: nome do projeto de teste.
  3. Após a validação de que a imagem funciona bem para sua carga de trabalho, copie essa imagem para o ambiente de produção.

    gcloud compute images create prod-image-name \
    --source-image-family test-image-family \
    --source-image-project test-project \
    --project prod-project \
    --family prod-image-family
    

    Substitua:

    • prod-image-name: nome da imagem de produção.
    • test-image-family: nome da família de imagens de teste.
    • test-project: projeto ao qual a família de imagens de teste pertence.
    • prod-project: nome do projeto que está no ambiente de produção.
    • prod-image-family: nome da família de imagens que você quer usar no ambiente de produção.