Práticas recomendadas de gerenciamento de imagens


Esta solução fornece orientações detalhadas sobre como gerenciar imagens do Compute Engine. As imagens fornecem o ambiente operacional básico para aplicativos executados no Compute Engine e são essenciais para garantir que seu aplicativo seja implantado e escalonado de forma 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 reversão.

Compreendendo imagens

Uma imagem no Compute Engine é um recurso de nuvem que fornece uma referência a um disco imutável. Essa representação do disco é então encapsulada usando alguns formatos de dados.

Compreender imagens.

Uma imagem é um pacote de bytes brutos usados ​​para criar um disco rígido pré-preenchido. Gravada em qualquer disco formatado está uma tabela de partição que aponta para uma ou mais partições que contêm dados. Para que uma imagem seja inicializável, ela deve conter o seguinte:

Para que um disco seja importado como uma imagem do Compute Engine, os bytes do disco devem ser gravados em um arquivo chamado disk.raw .

Depois que a sequência completa de bytes do disco for gravada no arquivo, o arquivo será arquivado no formato tar e compactado no formato GZIP. Em seguida, você pode fazer 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, você poderá usá-la para criar réplicas exatas do disco original em qualquer região do Google Cloud. As imagens recém-registradas costumam ser usadas 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áquinas virtuais e imagens na documentação.

Escolhendo uma imagem de inicialização

A primeira etapa para usar o Compute Engine é escolher a imagem que você deseja como sistema operacional para sua instância de máquina virtual (VM). Você pode usar imagens públicas fornecidas por Google Cloud , que são atualizados regularmente. Google Cloud fornece uma variedade de sistemas operacionais, incluindo Debian, Ubuntu e CentOS, para seu uso sem nenhum custo extra. Alguns sistemas operacionais, como Red Hat Enterprise Linux e Microsoft Windows, são imagens premium, que incorrem em taxas adicionais para cada hora de execução das instâncias.

Para obter 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.

Para maior segurança, você também pode usar o recurso Imagem confiável para definir uma política da organização que restrinja o uso de imagens em projetos de imagens públicas específicos na criação de imagens de inicialização.

Imagem de inicialização.

Você pode usar o Google Cloud imagens públicas para inicializar uma instância do Compute Engine. Após isso, você poderá personalizar a instância para executar seu aplicativo.

Uma abordagem para configurar sua instância é usar o script de inicialização para executar os comandos que implantam seu aplicativo durante a inicialização. Lembre-se de que esse script é executado sempre que a instância é inicializada, portanto, você deve tornar o script idempotente para evitar que fique em um estado inconsistente ou parcialmente configurado. Se suas instâncias fizerem parte de um grupo de instâncias gerenciadas, você poderá usar o Instance Group Updater para reiniciar ou reconstruir suas instâncias, o que executará novamente seu 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.

Criação de imagens personalizadas

Embora configurar o script de inicialização de uma instância seja uma forma viável de provisionar sua infraestrutura, um método mais eficiente é criar uma nova imagem personalizada com sua configuração incorporada à imagem pública. Você pode personalizar imagens de diversas maneiras:

  • Manual
  • Automatizado
  • Importar

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

Cozinhar 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 de serviços externos durante a inicialização do aplicativo.
  • A expansão cria instâncias que contêm versões de software idênticas.

Cozimento manual

Você pode 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 a partir dessa instância. Use este método se você puder configurar suas imagens do zero manualmente, em vez de usar o processamento automatizado ou importar 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 de acordo com suas necessidades.
  4. Pare a instância .
  5. Crie uma imagem personalizada do disco de inicialização dessa instância. Este processo exige que você exclua a instância, mas mantenha o disco de inicialização.

Cozimento automatizado

O cozimento manual é uma maneira fácil de começar se você tiver um pequeno número de imagens, mas um grande número de imagens torna-se difícil de auditar e gerenciar. Packer é uma ferramenta de código aberto para tornar a criação de imagens mais reproduzível, auditável, configurável e confiável. Você também pode usar o Packer como parte de um pipeline do Spinnaker para produzir imagens que são implementadas em clusters de instâncias.

Importando imagens existentes

Você pode importar imagens de disco de inicialização da infraestrutura existente para o Compute Engine usando a ferramenta de importação de disco virtual , que automatiza o processo de importação de imagens. Para máquinas Linux, aqui está um guia detalhado para migrar manualmente imagens de disco RAW, Amazon Machine Images (AMI) e imagens VirtualBox .

