Contêineres no Google

Uma maneira melhor de desenvolver e implantar aplicativos

Faça uma avaliação gratuita Veja a documentação
O jeito Google

Do Gmail ao YouTube à Pesquisa, tudo no Google é executado em contêineres. A conteinerização permite que nossas equipes de desenvolvimento se movimentem rapidamente, implantem software de maneira eficiente e operem em uma escala sem precedentes. A cada semana, iniciamos muitos bilhões de contêineres. Na última década, aprendemos muito sobre como executar cargas de trabalho contentorizadas em produção, e compartilhamos esse conhecimento com a comunidade ao longo do caminho: desde os primeiros dias da contribuição de cgroups para o kernel do Linux até a liberação das nossas ferramentas internas como código aberto no projeto Kubernetes. Reunimos esse conhecimento no Google Cloud Platform. Assim, desenvolvedores e empresas de qualquer porte podem facilmente ter acesso ao que há de mais recente sobre inovação de contêineres.

Navio de carga com contêineres incorporados a uma nuvem. Uma baleia nada ao fundo.
Noções básicas: o que são contêineres?

Os contêineres oferecem um mecanismo de empacotamento lógico em que os aplicativos podem ser abstraídos pelo ambiente em que são efetivamente executados. Esse desacoplamento permite que aplicativos baseados em contêiner sejam implantados com facilidade e consistência, não importando se o ambiente de destino é um data center particular, a nuvem pública ou até mesmo o laptop pessoal de um desenvolvedor. A conteinerização oferece uma separação clara de preocupações, porque os desenvolvedores focam na lógica e nas dependências do aplicativo, enquanto as equipes de operações de TI podem focar na implantação e no gerenciamento sem se preocupar com detalhes do aplicativo, como versões de software e configurações específicas do app.

Para aqueles provenientes de ambientes virtualizados, os contêineres costumam ser comparados às máquinas virtuais (VMs, na sigla em inglês). Você já deve estar familiarizado com VMs: um sistema operacional convidado, como o Linux ou o Windows, é executado sobre um sistema operacional do host com acesso virtualizado ao hardware subjacente. Assim como as máquinas virtuais, os contêineres permitem empacotar o aplicativo com bibliotecas e outras dependências, oferecendo ambientes isolados para executar os serviços de software. No entanto, como você verá abaixo, as semelhanças terminam aqui, porque os contêineres fornecem uma unidade muito mais leve para desenvolvedores e equipes de operações de TI trabalharem, oferecendo uma infinidade de vantagens.

Diagrama de comparação entre máquinas virtuais e contêineres.
As máquinas virtuais contêm as seguintes unidades empilhadas umas sobre as outras para visualização: App, Bin/Libs, Guest OS, Hypervisor, Host Operating System, Infrastructure. Os contêineres têm as seguintes unidades empilhadas umas sobre as outras para visualização: App, Bin/Libs, Container Runtime, Host Operating System e Infrastructure.
Por que contêineres?

Em vez de virtualizar a pilha de hardware como acontece com a abordagem de máquinas virtuais, os contêineres são virtualizados no nível do sistema operacional, com vários contêineres sendo executados diretamente acima do kernel do SO. Isso significa que os contêineres são muito mais leves: eles compartilham o kernel do SO, iniciam muito mais rápido e usam apenas uma pequena parte da memória, em comparação com a inicialização de um SO completo.

Existem muitos formatos de contêiner disponíveis. O Docker é um conhecido formato de contêiner de código aberto compatível com o Google Cloud Platform e com o Google Kubernetes Engine.

E por que o Sandbox?

Os contêineres separam aplicativos entre si, a menos que você os conecte explicitamente. Isso significa que você não precisa se preocupar com dependências conflitantes nem contenção de recursos. Você define limites de recursos explícitos para cada serviço. É importante ressaltar que é uma camada adicional de segurança, porque os aplicativos não estão sendo executados diretamente no sistema operacional do host.

Ambiente consistente

