Kubernetes vs docker: Tem que escolher um?

Se você está estudando sobre o uso de containers para gestão de sua aplicação há no mercado muitas opções de tecnologia para uso. Pode ser até difícil de saber por qual começar e saber tomar a melhor decisão.

Uma questão comum é se alguém deve usar o Docker ou o Kubernetes para gerenciar seus contêineres de aplicativos. Esta é uma pergunta enganosa. Na verdade, o Docker e o Kubernetes não são tecnologias concorrentes. Não há necessidade de eles se enfrentarem.

Em vez disso, elas são tecnologias que podem funcionar juntas para facilitar o gerenciamento do seu aplicativo. Neste artigo, vamos ver o que é o Docker, o que é o Kubernetes e como eles podem trabalhar juntos.

.

o que é Docker?

O Docker é uma tecnologia lançada em 2013 que executa aplicativos dentro de containers virtuais em um computador. Esses containers têm tudo o que o aplicativo precisa para executar já armazenados dentro deles. Esses contêineres são facilmente transferidos para outros computadores por meio do uso de imagens do Docker, que são os estados salvos de um contêiner. Uma imagem de um contêiner Docker será executada da mesma forma em qualquer sistema de computador em que você instalá-lo, sem nenhuma outra configuração necessária.

O Docker é útil durante as fases de desenvolvimento, teste e implementação de um projeto de software. Como o contêiner Docker funciona da mesma maneira em todos os ambientes, simplifica a implantação de um aplicativo de software em um ambiente mais amplo.

Em que o Docker é bom?

Como mencionado, o Docker é bom em configurar todos os pacotes e configurações necessários para executar um aplicativo de software em uma imagem de container portátil. Essa imagem é facilmente compartilhada com outras pessoas em sua rede local ou através da Internet usando o Docker Hub.

Se você estiver criando um aplicativo de software complicado, poderá usar os contêineres do Docker em conjunto para criar sistemas mais complexos. Por exemplo, um aplicativo pode precisar que um banco de dados, uma fila de mensagens e um servidor de aplicativos sejam todos executados juntos. O Docker permite configurar e executar todos os três lado a lado.

Além disso, você pode separar os requisitos de cada tipo de servidor em seu próprio container. Seu servidor de banco de dados precisa de uma versão diferente de uma biblioteca que sua fila de mensagens? Com o Docker significa que você nunca precisa se preocupar com essas duas bibliotecas conflitantes.

O Docker também facilita a experiência com novas bibliotecas de software. Como cada contêiner é criado a partir de uma imagem imutável, se você cometer um erro, é muito fácil e comum reverter seu container de volta à imagem salva. Não importa o quanto você se atrapalhe, consertar seu contêiner é muito simples e rápido..

Os containers também podem ter benefícios positivos de segurança. Se o servidor de aplicativos e o servidor de banco de dados estiverem sendo executados em containers diferentes, um servidor de aplicativos comprometido não poderá acessar a memória do servidor de banco de dados. O Docker tem muitos pontos fortes. É por isso que vem crescendo em popularidade nos últimos anos e não mostra sinais de interrupção.

Em que o Docker NÃO é bom?

Como todas as tecnologias, há desvantagens no uso do Docker. Para começar, os containers do Docker são executados em ambientes virtualizados. Todos os ambientes virtuais tem algum tipo de penalidade de desempenho. O Docker simplesmente não é tão rápido quanto executar um aplicativo diretamente em um servidor dedicado. Na maioria das vezes, isso é ok. A maioria dos aplicativos não percebem a diferença de desempenho entre ambientes virtuais e dedicados.

Mas se você estiver trabalhando em um ambiente em que a latência e a velocidade são de extrema importância, evite o Docker. Outra desvantagem do Docker é que, se o aplicativo que você precisa tiver uma interface gráfica com o usuário, provavelmente você está sem sorte. Embora seja possível executar uma GUI no Docker, é bastante complicado e você terá muitas dificuldades.

