Práticas recomendadas de gerenciamento de imagens

Esta solução fornece orientações detalhadas sobre como gerenciar as imagens do Google 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. Você também pode usar imagens para arquivar versões de aplicativos para cenários de recuperação de desastres ou rollback.

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 dispositivo de 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 arquivo é arquivado com o formato tar e compactado com o formato GZIP. Em seguida, você pode fazer o upload do arquivo *.tar.gz resultante para o Google Cloud Storage e registrá-lo em uma imagem no Compute Engine, conforme mostrado no diagrama acima. Depois de registrar uma imagem, você pode usá-la 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 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). Você pode usar as imagens públicas fornecidas pelo Google Cloud Platform, que são atualizadas regularmente. O Cloud Platform 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 incorrem em 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

Você pode usar as imagens públicas do Cloud Platform para inicializar uma instância do Compute Engine. Depois, é possível personalizar a instância para executar o aplicativo.

Uma abordagem para configurar a instância é usar o script de inicialização para executar os comandos que implementam 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, você poderá 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. Você pode personalizar as imagens de várias maneiras:

  • manual
  • automática
  • importação

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

Preparar as imagens tem os seguintes benefícios:

  • tempo mais curto desde a inicialização até a prontidão do aplicativo
  • confiabilidade aprimorada para implantações de aplicativos
  • mais facilidade de rollback para versões anteriores
  • menos dependências em serviços externos durante o bootstrap do aplicativo
  • dimensionamento de instâncias que contêm versões de software idênticas

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 configurações desejados 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 existentes.

Você pode 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. O Packer é uma ferramenta de código aberto para tornar a criação de imagens mais reprodutível, auditável, configurável e confiável. Para mais informações sobre como criar um pipeline automatizado de criação de imagens, consulte a solução Criações automatizadas de imagens com Jenkins, Packer e Kubernetes. Você também pode 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 existentes

Você pode migrar imagens exportando-as da infraestrutura existente para o Compute Engine. Para máquinas com Linux, veja um guia detalhado sobre migração de imagens de disco RAW, Amazon Machine Images (AMI) e imagens do VirtualBox.

Outra opção para importar as imagens existentes é usar um serviço de migração pago como o CloudEndure. CloudEndure é uma cadeia de ferramentas e serviço on-line que facilita a migração de máquinas de uma plataforma para outra com um tempo de inatividade mínimo usando replicação contínua em nível de bloco. Com o CloudEndure, você pode 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. Alternativamente, você pode fornecer as próprias chaves de criptografia quando os discos forem criados. Depois de criar o disco, você pode 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 Cloud Platform.

Ciclo de vida da imagem

Depois de configurar um pipeline de criação de imagem, você pode usar imagens para iniciar instâncias de um aplicativo de maneira confiável. O pipeline pode lidar com a criação de imagens, mas você também precisa garantir que os mecanismos de implantação usam as versões mais recentes das imagens. Finalmente, 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 ajudá-lo a garantir que os sistemas de automação e os usuários executem as imagens mais recentes. Como administrador, você pode 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, você pode 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 de imagens ou criar uma família de imagens se não houver nenhuma, é preciso incluir uma sinalização --image-family adicional à etapa de criação de 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, você também pode realizar o rollback da imagem para a qual a família de imagens aponta. Basta suspender o uso da imagem usando o seguinte comando:

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

Você pode escolher entre vários estados de suspensão de uso:

Estado Descrição
SUSPENSA Imagens que deixaram de ser as mais recentes, mas ainda podem ser iniciadas pelos usuários. Os usuários verão um aviso na inicialização de que a imagem que estão usando não é a mais recente.
OBSOLETA Imagens que não podem ser iniciadas pelos usuários ou pela automação. Uma tentativa de criar uma instância 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

Você pode marcar 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. Você pode 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 fim do pipeline de criação de imagem, é possível incluir uma verificação adicional de imagens que precisam ser suspensas ou excluídas e, em seguida, executar essas ações de maneira explícita.

As imagens suspensas e excluídas não aparecem mais pela API e pela IU por padrão, mas ainda é possível vê-las, basta fornecer 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 geralmente criam vários projetos do Cloud Platform para particionar os próprios recursos, ambientes e acesso dos usuários. Isolar os recursos em projetos permite a cobrança granular, a imposição da 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, você pode 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. É preciso aplicar os seguintes papéis e políticas de IAM ao projeto que contém as imagens que você quer compartilhar com outros projetos, denominado "Image Creation Project" no diagrama acima:

  1. Conceder aos usuários do “Image User Group” o papel compute.imageUser para permitir que eles criem instâncias a partir dessas imagens.
  2. Conceder ao “Image Creation User” o papel compute.instanceAdmin para permitir que ele crie instâncias nesse projeto.
  3. Conceder ao “Image Creation User” o papel compute.storageAdmin para permitir que ele crie imagens e discos nesse projeto.

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.

Próximas etapas

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

Enviar comentários sobre…