Os contêineres dão aos desenvolvedores a capacidade de criar ambientes previsíveis isolados de outros aplicativos. Os contêineres também podem incluir as dependências de software necessárias ao aplicativo, como versões específicas de ambientes de execução da linguagem de programação e outras bibliotecas de software. Do ponto de vista do desenvolvedor, tudo isso tem consistência garantida, não importa onde o aplicativo acabe sendo implantado. Tudo isso se traduz em produtividade: desenvolvedores e equipes de operações de TI passam menos tempo depurando e diagnosticando diferenças em ambientes, e mais tempo enviando novas funcionalidades para usuários. E isso significa menos bugs, porque os desenvolvedores já podem usar situações hipotéticas em ambientes de desenvolvimento e teste que serão confirmadas na produção.

Execute em qualquer lugar

Os contêineres podem ser executados em praticamente qualquer lugar, facilitando muito o desenvolvimento e a implantação: nos sistemas operacionais Linux, Windows e Mac; em máquinas virtuais ou bare metal; na máquina de um desenvolvedor ou em data centers no local e, obviamente, na nuvem pública. A ampla popularidade do formato de imagem do Docker para contêineres ajuda ainda mais na portabilidade. Sempre que quiser executar seu software, use contêineres.

Isolamento

Os contêineres virtualizam recursos de CPU, memória, armazenamento e rede no nível do SO, oferecendo aos desenvolvedores uma visualização em sandbox do SO isolado logicamente de outros aplicativos.

  Vantagens do contêiner Vantagens da máquina virtual
Ambiente de execução consistente
Aplicativo colocado em sandbox
Tamanho pequeno em disco  
Sobrecarga baixa  
Do código aos aplicativos

Os contêineres permitem empacotar o aplicativo e as dependências dele juntos em um manifesto sucinto que pode ser controlado por versões, o que possibilita uma replicação fácil do aplicativo entre desenvolvedores na equipe e máquinas no cluster.

Assim como as bibliotecas de software empacotam partes de código, permitindo que os desenvolvedores abstraiam a lógica como autenticação de usuários e gerenciamento de sessões, os contêineres permitem que o aplicativo todo seja empacotado, abstraindo o sistema operacional, a máquina e até mesmo o próprio código. Combinada com uma arquitetura baseada em serviços, toda a unidade que os desenvolvedores precisam projetar fica muito menor, levando a uma maior agilidade e mais produtividade. Tudo isso facilita o desenvolvimento, o teste, a implantação e o gerenciamento geral dos aplicativos.

Da arquitetura monolítica para a baseada em serviço

Os contêineres funcionam melhor em arquiteturas baseadas em serviços. Ao contrário das arquiteturas monolíticas, em que todas as partes do aplicativo estão interligadas, da E/S ao processamento e à renderização de dados, as arquiteturas baseadas em serviço as separam como componentes à parte. A separação e a divisão do trabalho permitem que os serviços continuem em execução, mesmo que os outros falhem, o que mantém o aplicativo mais confiável como um todo.

A componentização também permite desenvolver de maneira mais rápida e confiável. As bases de código menores são mais simples de manter e, como os serviços são separados, é fácil testar entradas específicas para saídas.

Os contêineres são perfeitos para aplicativos baseados em serviços, porque é possível verificar a integridade de cada contêiner, limitar cada serviço a recursos específicos e iniciá-los e interrompê-los de maneira independente um do outro.

Além disso, como abstraem o código, os contêineres permitem tratar serviços separados como caixas-pretas, diminuindo ainda mais o espaço com que um desenvolvedor precisa se preocupar. Ao trabalhar em serviços que dependam uns dos outros, os desenvolvedores podem iniciar facilmente um contêiner para esse serviço específico sem precisar perder tempo configurando o ambiente correto e solucionando problemas com antecedência.

Descubra as três principais maneiras de executar seus contêineres no Google Cloud!

Google Kubernetes Engine para uma solução de orquestração de contêiner, Cloud Run para uma abordagem completa sem servidor e Compute Engine para simplesmente usar máquinas virtuais.

Kubernetes: orquestração de contêineres de nível de produção

Tivemos tanto sucesso em nosso sistema de gerenciamento de clusters interno Borg, que utilizamos o que aprendemos para colocá-lo no projeto de código aberto do Kubernetes (em inglês). Você e outras empresas já podem se beneficiar de nossas décadas de experiência. Também conhecido como "k8s", o Kubernetes oferece orquestração automatizada de contêineres, gerenciamento das máquinas e serviços para você, aumentando a confiabilidade e reduzindo o tempo e os recursos que você precisa gastar em DevOps, isso sem mencionar o alívio do estresse associado a essas tarefas.

