In this article
O que é orquestração de contêineres?
Um contêiner é uma unidade executável leve e isolada que contém um aplicativo ou seus componentes. Os desenvolvedores podem configurar um contêiner para ser executado em qualquer ambiente e máquina com um mecanismo de runtime de contêineres.
Contêineres permitem tornar o código do aplicativo portátil. Podemos empacotar o código, as bibliotecas do sistema operacional (SO), as variáveis de ambiente, as dependências e as configurações em uma única unidade. Depois, podemos implantar e executar o código em diferentes ambientes de nuvem ou locais. Entre as ferramentas populares de conteinerização estão Docker Engine, containerd e CRI-O.
O que é orquestração de contêineres?
A orquestração de contêineres automatiza a implantação, as operações e o gerenciamento do ciclo de vida dos contêineres. Essa abordagem automatiza o provisionamento, a implantação, o escalonamento, o monitoramento e a substituição dos contêineres em execução, além do gerenciamento do armazenamento. Kubernetes, Docker Swarm, Nomad e Mesos são orquestradores de contêineres populares.
Gerenciar contêineres em grande escala é um desafio, principalmente quando há muitos aplicativos conteinerizados. Monitorar e gerenciar aplicativos com soluções personalizadas costuma ser demorado e sujeito a erros. Uma plataforma de orquestração de contêineres bem testada reduz esses problemas com padronização e automação.
Neste artigo, vamos explicar por que a orquestração é necessária, analisar algumas ferramentas de orquestração de contêineres em detalhes e discutir os benefícios e os riscos de segurança envolvidos.
A necessidade de orquestração
Antes de as ferramentas de orquestração amadurecerem, os aplicativos conteinerizados costumavam ser implantados com scripts personalizados e outras ferramentas de implantação, geralmente específicas para determinadas plataformas e/ou pacotes de aplicativos. A padronização proporcionada pelos contêineres possibilitou o surgimento de ferramentas de orquestração de uso geral, colocando todos os aplicativos sob um conjunto comum de APIs e especificações de empacotamento.
Antes das ferramentas de orquestração, era difícil gerenciar quais contêineres estavam em execução e onde executá-los. Isso era especialmente verdadeiro na transição para arquiteturas de microsserviços, em que dezenas ou até centenas de contêineres precisam estar em execução a qualquer momento e podem ser atualizados várias vezes ao dia.
As ferramentas de orquestração assumem o trabalho pesado de executar esses contêineres em um cluster de hosts e oferecem recursos padronizados para dimensionamento, atualizações, provisionamento de rede e muitas outras tarefas. Um dos principais benefícios é o uso de um modelo de implantação declarativo, no qual desenvolvedores e operadores especificam o estado desejado do aplicativo. Esse modelo dispensa quem o define de se preocupar com como e onde executar o processo, pois a ferramenta de orquestração cuida de criar e remover contêineres — e outras entidades — para atender ao estado solicitado onde fizer sentido no cluster a cada momento. As ferramentas também continuam monitorando o que implantaram e podem tentar restaurar automaticamente o estado desejado caso uma falha do aplicativo ou do hardware, por exemplo, faça a implantação sair das especificações.
Kubernetes: a principal ferramenta de orquestração de contêineres
O Google apresentou a plataforma de orquestração de contêineres de código aberto Kubernetes em 2015, em grande parte com base no trabalho realizado em seu gerenciador interno de cargas de trabalho de contêineres, chamado “Borg”. Em 2017, o apoio da comunidade ao Kubernetes atingiu um nível que o tornou a opção mais popular. A Cloud Native Computing Foundation (CNCF) foi criada junto com o Kubernetes 1.0 e doada à Linux Foundation pelo Google e outros membros fundadores. Ela abriga projetos de código aberto bem-sucedidos, como containerd, Helm, Linkerd, Prometheus e gRPC.
O Kubernetes é independente de plataforma e oferece suporte a todos os sistemas operacionais com um mecanismo de runtime de contêineres compatível. Hoje, vários provedores de nuvem oferecem suporte ao Kubernetes. Os principais — Azure, AWS e Google Cloud — disponibilizam soluções de Kubernetes como serviço. Em 2018, a CNCF informou que 40 por cento das pessoas que responderam à pesquisa global sobre gerenciamento de contêineres usavam Kubernetes. Em 2021, esse percentual havia aumentado para mais de 80 por cento.
Empresas como a Pinterest confirmam que o Kubernetes melhora a eficiência, acelera a implantação de projetos e economiza tempo e dinheiro ao gerenciar centenas de contêineres. De acordo com um estudo de caso da CNCF sobre o Spotify, o uso de CPU dos contêineres melhorou de duas a três vezes após a adoção do Kubernetes.
Com muitos recursos e uma comunidade ativa de código aberto, o Kubernetes dá conta de casos de uso e arquiteturas extremamente complexos. No entanto, pode ser complexo demais para quem trabalha com poucos aplicativos simples e implantações pouco frequentes.
Outras plataformas de orquestração de contêineres
Docker Swarm: o Swarm é uma ferramenta de orquestração de código aberto integrada ao mecanismo de runtime do Docker. Assim como outras plataformas de cluster, ele é composto por um ou mais nós gerenciadores e trabalhadores e usa um modelo de consenso RAFT para compartilhar o estado entre eles. O Swarm não tem tantos recursos quanto o Kubernetes, mas é mais fácil de configurar e instalar, pois vem integrado ao binário do Docker. Também funciona bem com o Docker CLI e o Docker Compose.
Apache Mesos: o Apache Mesos é um projeto da UC Berkeley. Airbnb, Apple, Twitter e outras grandes empresas usam essa ferramenta de orquestração de contêineres. O Mesos é leve e aloca recursos com eficiência, oferecendo escalabilidade e flexibilidade. No entanto, seu uso exige bastante conhecimento técnico.
Red Hat OpenShift: o OpenShift é uma plataforma como serviço (PaaS) baseada no Kubernetes. Ela não funciona em todos os sistemas operacionais e exige CentOS, Fedora ou Red Hat Enterprise Linux Atomic Host (RHELAH). O OpenShift inclui recursos de autenticação e autorização que faltam na maioria das distribuições do Kubernetes. Sua facilidade de uso também é um atrativo para os desenvolvedores.
HashiCorp Nomad: o Nomad é uma plataforma focada em processos de agendamento e gerenciamento. Ainda assim, pode dimensionar mais clusters de contêineres do que o Kubernetes.
Rancher: o Rancher é uma plataforma de código aberto da Rancher Labs que oferece “Kubernetes como serviço”. Ela fornece uma solução fácil de gerenciar, observar e dimensionar para administrar vários clusters Kubernetes. Com uma única implantação, é possível garantir consistência e segurança em uma infraestrutura com vários clusters, sejam eles locais, na borda, em nuvens privadas ou públicas, ou em qualquer combinação desses ambientes.
Benefícios da orquestração de contêineres
Implantação e gerenciamento automatizados: à medida que o número de contêineres aumenta, gerenciá-los manualmente fica cada vez mais difícil e sujeito a erros. As plataformas de orquestração padronizam e automatizam essas tarefas. Como funcionam com APIs e processos bem documentados, também facilitam o monitoramento e a resolução de problemas.
Estado controlado: ferramentas de orquestração de contêineres, como Docker Swarm e Kubernetes, permitem definir previamente o estado desejado dos contêineres. Cabe à ferramenta de orquestração criar e manter os componentes declarados nesse estado. Esse modelo declarativo é muito mais fácil de escrever para os desenvolvedores do que as instruções imperativas necessárias para criar scripts de implantação.
Instalação e provisionamento: ferramentas de orquestração de contêineres podem configurar novos contêineres e instâncias de aplicativos quando o tráfego aumenta. Assim, não é necessário instalar e provisionar manualmente cada nova instância de contêiner à medida que o uso do aplicativo cresce. Muitas vezes, a orquestração usa uma API padrão para dimensionar as cargas de trabalho afetadas. Outra opção é automatizar esse processo com um recurso como o Horizontal Pod Autoscaler do Kubernetes.
Publicação de versões e reversão padronizadas: muitas implantações de orquestração de contêineres padronizam os processos de publicação e reversão, incluindo testes de diferentes versões do aplicativo, implantações canário e lançamentos blue/green.
Riscos de segurança da orquestração de contêineres
Controle de acesso e autenticação: a maioria das plataformas de orquestração não aplica políticas rigorosas de controle de acesso e autenticação. Isso significa que os contêineres implantados ficam muito vulneráveis a ameaças de autenticação e autorização, a menos que haja controle de acesso. No entanto, podemos tomar medidas para evitar incidentes de autorização e autenticação, como controlar o acesso à API do Kubernetes.
Controle de rede e comunicação: por padrão, todos os contêineres de um cluster podem se comunicar entre si. Isso facilita o desenvolvimento de aplicativos distribuídos, mas também permite que contêineres maliciosos ataquem outros contêineres. A implementação das políticas de rede adequadas ajuda a reduzir esse risco.
Além disso, ferramentas como Snyk Infrastructure as Code (Snyk IaC) ajudam os desenvolvedores a analisar e corrigir configurações antes que cheguem à produção, contribuindo para manter a infraestrutura segura.
Proteja a infraestrutura desde a origem
A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.
Resumo sobre orquestração
As ferramentas de orquestração de contêineres se tornaram um padrão do setor. Elas ajudam a automatizar a implantação, a instalação, o provisionamento e o gerenciamento de contêineres.
Embora a orquestração de contêineres apresente alguns riscos de segurança, as proteções adequadas permitem que as organizações aproveitem os benefícios da conteinerização, economizem tempo, garantam consistência e dimensionem tudo automaticamente.
Recursos adicionais:
Continue aprendendo sobre contêineres com estes recursos: