14 Ferramentas de Orquestração de Containers para DevOps: Guia Completo

Vamos explorar algumas das ferramentas de orquestração de contêineres mais populares atualmente disponíveis.

O que é Orquestração de Contêineres?

As plataformas de contêineres, como o Docker, são amplamente utilizadas para empacotar aplicações baseadas em arquiteturas de microsserviços. Contêineres oferecem alta escalabilidade e podem ser criados conforme a necessidade. No entanto, gerenciar um grande número de contêineres, centenas ou mais, torna-se um desafio complexo.

O gerenciamento do ciclo de vida e a administração de contêineres tornam-se extremamente difíceis quando seu número aumenta de forma dinâmica, de acordo com a demanda.

A orquestração de contêineres visa resolver este problema automatizando o planejamento, implementação, escalabilidade, balanceamento de carga, disponibilidade e rede de contêineres. Em essência, é a automação e o gerenciamento de todo o ciclo de vida dos contêineres e seus serviços.

Trata-se de organizar e gerenciar vários contêineres e arquiteturas de microsserviços em escala.

Felizmente, diversas soluções de orquestração de contêineres estão disponíveis no mercado.

Vamos explorá-las!

Kubernetes

Você provavelmente já esperava por este, certo?

Kubernetes é uma plataforma de código aberto, originalmente desenvolvida pelo Google e agora mantida pela Cloud Native Computing Foundation. O Kubernetes se destaca por seu suporte à configuração declarativa e automação, auxiliando na automatização da implementação, dimensionamento e gerenciamento de cargas de trabalho e serviços em contêineres.

Imagem via Kubernetes.io

A API do Kubernetes facilita a comunicação entre usuários, componentes de cluster e elementos externos. O plano de controle do Kubernetes e os nós operam em um conjunto de nós que formam o cluster. A carga de trabalho do aplicativo consiste em um ou mais pods executados em nós de trabalho. O plano de controle é responsável pelo gerenciamento dos pods e nós de trabalho.

Empresas como Babylon, Booking.com e AppDirect utilizam amplamente o Kubernetes.

Recursos:

  • Descoberta de serviços e balanceamento de carga
  • Orquestração de armazenamento
  • Implantações e rollbacks automatizados
  • Escalabilidade horizontal
  • Gerenciamento de segredos e configurações
  • Autocura
  • Execução em lote
  • Suporte a IPv4/IPv6 dual-stack
  • Embalagem automática de contêineres

Deseja aprender mais sobre Kubernetes? Confira estes materiais de aprendizado.

OpenShift

A Red Hat oferece a OpenShift Container Platform como um serviço (PaaS). Essa plataforma facilita a automação de aplicativos em recursos seguros e escaláveis em ambientes de nuvem híbrida, fornecendo uma base de nível empresarial para construção, implementação e gerenciamento de aplicações em contêineres.

Baseada no motor Red Hat Enterprise Linux e Kubernetes, o OpenShift oferece diversas funcionalidades para gerenciar clusters através de interface gráfica e linha de comando. A Red Hat fornece OpenShift em duas outras modalidades:

  • OpenShift Online: oferecido como software como serviço (SaaS).
  • OpenShift Dedicated: oferecido como serviços gerenciados.

O OpenShift Origin (Origin Community Distribution) é um projeto de comunidade upstream de código aberto, utilizado no OpenShift Container Platform, OpenShift Online e OpenShift Dedicated.

Nomad

Nomad é um orquestrador de carga de trabalho simples, flexível e intuitivo, projetado para implementar e gerenciar contêineres e aplicações não conteinerizadas, tanto em ambientes locais quanto em nuvem, operando em grande escala. O Nomad é executado como um único binário com um volume de recursos baixo (35 MB) e oferece compatibilidade com macOS, Windows e Linux.

Desenvolvedores utilizam a infraestrutura como código (IaC) declarativa para implementar seus aplicativos e definir como eles devem ser implementados. O Nomad recupera automaticamente as aplicações em caso de falhas.

O Nomad orquestra aplicações de qualquer tipo, não apenas contêineres, oferecendo suporte de primeira classe para Docker, Windows, Java, VMs e outras tecnologias.

