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 pré-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 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, o ele é arquivado com o formato tar 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 Platform. 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 imagens públicas fornecidas pelo GCP, que são atualizadas regularmente. O GCP fornece uma variedade de sistemas operacionais, incluindo Debian, Ubuntu e CentOS para você usar sem custo extra. Alguns sistemas operacionais, como Red Hat Enterprise Linux e Microsoft Windows, são imagens premium, que geram taxas adicionais 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 GCP para inicializar uma instância do Compute Engine. Depois disso, é possível personalizar 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 criando 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.

É possível criar uma imagem personalizada simples usando 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, com um grande número de imagens, fica 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 Jenkins, Packer e 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.

Como 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.

Outra opção para importar as imagens atuais é usar um serviço de migração pago como o CloudEndure. O CloudEndure é um conjunto de ferramentas e serviço on-line que facilita a migração de máquinas de uma plataforma para outra com inatividade mínima usando replicação contínua em nível de bloco. Com o CloudEndure, é possível migrar suas máquinas para o Compute Engine e depois 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 Criptografia em repouso na documentação do GCP.

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 imagens antigas e obsoletas não sejam usadas inadvertidamente.

Como usar famílias de imagens

O Compute Engine fornece famílias de imagens para garantir que os sistemas de automação e os usuários executem as imagens mais recentes. Como administrador, é possível agrupar um conjunto de imagens que pertencem ao mesmo aplicativo ou caso de uso em uma família de imagens. Em seguida, os usuários das imagens só precisam rastrear o nome da família da imagem, em vez de um nome de imagem exato. Como os nomes das imagens precisam ser únicos, 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-20161011). Em vez de alterar as ferramentas automatizadas para direcionar os consumidores para a imagem mais recente propagando o nome específico para outros sistemas, é possível simplesmente fazer referência ao nome da família da imagem, que sempre retornará a imagem mais recente na família, por exemplo, my-application.

Famílias de imagens

Para adicionar uma imagem a uma família ou criar uma família de imagens, caso não exista, é preciso adicionar uma sinalização --family extra à etapa de criação da imagem, por exemplo:

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

Após a execução desse comando, todas as chamadas para executar uma instância baseada na imagem my-application apontarão para a imagem recém-criada, my-application-v3-20161011.

Como suspender o uso de uma imagem

Como administrador, também é possível reverter a imagem para a qual a família de imagens 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 da imagem 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 adicional 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, ainda é possível vê-las fornecendo a sinalização --show-deprecated. 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 GCP 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 entregar imagens com práticas recomendadas para 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 as seguintes funções e políticas do IAM aplicadas:

  1. Permita que os usuários do "Grupo de usuários de imagens" criem instâncias a partir dessas imagens, concedendo a eles o papel compute.imageUser.
  2. Permita que o "Usuário de criação de imagem" crie instâncias neste projeto, concedendo a ele o papel compute.instanceAdmin.
  3. Permita que o "Usuário de criação de imagem" crie imagens e discos neste projeto, concedendo a ele o papel compute.storageAdmin.

Os projetos que poderão usar as imagens compartilhadas precisam permitir que os usuários com o papel compute.imageUser criem instâncias. Para isso, atribua 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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…