Você pode contornar ou atenuar alguns desses problemas. Por exemplo, é possível fazer alguns ajustes de configuração do Docker para melhorar seu desempenho. Isso demanda algum tempo e conhecimento específicos. Se você estiver preocupado com o desempenho geral do Docker na produção, pode-se utilizar alguns aplicativos como o Stackify’s Retrace (nós aqui na Nx2 o utilizamos muito e recomendamos) que é uma ferramenta poderosa para ajudar você a identificar os gargalos do seu aplicativo. Infelizmente, você não consegue contornar todos os problemas do Docker.

Por fim, se o seu aplicativo exigir que dois serviços sejam executados na mesma máquina ao mesmo tempo, os containers não serão adequados.

Entender os pontos fracos do Docker e como eles se relacionam com o seu caso de uso é a chave para maximizar a utilização do Docker.


Quando devo usar o Docker?

Como já notamos, o Docker é uma ferramenta poderosa. Isso facilita a utilização de imagens de container sem alterações (imutáveis) entre computadores. Isso simplifica o desenvolvimento, o teste e a implantação de novos aplicativos. Mesmo que você tenha um aplicativo que não seja perfeito para contêineres, o padrão de implantação consistente pode valer o tempo necessário para configurá-lo.

Se a sua aplicação é uma boa opção para containers, o Docker vale muito a pena; Se você estiver configurando aplicativos que podem ser executados isoladamente, não exigem uma interface gráfica e precisam ser implantados de forma consistente, o Docker é uma ótima opção. Servidores de banco de dados são um ótimo exemplo desse tipo de aplicativo; Não é surpresa que os servidores de banco de dados sejam algumas das imagens mais baixadas no Docker Hub.

É raro usar o Docker para apenas um pedaço de um aplicativo. Na maioria das vezes, quando uma equipe tem uma parte de seu aplicativo usando o Docker, ela usa o Docker para gerenciar todas as partes do aplicativo juntas. Não será apenas o servidor de banco de dados, mas também o servidor de aplicativos, a fila de mensagens e o balanceador de carga.

Quando você começa a juntar todas essas peças, o Docker pode se tornar bastante complicado. Isso se torna ainda mais verdadeiro se você precisar executar mais de uma instância de uma parte específica do seu aplicativo. É aqui que entra o Kubernetes.

O QUE É o Kubernetes?

O Kubernetes é um projeto de código aberto para gerenciar aplicativos em containers mais complexos. Originalmente desenvolvido pelo Google, foi lançado pela primeira vez em 2015. Agora é gerido por uma fundação de software de código-fonte aberta (a Cloud Native Computing Foundation).

Enquanto o Docker controla o container para uma ou algumas partes de um único aplicativo, o Kubernetes controla dezenas de contêineres juntos. Ao contrário do Docker, o Kubernetes não é uma ferramenta para gerenciar containers durante o processo de desenvolvimento ou teste. É mais para garantir que seus containers finais estejam funcionando bem quando estão em produção.

Em que o Kubernetes é bom?

O Kubernetes é usado para garantir que seu aplicativo de produção esteja sendo executado da maneira esperada. Isso não significa apenas garantir que todos os seus contêineres estejam em funcionamento, embora isso possa ajudar também. O Kubernetes pode tornar a sua aplicação auto-recuperável. Isso significa que ele detectará quando um container existente entrar em um estado sem resposta e iniciará um novo contêiner para substituí-lo.

O Kubernetes também pode ajudar a dimensionar seu aplicativo horizontalmente. Isso pode ser feito iniciando novos contêineres que lidam com partes do seu aplicativo que usam muita CPU quando você está sobrecarregado. Também é útil para simplificar as implantações e minimizar o tempo de inatividade. Você pode configurar o Kubernetes para manter a versão existente do seu aplicativo em execução quando você for implantar uma nova versão. Ele garante que a nova versão seja iniciada corretamente e aceite as conexões antes de desativar a versão antiga do seu aplicativo. Seus usuários nem percebem o tempo de inatividade.

