Docker e Kubernetes no Universo Digital

Na contemporaneidade vivemos a Era da Informação, que está associada às altas demandas de tecnologia, velocidade e conectividade. Para isso, milhares de pessoas e empresas trabalham diariamente para criar novas ferramentas e soluções para resolver impasses no mundo da tecnologia. Entre esses dilemas está a virtualização de máquinas para a execução de aplicativos, que são desenvolvidos a partir do potencial dos hardwares perdidos. Para suprir esta demanda, foram criados os Containers.

Os containers são tecnologias que permitem empacotar e isolar todos os arquivos e processos necessários para executar uma determinada aplicação, independente do ambiente que ela se encontra. Isso se deve ao fato de que eles compartilham o mesmo kernel do sistema operacional e isolam os processos da aplicação do restante do sistema. Ou seja, os containers são executados de maneira nativa no sistema operacional, compartilhando o sistema entre todos os containers.

Mas afinal, o que isso significa? O container não utiliza todo um sistema operacional individual. Esta tecnologia permite a criação de blocos independentes que são dedicados diretamente à aplicação.

Fonte: RED HAT, 2020. Disponível em: <https://www.redhat.com/pt-br/topics/containers/whats-a-linux-container>

Em 2008 surgiu uma tecnologia que facilitaria muito a implementação de containers, o Docker. O Docker incrementou novos conceitos e ferramentas, como uma biblioteca de imagens de container pré-criadas, conceito de servidor de registro, um daemon de servidor e etc. Ao combinar estas tecnologias, foi possível permitir que os usuários criassem novos containers em camadas, com mais rapidez e fácil compartilhamento.

Os containers têm por objetivo criar uma independência de hardware e a habilidade de executar diversas aplicações separadamente, utilizando o sistema da melhor forma possível. Para isso, o Docker faz o uso do kernel e seus recursos como o Cgroups e namespace, separando e isolando os processos para que eles sejam executados de maneiras independentes.

Nesta linha, emergiu o Docker, que é uma plataforma open source para desenvolvimento, envio e execução de aplicativos, fornecendo a capacidade de empacotar e executar aplicativos em um container. Ademais, são viabilizadas ferramentas e gerenciamento do ciclo de vida dos containers.

O Docker fornece um modelo de implementação com base em imagens. Imagem é um modelo de leitura, com instruções para criar um container do Docker. Deste modo, ocorre a facilitação do compartilhamento de uma aplicação ou conjunto de serviços, contendo todas as dependências deles em diversos ambientes, automatizando a implementação das aplicações no ecossistema de containers.

Com esta tecnologia, cria-se a oportunidade de lidar com os containers como se fossem máquinas virtuais modulares e extremamente leves. Com isso, apresentam flexibilidade para criar, implementar e migrar um container de um ambiente para outro, otimizando as aplicações na Nuvem (Cloud).

A tecnologia Docker apresenta diversas vantagens para os seus clientes, podemos citar, como principais:

  • Modularidade: O Docker permite desativar parte de uma determinada aplicação para realizar reparos ou atualizações, sem a necessidade de interromper toda a aplicação.
  • Reversão: Esta tecnologia cria as imagens em camadas: uma série de comandos que, quando unidos, formam a imagem. Caso ocorra uma alteração na imagem e ela apresente alguma falha ou desempenho inferior, é possível realizar a reversão para a imagem anterior.
  • Rápida implementação: Outrora era necessário muito tempo e gastos para implementar novos hardwares com suas aplicações. Os containers fundamentados em Docker reduzem o tempo de horas de implementação para questão de segundos.
  • Portabilidade: Um aplicativo, juntamente com todas as suas dependências, pode ser agrupado em um único container, independente do sistema. Esse container pode ser facilmente transferido e executado em outra máquina que contenha o Docker instalado nela, pois sempre haverá compatibilidade.

O Docker é excelente para gerenciar containers únicos. Entretanto, quando se utilizam muitos containers e aplicações, segregados em centenas de partes, o gerenciamento e a orquestração tornam-se difíceis. Contudo, estas dificuldades podem ser facilmente superadas, utilizando uma nova tecnologia de orquestração, os Kubernetes.

 

Container Vs Máquina Virtual

Uma máquina virtual utiliza um hipervisor para emular o hardware físico. Portanto, para essas máquinas funcionarem, é necessário instalar novos softwares em todas as virtualizações, permitindo rodar diversos sistemas operacionais, iguais ou não, o que acaba deixando a máquina pesada e cheia de outros objetos que nem sempre são necessários para executar as aplicações às quais ela foi designada.

Os containers são apenas uma “emulação do software”. São emulados de maneira nativa no Linux, compartilhando o kernel. Dentro dos containers estarão somente as informações, códigos e designações necessárias somente para que aquela determinada aplicação seja executada, suprimindo assim a criação de uma nova máquina.