O Kubernetes simplifica tudo o que está associado à implantação e ao gerenciamento do aplicativo. O Kubernetes automatiza implantações e reversões, monitorando a integridade dos serviços para evitar implantações inválidas antes que as coisas deem errado. Ele também executa continuamente verificações de integridade nos serviços, reiniciando contêineres que falharam ou pararam, e apenas anuncia serviços para os clientes quando confirma que esses contêineres foram iniciados com êxito. Além disso, o Kubernetes aumentará ou diminuirá automaticamente os serviços com base na utilização, garantindo que você esteja executando apenas o que precisa, quando precisa. Assim como os contêineres, o Kubernetes permite gerenciar de maneira declarada o cluster, possibilitando que a configuração tenha controle de versões e seja facilmente replicada.

Recursos do Kubernetes
  • Reversões e lançamentos automáticos
  • Monitoramento da integridade do serviço
  • Escalonamento automático de serviços
  • Gerenciamento declarativo
  • Implantação em qualquer lugar, incluindo de maneira híbrida

E talvez o mais importante: o Kubernetes foi construído para ser usado em qualquer lugar, permitindo orquestrar implantações no local, em nuvens públicas e em implementações híbridas entre os dois. Isso permite que a infraestrutura alcance os usuários onde eles estiverem, que os aplicativos tenham maior disponibilidade e que a empresa equilibre as preocupações com segurança e custo, tudo personalizado de acordo com as suas necessidades específicas.

Nuvem híbrida do Kubernetes: seu app é executado no Kubernetes, o que pode implantar em outras nuvens, no GCP ou no seu data center.
Seu cluster no Google

Obviamente, o Kubernetes funciona melhor no Google Cloud Platform. Google Kubernetes Engine é a solução Kubernetes Premier gerenciada que configura e prepara rapidamente a produção.

O Kubernetes Engine é totalmente gerenciado pelos engenheiros de confiabilidade do Google, o que garante que o cluster esteja sempre atualizado e disponível. Ele se integra perfeitamente a todos os serviços do GCP, como Stackdriver Monitoring, Diagnosctics e Logging, gerenciamento de identidade e acesso, além da melhor infraestrutura de rede do Google.

Recursos do Kubernetes Engine
  • Kubernetes gerenciado de código aberto
  • Contrato de nível de serviço de 99,5%, além de alta disponibilidade com implantações integradas em várias zonas
  • Integração perfeita de outros serviços do GCP
  • Líder do setor em custo-benefício
  • Flexível e interoperável com seus clusters no local ou outros provedores de nuvem
  • Infraestrutura gerenciada de nível Google

Mas, adoramos dar opções a você. O Google Cloud Platform oferece um espectro completo para executar os contêineres. Do ambiente totalmente gerenciado com o Google Cloud Run ao gerenciamento de clusters com o Kubernetes Engine, passando pela infraestrutura de implantação própria no Google Compute Engine de nível internacional e excelente custo-benefício, é possível encontrar a solução ideal para a execução de contêineres no Google Cloud Platform.

A solução de contêiner completa

Não é só isso. O Google Cloud Platform oferece as ferramentas de que você precisa para usar contêineres desde o desenvolvimento até a produção. O Cloud Build e o Container Registry oferecem armazenamento e gerenciamento de imagens do Docker com o apoio dos padrões de segurança elevados e a rede de nível internacional do Google. O SO otimizado para contêineres do Google oferece um sistema operacional leve e altamente seguro que vem com os ambientes de execução do Docker e do Kubernetes pré-instalados. Todo o gerenciamento de contêineres pode ser feito no GCP.

Crie: Builder de contêineres, Armazene: Container Registry, Execute: sistema operacional otimizado para contêineres, Orquestre: Kubernetes Engine

"Uma década de conhecimento na criação de sistemas de gerenciamento de contêineres nos ensinou muito, e incorporamos muitas dessas lições ao Kubernetes, o sistema de gerenciamento de contêineres mais recente do Google. As metas dele são aproveitar os recursos dos contêineres para oferecer ganhos significativos na produtividade do programador e facilitar os gerenciamentos manual e automatizado do sistema."

—- "Borg, Omega e Kubernetes: lições aprendidas com três sistemas de gerenciamento de contêineres ao longo de uma década", Google LLC, 2016