Outra opção para importar suas imagens existentes é usar Migrate to Virtual Machines .

Migrate to Virtual Machines é uma cadeia de ferramentas e serviços 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. Você pode migrar suas máquinas para o Compute Engine e usar o preparo manual para criar imagens.

Criptografando 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 suas próprias chaves de criptografia quando seus discos forem criados . Depois de criar o disco, você poderá criar uma imagem criptografada fornecendo suas chaves de criptografia para o comando image create. Para obter mais informações sobre criptografia em repouso e chaves de criptografia fornecidas pelo cliente, consulte Criptografia em repouso no Google Cloud documentação.

Ciclo de vida da imagem

Depois de configurar um pipeline de criação de imagem, você poderá usar imagens para iniciar instâncias de um aplicativo de maneira confiável. Embora o pipeline possa lidar com a criação de imagens, você também deve garantir que seus mecanismos de implantação usem as versões mais recentes das imagens. Finalmente, você precisa de um processo de curadoria de imagens, para que imagens antigas e obsoletas não sejam usadas inadvertidamente.

Famílias de imagens

As famílias de imagens ajudam a gerenciar imagens em seu projeto agrupando imagens relacionadas, para que você possa avançar e retroceder entre versões de imagens específicas. Para obter mais informações, consulte Práticas recomendadas para famílias de imagens .

Descontinuando uma imagem

Como administrador, você também pode reverter a imagem para a qual a família de imagens aponta, descontinuando a imagem usando o seguinte comando:

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

Você pode escolher entre vários estados de depreciação:

Estado Descrição
DEPRECADO Imagens que não são mais as mais recentes, mas que ainda podem ser lançadas pelos usuários. Os usuários verão um aviso no lançamento informando que não estão mais usando a imagem mais recente.
OBSOLETO Imagens que não devem ser lançadas por usuários ou automação. Uma tentativa de criar uma instância a partir dessas imagens falhará. Você pode usar esse estado de imagem para arquivar imagens para que seus dados ainda estejam disponíveis quando montados como um disco que não seja de inicialização.
EXCLUÍDO Imagens que já foram excluídas ou estão marcadas para exclusão futura. Eles não podem ser iniciados e você deve excluí-los o mais rápido possível.

Aplicação de políticas de ciclo de vida

Você pode marcar imagens para exclusão ou obsolescência usando o comando gcloud compute images deprecate . Você pode anexar metadados às imagens para marcá-las para exclusão futura, fornecendo um dos sinalizadores --delete-in ou --delete-on . Para anexar metadados para marcar imagens para obsolescência futura, forneça os sinalizadores --obsolete-in ou --obsolete-on . Você pode incorporar esse comando em um processo de criação de imagem para impor uma política de ciclo de vida de imagem que restrinja a proliferação de imagens obsoletas e expiradas em seu projeto. Por exemplo, no final do pipeline de criação de imagens, você pode incluir uma verificação adicional de imagens que precisam ser obsoletas ou excluídas e, em seguida, executar essas ações explicitamente.

Embora as imagens obsoletas e excluídas não sejam mais mostradas por meio da API e da IU por padrão, você ainda pode vê-las fornecendo o sinalizador --show-deprecated . Para excluir completamente a imagem e seus dados, você deve enviar um comando de exclusão explícito para essa imagem.

Compartilhando imagens entre projetos

As organizações muitas vezes criam vários Google Cloud projetos para particionar seus recursos, ambientes e acesso de usuário. O isolamento de recursos em projetos permite faturamento granular, aplicação de segurança e redes segregadas. Embora a maioria dos recursos da nuvem não precise abranger vários projetos, 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 de segurança, autorização, gerenciamento de pacotes e operações pré-configuradas para o restante da organização.

Compartilhando imagens.

Você compartilha imagens atribuindo funções do IAM aos projetos de uma organização. O projeto que contém as imagens que você deseja compartilhar com outros projetos, referido no diagrama anterior como "Projeto de criação de imagem", deve ter as seguintes funções e políticas do IAM aplicadas:

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

Os projetos nos quais você deseja usar as imagens compartilhadas devem permitir que usuários com a função compute.imageUser criem instâncias atribuindo-lhes a função compute.instanceAdmin .

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

O que vem a seguir