Fonte: RED HAT, 2020. Disponível em: <https://www.redhat.com/pt-br/topics/containers/whats-a-linux-container>

Kubernetes

O Kubernete, conhecido como K8S, é uma plataforma open source para orquestrar, automatizar operações e gerenciar clusters de containers. Cluster é a arquitetura de sistemas capaz de combinar vários computadores para que trabalhem em conjunto como um único sistema, sejam elementos físicos ou virtuais. Desta maneira, eliminamos grande parte dos processos manuais de implementação e escalabilidade das aplicações, aumentando a facilidade e a efetividade.

A princípio, o K8S foi criado e desenvolvido pelos engenheiros da Google. Em 2015 foi doado à Cloud Native Computing Foundation.

Grandes aplicações englobam múltiplos containers, que são implementados em vários hosts do servidor. Logo, a segurança dos containers contém várias camadas complexas. É aí que o Kubernetes entra em cena, oferecendo os recursos necessários para a orquestração e gerenciamento de modo a implantar containers em escala para essas aplicações de trabalho. A plataforma consegue fazer com que tanto elementos físicos, como elementos virtuais possam se comunicar de maneira transparente. Com esta orquestração, é possível gerar serviços de aplicações que incluem múltiplos containers, programar o uso deles no cluster, escalá-los e gerenciar a integridade do sistema.

Fonte: RED HAT, 2020. Disponível em: <https://www.redhat.com/pt-br/topics/containers/what-is-kubernetes>

O Kubernetes conta com termos específicos, para maior entendimento serão listados alguns:

  • Master: É a máquina que controla os nós do Kubernets e faz as atribuições das tarefas.
  • Nó: São máquinas que realizam as tarefas solicitadas e atribuídas.
  • Pod: É um grupo de um ou mais containers implementados em um único nó. Eles separam a rede e o armazenamento dos containers, facilitando a movimentação pelos clusters.

O Kubernetes ordena vários problemas similares que ocorrem com a proliferação dos containers, organizando-os em pods. Os pods adicionam uma camada de abstração aos containers agrupados, facilitando a programação das cargas de trabalho, fornecendo os serviços necessários e garantindo que o número de containers sempre serão o suficiente para atender os requisitos da aplicação.

Sua infraestrutura é arquitetada da seguinte maneira: O Kubernetes é executado em um sistema operacional e interage com pods de containers executados em nós. A máquina mestre aceita os comandos de um administrador e retransmite essas instruções aos nós subservientes. Essa transmissão é realizada em conjunto com vários serviços para automaticamente decidir qual nó é o mais adequado para a tarefa. Depois, são alocados os recursos e atribuídos os pods do nó para cumprir a tarefa solicitada.

Fonte: RED HAT, 2020. Disponível em: <https://www.redhat.com/pt-br/topics/containers/what-is-kubernetes>

Conclusão

Podemos concluir que todas as tecnologias até aqui apresentadas trabalham em conjunto. Nenhuma encobre a outra, mas apresentam soluções que melhoram as ferramentas já existentes, à medida que o volume de aplicações e informações aumentam. Estas ferramentas existem para facilitar e tornar o uso de aplicações mais fácil e conveniente para os usuários, assim como distribuir o hardware da melhor forma possível, para não sobrecarregar nenhuma aplicação.

 

Referências

1. RED HAT. O que é Docker? Disponível em: <https://www.redhat.com/pt-br/topics/containers/what-is-docker>. Acesso em: 08 fev. 2020.

2. RED HAT. Introdução aos containers Linux. Disponível em: <https://www.redhat.com/pt-br/topics/containers>. Acesso em: 08 fev. 2020.

3. RED HAT. VANTAGENS DE USAR O DOCKER. Disponível em: <https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.0_release_notes/sect-red_hat_enterprise_linux-7.0_release_notes-linux_containers_with_docker_format-advantages_of_using_docker>. Acesso em: 09 fev. 2020.

4. RED HAT. O que é um container Linux? Disponível em: <https://www.redhat.com/pt-br/topics/containers/whats-a-linux-container>. Acesso em: 09 fev. 2020.

5. RED HAT. Kubernetes e a tecnologia de containers. Disponível em: <https://www.redhat.com/pt-br/topics/containers/what-is-kubernetes>. Acesso em: 10 fev. 2020.

6. DOCKER. Visão geral do Docker. Disponível em: <https://docs.docker.com/engine/docker-overview/#what-can-i-use-docker-for>. Acesso em: 11 fev. 2020.

7. HILDRED, Tim. A história dos contêineres. 2015. Disponível em: <https://www.redhat.com/en/blog/history-containers>. Acesso em: 12 fev. 2020.