O Kubernetes é uma ferramenta poderosa e é capaz de fazer muitas coisas. Isso pode tornar a curva de aprendizado realmente íngreme. Quando você está começando com o Kubernetes, pode parecer uma ferramenta com possibilidades ilimitadas. Enquanto estiver no início dos estudos, certifique-se de procurar recursos que ajudem você a aprender.

Você acabará descobrindo que não é uma ferramenta totalmente ilimitada, mas que é capaz de fazer muitas coisas. As pessoas que usam o Kubernetes para gerenciar sua infraestrutura de nuvem descrevem que tiveram grandes reduções no tempo necessário para implantar um aplicativo. Seus aplicativos funcionam com menos interrupções e seus clientes apreciam o aumento da capacidade de resposta devido ao dimensionamento automático.

Docker vs Kubernetes

Em que o Kubernetes não é bom?

Assim como o Docker, o Kubernetes não é uma bala de prata. Para começar, o Kubernetes é muito complicado. Como já observamos anteriormente, ele pode fazer muitas coisas muito bem. Esta é uma espada de dois gumes. É possível fazer muitas coisas diferentes, mas levará muito tempo para aprender a fazer isso. Você aprenderá muitas dessas etapas por meio de tentativa e erro. Isso pode levar a um sentimento de frustração com o seu progresso ao tentar descobrir as próximas etapas para implantar seu aplicativo da maneira que você deseja.

Complexidade não é o único problema que você vai encontrar, no entanto. Proteger uma instalação do Kubernetes pode ser bem difícil. Um desafio comum é que os containers do Kubernetes são configurados com um token compartilhado que permite ao Kubernetes modificar o contêiner enquanto ele está em execução. Se um invasor obtiver acesso a esse token, ele terá acesso a todos os contêineres em seu sistema. Isso é um grande problema.

Além disso, há outros problemas comuns relatados pelos usuários do Kubernetes. Configurar redes compartilhadas e recursos de armazenamento, por exemplo, pode ser uma luta. Como os containers não são projetados para persistir os dados, isso significa que você precisa de um lugar onde seus contêineres armazenem dados. Compartilhar esses dados efetivamente entre um cluster de contêineres pode ser um grande desafio.

Os leitores mais astutos perceberão que isso não é necessariamente uma lista de coisas que o Kubernetes não é bom. Em vez disso, é uma lista de desafios que o Kubernetes apresenta. Um resumo eficaz é que a maior fraqueza do Kubernetes é que ele não é muito fácil de usar.



Quando devo utilizar o Kubernetes?

Muitos provedores de serviços em nuvem suportam sistemas semelhantes ao Kubernetes em sua própria infraestrutura. O Amazon Cloud Formation, por exemplo, gerencia clusters de servidores na AWS e é muito mais fácil de usar do que o Kubernetes. Então, por que usar o Kubernetes se há ferramentas mais simples por aí? Um argumento sólido é que o Kubernetes é independente de fornecedor.

O Kubernetes não se importa se você está implantando na Amazon, no Google ou no Azure ou em servidores localizados no seu porão. Funciona da mesma forma em todos os sistemas. Se você tiver alguns servidores em máquinas fisicamente localizadas em seu prédio e outros em um provedor em nuvem, o Kubernetes poderá gerenciar facilmente ambos.

Se sua organização não está comprometida com um único provedor de nuvem ou com qualquer provedor de nuvem, o Kubernetes é uma ótima ferramenta para gerenciar seus clusters de contêiner. Sempre que você precisar de implantações simples e independentes de fornecedores, ambientes de autorrecuperação e escalonamento automático, o Kubernetes é uma ótima ferramenta para o trabalho.

Como o Kubernetes e o Docker trabalham juntos?