Recursos:

  • Simples e confiável
  • Moderniza aplicativos legados sem necessidade de reescrita
  • Federação fácil em grande escala
  • Escalabilidade comprovada
  • Fácil integração com multi-nuvem
  • Integrações nativas com Terraform, Consul e Vault

Docker Swarm

O Docker Swarm adota um modelo declarativo, onde você define o estado desejado do serviço e o Docker garante que esse estado seja mantido. O Docker Enterprise Edition integrou o Kubernetes ao Swarm, oferecendo flexibilidade na escolha do mecanismo de orquestração. A interface de linha de comando do Docker Engine é utilizada para criar um enxame de motores Docker onde os serviços de aplicação são implantados.

Comandos do Docker são usados para interagir com o cluster. As máquinas que se juntam ao cluster são chamadas de nós e o gerenciador Swarm se encarrega das atividades do cluster.

O Docker Swarm é composto por dois componentes principais:

  • Gerenciador: os nós gerenciadores atribuem tarefas aos nós de trabalho no enxame. Um líder é eleito com base em um algoritmo de consenso Raft. Esse líder é responsável por todas as decisões de gerenciamento do enxame e orquestração de tarefas.
  • Nó de Trabalho: os nós de trabalho recebem e executam as tarefas atribuídas pelos nós gerenciadores.

Recursos:

  • Gerenciamento de cluster integrado ao Docker Engine
  • Design descentralizado
  • Modelo de serviço declarativo
  • Escalabilidade
  • Reconciliação do estado desejado
  • Rede multi-host
  • Descoberta de serviço
  • Balanceamento de carga
  • Seguro por padrão
  • Atualizações contínuas

Docker Compose

Docker Compose é usado para definir e executar aplicações multi-contêineres que trabalham em conjunto. Ele descreve grupos de serviços interconectados que compartilham dependências de software, e são orquestrados e dimensionados de maneira unificada.

Através de um arquivo YAML (dockerfile), é possível configurar os serviços de sua aplicação. Em seguida, utilizando um único comando `docker-compose up`, todos os serviços definidos são criados e iniciados.

Um arquivo docker-compose.yml pode ser similar a este:

version: '3'
volumes:
  app_data:
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.0
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
      - ./docker-data-volumes/elasticsearch:/usr/share/elasticsearch/data

  kibana:
    depends_on:
      - elasticsearch
    image: docker.elastic.co/kibana/kibana:6.8.0
    ports:
      - 5601:5601
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
  app:
    depends_on:
      - elasticsearch
    image: asadali08527/app:latest
    ports:
      - 8080:8080
    volumes:
      - app_data:/var/lib/app/

Com o Docker Compose, você pode dividir o código da aplicação em múltiplos serviços de execução independente, que se comunicam utilizando uma rede interna. Essa ferramenta oferece uma interface de linha de comando (CLI) para gerenciar todo o ciclo de vida das suas aplicações. Embora o Docker Compose tenha sido tradicionalmente focado em fluxos de trabalho de desenvolvimento e teste, ele agora também está voltado para recursos mais orientados à produção.

O Docker Engine pode ser uma instância autônoma provisionada com o Docker Machine ou um cluster Docker Swarm completo.

Recursos:

  • Vários ambientes isolados em um único host
  • Preserva dados de volume durante a criação de contêineres
  • Recria apenas contêineres modificados
  • Gerencia variáveis e facilita a movimentação da composição entre ambientes

Minikube

Minikube permite que usuários executem o Kubernetes localmente. Com ele, é possível testar aplicações localmente dentro de um cluster Kubernetes de nó único, diretamente no seu computador pessoal. O Minikube também oferece suporte integrado ao Kubernetes Dashboard.

O Minikube executa a versão estável mais recente do Kubernetes e oferece suporte aos seguintes recursos:

  • Balanceamento de carga
  • Vários clusters
  • Volumes persistentes
  • NodePorts
  • ConfigMaps e segredos
  • Tempos de execução de contêiner: Docker, CRI-O e container
  • Ativação de CNI (Container Network Interface)

Marathon

