Práticas recomendadas de gerenciamento de imagens

Esta solução fornece orientações detalhadas sobre como gerenciar as imagens do Compute Engine. As imagens fornecem o ambiente operacional básico para aplicativos que são executados no Compute Engine, e elas são essenciais para garantir que o aplicativo seja implementado e escalonado de maneira rápida e confiável. Também é possível usar imagens para arquivar versões de aplicativos para cenários de recuperação de desastres ou reversões.

Noções básicas sobre imagens

Uma imagem no Compute Engine é um recurso de nuvem que fornece uma referência a um disco imutável. Então, essa representação de disco é encapsulada com o uso de alguns formatos de dados.

Noções básicas sobre imagens.

Uma imagem é um pacote de bytes brutos usados para criar um disco rígido preenchido. Em qualquer disco formatado, é gravada uma tabela de partição que aponta para uma ou mais partições contendo dados. Para que uma imagem seja inicializável, ela precisa conter um registro mestre de inicialização (em inglês) e uma partição inicializável. Para que um disco seja importado como uma imagem do Compute Engine, os bytes do disco precisam ser gravados em um arquivo denominado disk.raw.

Depois que a sequência completa de bytes do disco é gravada no arquivo, ele é arquivado com o formato TAR (em inglês) e compactado com o formato GZIP. É possível fazer o upload do arquivo *.tar.gz resultante para o Cloud Storage e registrá-lo como uma imagem no Compute Engine, conforme mostrado no diagrama anterior. Depois de registrar uma imagem, use-a para criar réplicas exatas do disco original em qualquer região do Google Cloud. As imagens recém-registradas são usadas frequentemente como volumes de inicialização para instâncias do Compute Engine.

Para ver uma introdução mais básica a esses termos do Compute Engine, consulte Instâncias de máquina virtual e Imagens na documentação.

Como escolher uma imagem de inicialização

A primeira etapa no uso do Compute Engine é escolher a imagem que será o sistema operacional da instância da máquina virtual (VM, na sigla em inglês). É possível usar as imagens públicas fornecidas pelo Google Cloud, que são atualizadas regularmente. O Google Cloud fornece uma variedade de sistemas operacionais, incluindo o Debian, o Ubuntu e o CentOS, para você usar sem custo extra. Alguns sistemas operacionais, como o Red Hat Enterprise Linux e o Microsoft Windows, são imagens premium, que geram taxas extra por hora de execução das instâncias.

Para mais informações sobre uma imagem específica, como políticas de atualização automática, aplicação de patches de segurança e canais de suporte, consulte a seção Detalhes do sistema operacional da documentação do produto.

Imagem de inicialização.

Use as imagens públicas do Google Cloud para inicializar uma instância do Compute Engine. Depois disso, personalize a instância para executar seu aplicativo.

Uma abordagem para configurar a instância é usar o script de inicialização para executar os comandos que implantam o aplicativo enquanto ele inicia. Tenha em mente que esse script é executado sempre que a instância é inicializada, então é preciso tornar o script idempotente para evitar chegar a um estado inconsistente ou parcialmente configurado. Se as instâncias fizerem parte de um grupo de instâncias gerenciadas, será possível usar o Instance Group Updater para reiniciá-las ou recompilá-las, reexecutando, assim, o script de inicialização. Uma prática comum é usar o script de inicialização para executar uma ferramenta de gerenciamento de configuração, como Chef ou Ansible.

Como criar imagens personalizadas

Configurar o script de inicialização de uma instância é uma maneira viável de provisionar a infraestrutura. Porém, um método mais eficiente é criar uma nova imagem personalizada com a configuração incorporada à imagem pública. É possível personalizar as imagens de várias maneiras:

  • Manual
  • Automatizada
  • Importar

O processo de criação de uma imagem personalizada é chamado de preparação.

Preparar suas imagens tem os seguintes benefícios:

  • Menor tempo desde a inicialização até a prontidão do aplicativo
  • Confiabilidade aprimorada para implantações de aplicativos
  • Reversão mais fácil para versões anteriores
  • Menos dependências em serviços externos durante a inicialização do aplicativo
  • Criação de instâncias com versões de software idênticas por meio da expansão

Preparação manual

É possível criar uma imagem personalizada simples gerando uma nova instância de VM a partir de uma imagem pública, configurando a instância com os aplicativos e opções que você quer e, em seguida, criando uma imagem personalizada dessa instância. Use esse método para configurar manualmente suas imagens do zero, em vez de usar a preparação automatizada ou a importação de imagens atuais.

Para criar uma imagem personalizada simples, use as seguintes etapas:

  1. Crie uma instância a partir de uma imagem pública.
  2. Conecte-se à instância.
  3. Personalize a instância para suas necessidades.
  4. Interrompa a instância.
  5. Crie uma imagem personalizada a partir do disco de inicialização dessa instância. Esse processo exige que você exclua a instância, mas mantenha o disco de inicialização.

Preparação automatizada

A preparação manual é uma maneira fácil de começar se você tiver um pequeno número de imagens. Porém, se esse número for grande, ficará difícil auditar e gerenciar. A ferramenta de código aberto Packer torna a criação de imagens mais reprodutível, auditável, configurável e confiável. Para mais informações sobre como criar um pipeline de criação de imagem automatizado, consulte Criações de imagens automatizadas com o Jenkins, o Packer e o Kubernetes. Também é possível usar o Packer como parte de um pipeline do Spinnaker para produzir imagens que são implantadas em clusters de instâncias.

