La a virtualização se tornou uma prática muito comum, especialmente em serviços de nuvem para poder obter mais dos servidores nos data centers. Mas, ultimamente, a virtualização baseada em container é a que se impõe, pois permite uma gestão muito mais eficiente (por não ter que duplicar determinados processos). E é nesse pico que surgem as batalhas do Docker vs. Kubernetes.
Dois projetos muito populares, que provavelmente você já conhece. Ambos com suas vantagens e desvantagens, e com diferenças que pode ser fundamental para ajudá-lo a escolher um projeto de acordo com suas necessidades ...
O que é virtualização baseada em contêiner?
Como você sabe, existem vários tipos de virtualizaçãocomo virtualização completa, paravirtualização, etc. Bem, nesta seção, vou me concentrar na virtualização completa que geralmente é usada ao montar máquinas virtuais e contêineres, para não introduzir outras variáveis que podem confundi-lo.
- Máquinas virtuais- É uma abordagem de virtualização centrada no alcance. É baseado em um hipervisor, como KVM, Xen ou programas como VMWare, VirtualBox, etc. Com este software, uma máquina física completa (vCPU, vRAM, drives de disco, redes virtuais, periféricos, etc.) é emulada. Assim, um sistema operacional (convidado) pode ser instalado neste hardware virtual e, a partir dele, os aplicativos podem ser instalados e executados da mesma forma que seria feito no sistema operacional host.
- contentores: É outra tecnologia em que se junta uma espécie de gaiola ou sandbox da qual se dispensam algumas partes deste sistema completo, mais eficiente e com algumas vantagens de portabilidade e segurança extra (embora não isenta de vulnerabilidades) . Na verdade, em vez de um hipervisor, nesses casos, há um software como o Docker e o Kubernetes que usará o próprio sistema host para executar aplicativos isolados. A desvantagem é que ele só permite que você implante aplicativos nativos do próprio SO host. Ou seja, enquanto em uma VM você pode virtualizar o Windows em uma distro Linux, por exemplo, e nesse Windows você pode executar qualquer aplicativo nativo para ele, em um contêiner você só pode fazer isso com aplicativos suportados pelo sistema host, neste caso com Linux ...
Lembre-se de que extensões ou suporte virtualização de hardware, já que Intel VT e AMD-V conseguiram melhorar bastante o desempenho, assumindo apenas 2% de sobrecarga para o CPU. Mas isso não se aplica a outros recursos, como memória ou o próprio armazenamento que é alocado para virtualização total, o que significa uma demanda de recursos considerável.
Tudo isso é o que os contêineres resolvem, que não precisa duplicar certos processos para ser capaz de implantar um aplicativo. Por exemplo, se você quiser criar um contêiner com um servidor Apache, com a máquina virtual completa você terá o sistema operacional host, o hipervisor, o sistema operacional convidado e o software para esse serviço. Por outro lado, com o container bastaria ter o software que implementa o referido serviço, já que estaria rodando em uma "caixa" isolada e utilizando o próprio sistema operacional host. Além disso, o lançamento do aplicativo é muito mais rápido, eliminando o sistema operacional convidado.
O que é Docker?
Estivador é um projeto de código aberto, sob a licença Apache, escrito na linguagem de programação Go e usado para automatizar a implantação de aplicativos em contêineres. Ou seja, este software permitirá gerenciar containers em diferentes sistemas operacionais, já que funciona em diversas plataformas.
Quando o Docker apareceu, teve muitas vantagens, e se espalhou rapidamente. Sua visão isolada do sistema operacional e simplicidade, permitiu construir containers com apps, implementá-los, escaloná-los e executá-los rapidamente. Uma forma de lançar todos os aplicativos que você precisa com um consumo mínimo de recursos.
Em resumo, o Docker oferece o seguinte Características chave:
- Isolamento do meio ambiente.
- Gerenciamento de contêineres.
- Controle de versão.
- Localização / afinidade.
- Agilidade.
- Produtividade.
- Eficiência.
Mas não estava livre de certos problemasComo quando esses contêineres tiveram que se coordenar, comunicar-se uns com os outros. Este foi um dos motivos que levaram à criação do Kubernetes ...
Como comentarei mais tarde Docker swarm, Gostaria de comentar que é um software criado pelos mesmos desenvolvedores Docker para poder agrupar uma série de hosts Docker em um cluster e, assim, gerenciar os clusters de forma centralizada, além de orquestrar os contêineres.
O que é Kubernetes?
Ele foi originalmente criado pelo Google e, posteriormente, doado à Cloud Native Computing Foundation. Kubernetes É também um sistema semelhante ao Docker, de código aberto, licenciado sob Apache e escrito usando a linguagem de programação Go. É usado para automatizar a implantação e o gerenciamento de aplicativos em contêineres. Além disso, ele oferece suporte a diferentes ambientes para a execução de contêineres, incluindo Docker.
Em última análise, o Kubernetes é um equipamento de orquestração container que se encarrega de auxiliar os diferentes containers das diferentes máquinas, sua gestão e distribuição de carga entre eles. É especialmente essa organização que fez deste projeto uma parte essencial neste tipo de cenários ...
- Agendamento automatizado.
- Capacidades de autocura.
- Implementações e implementações automatizadas.
- Balanceamento de carga e escala horizontal.
- Maior densidade de utilização de recursos.
- Funções orientadas para ambientes de negócios.
- Gerenciamento centralizado de aplicativos.
- Infraestrutura autoescalável.
- Configuração declarativa.
- Confiabilidade.
Docker vs. Kubernetes
Como você pode ver na definição, ambos são muito semelhantes em muitos aspectos, mas você tem suas diferenças, além de ter suas vantagens e desvantagens como todo. Você pode pensar que conhecendo esses detalhes teria tudo para saber qual escolher, dependendo do objetivo que você tem.
No entanto, o problema é algo mais complexo do que isso. Não se trata de Docker vs Kuernetes, pois seria como comparar coisas muito diferentes e você cairia no erro de pensar que tem que escolher entre um e outro. O resultado do Docker vs Kubernetes é absurdo, em vez disso, você deve unir as duas tecnologias para poder entregar e escalonar aplicativos em contêiner de uma maneira melhor.
O mais adequado seria comparar Docker Swarm com Kubernetes. Isso teria mais sucesso, já que Docker Swarm é uma tecnologia de orquestração Docker para a criação de clusters de contêiner. Embora, mesmo assim, não fosse totalmente bem-sucedido ... Na verdade, o Kubernetes foi projetado para ser executado em um cluster, sendo capaz de coordenar clusters de nós em escala na produção de forma eficiente, enquanto o Docker o faz em modo único.
Diferenças entre Docker e Kubernetes
Salvando aqueles diferentes, se você quiser saber as divergências entre Docker Swarm e Kubernetes, eles seriam:
- O Kubernetes inclui muitas opções para personalização falta no Docker Swarm.
- Docker Swarm é mais facil para configurar devido à sua simplicidade. Além disso, também é mais fácil de integrar ao ecossistema Docker.
- Em vez disso, o Tolerância ao erro O Kubernetes é mais alto, o que pode ser mais positivo em ambientes como servidores altamente disponíveis.
- Docker Swarm é mais rápido quanto à implantação e expansão de containers.
- O Kubernetes, por sua vez, oferece maiores garantias para os estados do cluster.
- El balanceamento de carga no Kubernetes permite um melhor equilíbrio, embora não seja automático como no Docker.
- Ofertas do Kubernetes melhor flexibilidademesmo em aplicações complexas.
- Docker Swarm suportaria até 2000 nós, contra 5000 para Kubernetes.
- Kubernetes é otimizado para muitos clusters pequenos, enquanto os Dockers são para um grande cluster.
- Kubernetes é complicado, Docker mais simples.
- O Kubernetes pode permitir compartilhar espaços de armazenamento entre qualquer contêiner, enquanto o Docker é mais limitado e compartilhado apenas entre contêineres no mesmo pod.
- Docker Swarm permite que você use Software de terceiros para registro e monitoramento, o Kubernetes inclui suas próprias ferramentas integradas.
- Docker Swarm é limitado a 95.000 recipientes, enquanto o Kubernetes pode suportar até 300.000.
- Enquanto o Docker tem um grande comunidade O Kubernetes também é apoiado por empresas como Microsoft, Amazon, Google e IBM.
- Docker é usado por empresas como Spotify, Pinterest, eBay, Twitter, etc. Enquanto o Kubernetes prefere 9GAG, Intuit, Buffer, Evernote, etc.
Vantagens
Tendo visto algumas divergências, agora é a vez de as vantagens de cada um:
- Kubernetes:
- Fácil organização do serviço com pods.
- Desenvolvido pelo Google, com ampla experiência no setor de nuvem.
- Uma enorme comunidade e ferramentas de orquestração de contêineres.
- Variedade de opções de armazenamento, incluindo SANs locais e nuvens públicas.
- Estivador:
- Configuração inicial eficiente e fácil.
- Rastreia versões de contêineres para examinar variações.
- Velocidade.
- Documentação muito boa.
- Bom isolamento entre aplicativos.
Desvantagens
Em relação a as desvantagens:
- Kubernetes:
- Migrações mais complexas.
- Processo complexo de instalação e configuração.
- Incompatível com as ferramentas Docker existentes.
- Implementar um cluster manual é complicado.
- Estivador:
- Ele não fornece uma opção de armazenamento.
- Acompanhamento ruim.
- Sem reprogramação automática de nós inativos.
- As ações devem ser executadas no CLI.
- Gerenciamento manual de múltiplas instâncias.
- Você precisa de suporte para outras ferramentas.
- Implantação de cluster manual difícil.
- Sem suporte para verificações de saúde.
- A Docker é uma empresa com fins lucrativos e alguns de seus componentes críticos, como o Docker Engine e o Docker Desktop, não são de código aberto.
Docker vs Kubernetes: Conclusão
Como você pode imaginar, não é tão fácil escolher entre um ou outro. A batalha entre o Docker e o Kubernetes é mais complexa do que pode parecer. E tudo vai depender do objetivo que você tem. Um ou outro será mais adequado, e essa deve ser sua escolha.
Em muitos outros casos, usar Kubernetes com Docker será o melhor de todas as opções. Ambos os projetos funcionam bem juntos. Isso pode melhorar a segurança da infraestrutura e a alta disponibilidade de aplicativos. Você pode até tornar os aplicativos mais escaláveis.
Muito obrigado ! Está a ficar mais claro para mim e sobretudo compreender que, como em muitas ocasiões, não existe melhor ou pior, senão uma questão de escolher o mais adequado.
Talvez eu só precise de um exemplo mais claro para entender em que cenário um ou outro funciona melhor e, nesse caso, usá-los juntos.
Além disso, quais alternativas temos para esse tipo de software?
E que utilidade pode dar quem está começando a conhecer os contêineres, ver casos reais sem esperar para trabalhar em grandes empresas?
Acho que algo está definido incorretamente aqui, o docker é um gerenciador de contêineres, não pode ser comparado a um orquestrador.
A comparação seria entre Docker Swarm e Kubernetes.
Aparentemente durante a confecção deste magnífico post (muito interessante na minha opinião), alguns termos foram cruzados.