Kubernetes vs. Docker
As principais diferenças entre o Kubernetes e o Docker e como eles se encaixam na conteinerização
Josh Campbell
Gerente sênior de produtos
CONTRIBUIÇÃO EDITORIAL: CHANDLER HARRIS
O Docker é uma plataforma de conteinerização e um período de execução e o Kubernetes é uma plataforma para executar e gerenciar contêineres de vários períodos de execução de contêineres. O Kubernetes é compatível a vários períodos de execução de contêineres, incluindo o Docker.
Quando o Docker foi lançado em 2013, ele nos trouxe a era moderna do contêiner e deu início a um modelo de computação baseado em microsserviços. Como os contêineres não dependem de seu próprio sistema operacional, eles facilitam o desenvolvimento de microsserviços pouco acoplados e escaláveis, permitindo que as equipes executem o empacotamento declarativo de um aplicativo, suas dependências e configurações como uma imagem de contêiner.
No entanto, à medida que os aplicativos cresciam em complexidade para manter os contêineres distribuídos em vários servidores, desafios surgiram, incluindo: como coordenar e agendar vários contêineres, como habilitar comunicações entre contêineres, como escalar instâncias de contêiner e muito mais. O Kubernetes foi lançado como uma forma de resolver esses desafios.
Quando se trata de tecnologia de contêineres, os nomes comuns que surgem são Docker e Kubernetes. Você pergunta: qual é o melhor? Mas muitas vezes não é sobre um ou outro, mas como você pode usar os dois a seu favor.
Teste o Compass grátis
Aprimore a experiência de desenvolvedor, catalogue todos os serviços e melhore a integridade do software.
O que é o Docker?
O Docker é uma plataforma comercial de conteinerização e um período de execução que ajuda os desenvolvedores a criar, implementar e executar contêineres. Ele usa uma arquitetura cliente-servidor com comandos simples e automação por meio de uma única API.
O Docker também oferece um kit de ferramentas usadas com frequência para empacotar aplicativos em imagens de contêiner imutáveis, escrevendo um Dockerfile e executando os comandos apropriados para criar a imagem usando o servidor do Docker. Os desenvolvedores podem criar contêineres sem o Docker, mas a plataforma Docker facilita esse processo. Essas imagens de contêiner podem ser implementadas e executadas em qualquer plataforma compatível com contêineres, como Kubernetes, Docker Swarm, Mesos ou HashiCorp Nomad.
Embora o Docker ofereça uma maneira eficiente de empacotar e distribuir aplicativos conteinerizados, executar e gerenciar contêineres em escala é um desafio apenas para o Docker. Coordenar e programar contêineres em vários servidores/clusters, atualizar ou implantar aplicativos com tempo de inatividade zero e monitorar a integridade dos contêineres são apenas algumas das considerações que precisam ser feitas.
Para resolver esses problemas e muito mais, soluções para orquestrar contêineres surgiram na forma de Kubernetes, Docker Swarm, Mesos, HashiCorp Nomad e outros. Assim as empresas podem gerenciar um grande volume de contêineres e usuários, equilibrar cargas com eficiência, além de oferecer autenticação e segurança, implementação em multiplataformas e muito mais.
Material relacionado
Microsserviços versus arquitetura monolítica
VER SOLUÇÃO
Melhore a experiência de desenvolvedor com o Compass
O que é Kubernetes?
O Kubernetes (às vezes referido como K8s) é uma plataforma de código aberto popular que orquestra sistemas de período de execução do contêiner em um cluster de recursos em rede. O Kubernetes pode ser usado com ou sem o Docker.
Foi originalmente desenvolvido pelo Google, que precisava de uma nova maneira de executar bilhões de contêineres por semana em escala. O Kubernetes foi lançado como código aberto pelo Google em 2014, sendo agora amplamente considerado o líder de mercado e a ferramenta de orquestração padrão do setor para contêineres e implementação de aplicativos distribuídos. Como observa o Google, o “principal objetivo de design do Kubernetes é facilitar a implementação e o gerenciamento de sistemas distribuídos complexos, enquanto ainda se beneficia da utilização aprimorada que os contêineres permitem”.
O Kubernetes agrupa esses contêineres em um grupo que gerencia na mesma máquina a fim de reduzir a sobrecarga de rede e aumentar a eficiência do uso dos recursos. Um exemplo de conjunto de contêineres é: servidor de aplicativos, cache de Redis e banco de dados SQL. Os contêineres do Docker são um processo por contêiner.
O Kubernetes é, em especial, útil para equipes de DevOps, pois oferece descoberta de serviços, balanceamento de carga dentro do cluster, implementações e reversões automatizadas, autorrecuperação de contêineres que falham e gerenciamento de configuração. Além disso, o Kubernetes é uma ferramenta essencial para criar pipelines de CI/CD de DevOps robustos.
No entanto, o Kubernetes não é uma plataforma como serviço (PaaS) completa, e há muitas considerações a serem feitas ao criar e gerenciar clusters do Kubernetes. A complexidade que vem com o gerenciamento do Kubernetes é um grande fator pelo qual muitos clientes optam por usar os serviços gerenciados do Kubernetes de fornecedores de nuvem.
Benefícios do Kubernetes
O Kubernetes, muitas vezes descrito como o “Linux da nuvem”, é a plataforma de orquestração de contêineres mais popular por alguns motivos. E aqui estão eles:
Operações automatizadas
O Kubernetes vem com uma poderosa ferramenta de API e de linha de comando, chamada kubectl, que lida com uma grande parte do trabalho pesado que envolve o gerenciamento de contêineres, permitindo que você automatize suas operações. O padrão do controlador no Kubernetes garante que os aplicativos/contêineres sejam executados exatamente como especificado.
Abstração de infraestrutura
O Kubernetes gerencia os recursos disponibilizados para ele por você. Assim os desenvolvedores podem manter o foco em escrever códigos de aplicativo e não na infraestrutura subjacente de computação, rede ou armazenamento.
Monitoramento da integridade do serviço
O Kubernetes monitora o ambiente em execução e o compara com o estado preterido. Ele executa verificações de integridade automatizadas nos serviços e reinicia os contêineres que falharam ou pararam. O Kubernetes só disponibiliza serviços quando eles estão em execução e preparados.
Kubernetes vs. Docker
Enquanto o Docker é um período de execução do contêiner, o Kubernetes é uma plataforma para executar e gerenciar contêineres de muitos períodos de execução de contêineres. O Kubernetes é compatível com vários tempos de execução de contêiner, incluindo Docker, containerd, CRI-O e qualquer implementação do Kubernetes CRI (Container Runtime Interface). Uma boa metáfora é o Kubernetes como um “sistema operacional” e os contêineres Docker são “aplicativos” que você instala no “sistema operacional”.
Por conta própria, o Docker é muito benéfico para o desenvolvimento de aplicativos modernos. Ele resolve o problema clássico de “funciona na minha máquina”, mas em nenhum outro lugar. A ferramenta de orquestração de contêineres Docker Swarm é capaz de lidar com uma implementação de carga de trabalho do contêiner de produção de alguns contêineres. Quando um sistema cresce e precisa adicionar muitos contêineres em rede entre si, o Docker autônomo pode enfrentar alguns problemas crescentes que o Kubernetes ajuda a lidar.
Ao comparar os dois, uma comparação melhor é do Kubernetes com o Docker Swarm. O Docker Swarm, ou o modo Docker swarm, é uma ferramenta de orquestração de contêineres como o Kubernetes, o que significa que permite o gerenciamento de vários contêineres implementados em vários hosts que executam o servidor do Docker. O modo swarm está desabilitado por padrão e é algo que precisa ser instalado e configurado por uma equipe de DevOps.
O Kubernetes orquestra clusters de máquinas para trabalhar em conjunto e agenda contêineres para serem executados nessas máquinas com base nos recursos disponíveis. Os contêineres são agrupados por meio de definição declarativa, em pods, que é a unidade básica do Kubernetes. O Kubernetes gerencia automaticamente coisas como descoberta de serviços, balanceamento de carga, alocação de recursos, isolamento e escalabilidade vertical ou horizontal de pods. Ele foi adotado pela comunidade de código aberto e agora faz parte da Cloud Native Computing Foundation. A Amazon, a Microsoft e o Google oferecem serviços gerenciados do Kubernetes em suas plataformas de computação em nuvem, o que reduz significativamente a carga operacional de executar e manter clusters do Kubernetes e suas cargas de trabalho em contêineres.
Docker ou Kubernetes: qual é o certo para você?
Então, se o Docker Swarm e o Kubernetes são plataformas de orquestração de contêineres, qual você vai escolher?
Se você estiver criando e executando sua própria infraestrutura, o Docker Swarm costuma exigir menos instalação e configuração do que o Kubernetes. Ele oferece os mesmos benefícios do Kubernetes, como implementação do seu aplicativo por meio de arquivos YAML declarativos, escalação automática dos serviços para o estado preterido, balanceamento de carga entre contêineres dentro do cluster e segurança e controle de acesso em todos os seus serviços. Se você tem poucas cargas de trabalho em execução, não se importa em gerenciar sua própria infraestrutura ou não precisa de uma função específica que o Kubernetes oferece, então o Docker Swarm pode ser uma ótima opção.
O Kubernetes é mais complexo de configurar no início, mas oferece maior flexibilidade e funções. Ele também tem amplo suporte de uma comunidade ativa de código aberto. O Kubernetes é compatível com várias estratégias de implementação prontas para uso, pode gerenciar a entrada de rede e oferece capacidade de observação imediata nos contêineres. Todos os principais fornecedores de nuvem oferecem serviços gerenciados do Kubernetes que facilitam significativamente o início e aproveitam as funções nativas da nuvem, como a escalonamento automático. Se você estiver executando muitas cargas de trabalho e precisar de interoperabilidade nativa da nuvem e tiver muitas equipes em sua empresa, o que cria a necessidade de maior isolamento dos serviços, é provável que o Kubernetes seja a plataforma que você deve considerar.
Orquestração de contêineres e do Compass
Não importa qual solução de orquestração de contêiner você escolha, é importante usar uma ferramenta para gerenciar a complexidade de sua arquitetura distribuída à medida que você escala. O Atlassian Compass é uma plataforma de experiência de desenvolvedor extensível que reúne informações desconectadas sobre resultados de engenharia e colaboração em equipe em um local central e pesquisável. Além de ajudar a controlar a dispersão de microsserviços com o Catálogo de Componentes, o Compass ajuda a estabelecer práticas recomendadas e mensurar a integridade do software com Indicadores de desempenho, bem como disponibilizar dados e insights em toda a cadeia de ferramentas de DevOps usando extensões criadas na plataforma do Atlassian Forge.
Compartilhar este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.