Importar imagens atuais

Migre imagens exportando-as da infraestrutura atual para o Compute Engine. Para máquinas Linux, consulte este guia detalhado sobre a migração de imagens de disco RAW, Amazon Machine Images (AMI) e imagens do VirtualBox.

Como alternativa, também é possível usar o Google Cloud Migrate for Compute Engine para importar as imagens existentes.

O Migrate for Compute Engine é uma cadeia de ferramentas e um serviço que facilita a migração de máquinas de uma plataforma para outra com tempo de inatividade mínimo usando replicação contínua em nível de bloco. É possível migrar suas máquinas para o Compute Engine e usar a preparação manual para criar imagens.

Como criptografar imagens

Todos os discos no Compute Engine são criptografados por padrão usando as chaves de criptografia do Google. As imagens criadas a partir de discos também são criptografadas. Se preferir, forneça suas próprias chaves de criptografia quando os discos forem criados. Depois de criar o disco, é possível criar uma imagem criptografada fornecendo as chaves de criptografia para o comando de criação de imagem. Para mais informações sobre criptografia em repouso e chaves de criptografia fornecidas pelo cliente, consulte este artigo na documentação do Google Cloud.

Ciclo de vida da imagem

Depois de configurar um pipeline de criação de imagens, use as imagens para iniciar com segurança instâncias de um aplicativo. O pipeline pode lidar com a criação de imagens, mas você também precisa garantir que os mecanismos de implantação usem as versões mais recentes das imagens. Por fim, você precisa de um processo para selecionar imagens, de modo que as antigas e obsoletas não sejam usadas inadvertidamente.

Famílias de imagens

As famílias de imagens ajudam a gerenciar imagens no projeto agrupando aquelas relacionadas para que você possa alternar entre versões específicas. Para mais informações, consulte Práticas recomendadas para famílias de imagens.

Como suspender o uso de uma imagem

Como administrador, também é possível reverter a imagem para qual a família aponta, suspendendo o uso da imagem usando o seguinte comando:

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

Escolha entre vários estados de suspensão de uso:

Estado Descrição
USO SUSPENSO Imagens que não são mais as mais recentes, mas ainda podem ser iniciadas pelos usuários. Os usuários verão um aviso de que não estão mais usando a imagem mais recente.
OBSOLETA Imagens que não devem ser iniciadas por usuários ou automação. Uma tentativa de criar uma instância a partir dessas imagens falhará. Você pode usar esse estado para arquivar imagens de modo que os respectivos dados ainda estejam disponíveis quando ativadas como um disco sem inicialização.
EXCLUÍDA Imagens que já foram excluídas ou estão marcadas para exclusão no futuro. Elas não podem ser iniciadas. Exclua essas imagens o mais rápido possível.

Como aplicar políticas de ciclo de vida

Marque imagens para exclusão ou obsolescência usando o comando gcloud compute images deprecate. É possível anexar metadados a imagens para marcá-las para exclusão futura fornecendo uma das sinalizações --delete-in ou --delete-on. Para anexar metadados a fim de marcar imagens para obsolescência futura, forneça as sinalizações --obsolete-in ou --obsolete-on. É possível incorporar esse comando a um processo de criação de imagem para impor uma política de ciclo de vida que restrinja a proliferação de imagens desatualizadas e expiradas no projeto. Por exemplo, no final do seu pipeline de criação de imagens, é possível incluir uma verificação extra de imagens que precisam ser suspensas ou excluídas e, em seguida, executar essas ações explicitamente.

Imagens obsoletas e excluídas não são mais mostradas por meio da API e da IU por padrão. Porém, basta fornecer a sinalização --show-deprecated para vê-las. Para excluir completamente a imagem e os respectivos dados, você precisa enviar um comando de exclusão explícito referente a essa imagem.

Como compartilhar imagens entre projetos

As organizações frequentemente criam vários projetos do Google Cloud para particionar os respectivos recursos, ambientes e acesso do usuário. Isolar os recursos em projetos permite a cobrança granular, a imposição de segurança e a rede segregada. A maioria dos recursos de nuvem não precisa abranger vários projetos, mas as imagens são boas candidatas para compartilhamento entre projetos. Ao usar um conjunto compartilhado de imagens, é possível seguir um processo comum para entregá-las com práticas recomendadas de segurança, autorização, gerenciamento de pacotes e operações pré-configuradas para o restante da organização.

Como compartilhar imagens.

Você compartilha imagens atribuindo papéis de IAM aos projetos de uma organização. O projeto que contém as imagens que você quer compartilhar com outros projetos, chamado no diagrama anterior de "Projeto de criação de imagens" (Image Creation Project), precisa ter os seguintes papéis e políticas do IAM aplicados:

  1. Conceda aos usuários do "Grupo de usuários de imagens" o papel compute.imageUser para criarem instâncias a partir dessas imagens.
  2. Conceda ao "Usuário de criação de imagem" o papel compute.instanceAdmin para criar instâncias neste projeto.
  3. Conceda ao "Usuário de criação de imagem" o papel compute.storageAdmin para criar imagens e discos neste projeto.

Para que projetos possam usar imagens compartilhadas, permita que usuários com papel compute.imageUser criem instâncias. Basta atribuir a eles o papel compute.instanceAdmin.

Para instruções mais detalhadas sobre o compartilhamento de imagens entre projetos, consulte Como compartilhar imagens entre projetos na documentação do Compute Engine.

A seguir