Marathon é um orquestrador de aplicações e estruturas desenvolvido para o Apache Mesos.

O Apache Mesos é um gerenciador de clusters de código aberto. O Mesos é um projeto Apache capaz de executar cargas de trabalho em contêiner e não contêiner. Os principais componentes de um cluster Mesos são os Mesos Agent Nodes, Mesos Master, ZooKeeper e Frameworks. Os frameworks coordenam com o master para agendar tarefas nos nós de agente. Usuários interagem com o framework Marathon para agendar seus trabalhos.

O agendador do Marathon utiliza o ZooKeeper para localizar o master atual e enviar as tarefas. O agendador do Marathon e o master Mesos possuem um master secundário em execução para garantir alta disponibilidade. Os clientes interagem com o Marathon por meio da API REST.

Recursos:

  • Alta disponibilidade
  • Suporte a aplicações com estado
  • Interface de usuário intuitiva e poderosa
  • Restrições
  • Descoberta de serviços e balanceamento de carga
  • Verificações de saúde
  • Assinatura de eventos
  • Métricas
  • APIs REST

Cloudify

Cloudify é uma ferramenta de orquestração de nuvem de código aberto, projetada para automatizar a implantação e o gerenciamento do ciclo de vida de contêineres e microsserviços. Ela oferece recursos como clusters sob demanda, recuperação automática e dimensionamento em nível de infraestrutura. O Cloudify é capaz de gerenciar a infraestrutura de contêineres e orquestrar os serviços executados nas plataformas de contêiner.

Esta ferramenta pode ser facilmente integrada com gerenciadores de contêiner baseados em Docker, incluindo:

  • Docker
  • Docker Swarm
  • Docker Compose
  • Kubernetes
  • Apache Mesos

O Cloudify auxilia na criação, manutenção, dimensionamento e desmontagem de clusters de contêineres. A orquestração de contêineres é fundamental para fornecer uma infraestrutura escalável e altamente disponível na qual os gerenciadores de contêineres podem ser executados. O Cloudify permite orquestrar serviços heterogêneos entre diferentes plataformas. A implementação de aplicações pode ser realizada através da CLI ou do Cloudify Manager.

Rancher

Rancher é uma plataforma de código aberto que utiliza orquestração de contêineres conhecida como gado (cattle). Ela permite o aproveitamento de serviços de orquestração como Kubernetes, Swarm e Mesos. Rancher fornece o software necessário para gerenciamento de contêineres, eliminando a necessidade de organizações construírem plataformas de serviços do zero utilizando um conjunto de tecnologias de código aberto.

O Rancher 2.x permite o gerenciamento de clusters Kubernetes executados em provedores especificados pelo cliente.

Para começar a usar o Rancher, são necessárias duas etapas:

Preparar um Host Linux

Prepare um host Linux com Ubuntu 16.04 ou 18.04 de 64 bits (ou outra distribuição Linux compatível) e, no mínimo, 4 GB de memória. Instale uma versão compatível do Docker no host.

Iniciar o Servidor

Para instalar e executar o Rancher, execute o seguinte comando do Docker no host:

$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

A interface de usuário do Rancher permite o gerenciamento de milhares de clusters e nós do Kubernetes.

Containership

O Containership foi projetado para facilitar a implementação e o gerenciamento da infraestrutura Kubernetes multi-nuvem. Ele oferece flexibilidade para operar em ambientes de nuvem pública, privada e local, através de uma única ferramenta. Permite provisionar, gerenciar e monitorar seus clusters Kubernetes nos principais provedores de nuvem.

O Containership utiliza ferramentas nativas da nuvem como Terraform para provisionamento, Prometheus para monitoramento e Calico para gerenciamento de redes e políticas. Ele é construído sobre o Kubernetes vanilla. A plataforma Containership oferece um painel intuitivo, bem como uma poderosa API REST para automação complexa.

Recursos:

  • Painel Multi-Cloud
  • Registros de auditoria
  • Suporte a instâncias de GPU
  • Atualizações sem interrupções
  • Masters programáveis
  • Métricas integradas
  • Registro em tempo real
  • Implantações sem tempo de inatividade
  • Suporte de armazenamento persistente
  • Suporte de registro privado
  • Escalonamento automático de carga de trabalho
  • Gerenciamento de chaves SSH