Por isso, voltamos à compreensão de que o jeito certo de pensar sobre essas tecnologias não é “Kubernetes vs Docker”, mas sim “Kubernetes e Docker”. O Kubernetes e o Docker trabalham juntos para orquestrar a publicação de um software. Os contêineres do Docker servem como instrumentos individuais, cada um fornecendo uma única parte do todo. Kubernetes é o maestro da orquestra, certificando-se de que todas as peças estão afinadas e tocando a nota correta.

Quando você trabalha com o Kubernetes, é possível automatizar muito do trabalho de manutenção e implantação de aplicativos complextos. Equipes maduras de software desenvolverão seu trabalho no Kubernetes diretamente em seus pipelines de integração contínua, o que significa que os novos recursos de software são implantados e dimensionados automaticamente quase que instantaneamente, assim que são gravados. Obviamente, isso é ótimo para os clientes do seu software, mas também é ótimo para as equipes. O Kubernetes e o Docker trabalhando juntos significa que os desenvolvedores estão vendo o seu trabalho sair para o mundo muito mais rápido do que estavam acostumados.

Notamos que uma das desvantagens do Kubernetes é que ele é difícil de configurar e de ser manter porque é muito poderoso. Isso continua verdadeiro, mas também há boas notícias nesse horizonte.

Algumas empresas intrépidas estão começando a construir o Kubernetes como uma oferta de serviços, o que simplifica o esforço de colocar o Kubernetes em funcionamento e estabilizá-lo. Assim como o AWS EC2 simplifica o esforço de colocar um servidor em funcionamento, o KaaS (Kubernetes As A Service) simplifica o esforço de instalar e executar dezenas de servidores. Isso elimina facilmente uma das maiores fraquezas do Kubernetes..

Há alternativas ao Kubernetes?

Então, agora que você sabe que é “Kubernetes e Docker”, provavelmente ainda está se perguntando se há algumas alternativas. Você não quer necessariamente pular direto para o primeiro sistema de orquestração de contêineres que você encontrou.

A boa notícia é que a orquestração de contêineres é uma indústria efervescente, e há uma série de excelentes alternativas para o Kubernetes. Provavelmente, o mais maduro é o Docker Swarm, que é construído diretamente pela mesma organização que constrói o próprio Docker. Como bônus, o Docker Swarm é muito mais simples de configurar do que o Kubernetes, eliminando um dos grandes pontos negativos. Também temos o Apache Marathon que tem o apoio da Apache Software Foundation e é open source. Há também boas opções em Nomad e Kontena, mais dois participantes no campo.

Há também a opção de buscar o Kubernetes como um serviço pago como mencionado anteriormente.

Containers

PARA ONDE EU VOU DAQUI?

Espero que este artigo tenha ajudado a descrever como o Kubernetes e o Docker são diferentes e como eles funcionam juntos. Se você está apenas entrando na contêinerização, talvez o melhor próximo passo seja começar a aprender mais sobre o Docker e testá-lo por conta própria.

Se você está aqui para aprender em como levar a conteinerização para o próximo nível em sua organização, ler mais sobre o Kubernetes e alguns de seus concorrentes é um ótimo próximo passo. Talvez você não queira instalar e configurar o Kubernetes, pois sabemos que não é uma tarefa fácil, a resposta certa então pode ser a sua empresa adotar o KaaS.

Seja qual for o seu próximo passo, agora é um momento emocionante para os entusiastas em tecnologia. É mais fácil do que nunca criar e implantar novos aplicativos que podem ser dimensionados para milhões de usuários com alguns botões. Isso era impensável há 20 anos! Hoje é fácil. Como sempre, o melhor passo seguinte é apenas construir algo.

Este arquivo foi baseado e teve tradução livre do artigo de ERIC BOERSMA de Maio/2019 do site www.stackfy.com –

Evandro Prieto – CEO Nx2

Sem comentários

Publique um comentário