AZK

AZK é uma ferramenta de orquestração de código aberto para ambientes de desenvolvimento, utilizando um arquivo manifesto (o Azkfile.js). Ele auxilia desenvolvedores na instalação, configuração e execução de ferramentas comuns no desenvolvimento de aplicações web com diferentes tecnologias de código aberto.

O AZK utiliza contêineres em vez de máquinas virtuais. Contêineres oferecem melhor desempenho e menor consumo de recursos físicos, se comparados a máquinas virtuais.

Arquivos Azkfile.js podem ser reutilizados para adicionar novos componentes ou criar novos do zero. Eles também podem ser compartilhados, garantindo total paridade entre os ambientes de desenvolvimento nas diferentes máquinas dos programadores e reduzindo a chance de bugs durante a implementação.

GKE

GKE oferece uma solução totalmente gerenciada para orquestração de aplicações em contêineres na Google Cloud Platform. Os clusters do GKE são construídos sobre o Kubernetes. Você pode interagir com clusters usando a linha de comando do Kubernetes. Os comandos do Kubernetes permitem implementar e gerenciar aplicações, executar tarefas administrativas, definir políticas e monitorar a saúde das cargas de trabalho implementadas.

Os recursos avançados de gerenciamento do Google Cloud também estão disponíveis com os clusters GKE, como balanceamento de carga do Google Cloud, pools de nós, escalonamento automático de nós, atualizações automáticas, reparo automático de nós, registro e monitoramento com o pacote de operações do Google Cloud.

O Google Cloud fornece ferramentas de CI/CD para auxiliar na criação e fornecimento de contêineres de aplicações. O Cloud Build permite a criação de imagens de contêiner (como o Docker) de vários repositórios de código fonte, e o Container Registry armazena suas imagens de contêiner.

O GKE é uma solução pronta para empresas, com modelos de implementação predefinidos.

Interessado em aprender mais sobre GKE? Confira este curso para iniciantes.

AKS

AKS é um serviço Kubernetes totalmente gerenciado oferecido pelo Azure, que disponibiliza Kubernetes sem servidor, segurança e governança. O AKS gerencia seu cluster Kubernetes e permite a implementação simplificada de aplicações em contêineres. O AKS configura automaticamente todos os masters e nós do Kubernetes. Você só precisa gerenciar e manter os nós de agente.

O AKS é gratuito; você paga apenas pelos nós de agente no cluster, e não pelos masters. Você pode criar um cluster AKS no portal do Azure ou programaticamente. O Azure também oferece suporte a recursos adicionais, como rede avançada, integração do Azure Active Directory e monitoramento utilizando o Azure Monitor.

O AKS também oferece suporte a contêineres do Windows Server. O desempenho do cluster e das aplicações implementadas podem ser monitorados no Azure Monitor. Os logs são armazenados em um espaço de trabalho do Azure Log Analytics.

O AKS foi certificado como compatível com Kubernetes.

AWS EKS

AWS EKS é um serviço Kubernetes totalmente gerenciado. A AWS permite executar seu cluster EKS utilizando o AWS Fargate, que é uma computação sem servidor para contêineres. O Fargate elimina a necessidade de provisionar e gerenciar servidores, permitindo o pagamento por recurso por aplicação.

A AWS permite o uso de recursos adicionais com o EKS, como Amazon CloudWatch, Amazon Virtual Private Cloud (VPC), AWS Identity, Auto Scaling Groups e Access Management (IAM), monitoramento de aplicações, dimensionamento e balanceamento de carga. O EKS se integra ao AWS App mesh e oferece uma experiência nativa do Kubernetes. O EKS executa a versão mais recente do Kubernetes e possui certificação de compatibilidade com o Kubernetes.

Conclusão

Espero que esta lista tenha fornecido uma compreensão clara das diversas ferramentas de orquestração de contêineres disponíveis e que, agora, você possa escolher a opção mais adequada para o seu caso de uso.

Em seguida, explore o software de gerenciamento Kubernetes.