O que é Kubernetes
O que é Kubernetes?
Para entender o Kubernetes e o que ele é, vamos começar falando brevemente de Docker. O Docker é a ferramenta padrão para deployar/implementar uma aplicação usando containers. Em outras palavras, o Docker se baseia no formato mais popular para empacotar uma aplicação e é a container engine mais usada.
A grande vantagem de um container é encapsular todas as dependências necessárias para rodá-lo, como bibliotecas, o runtime e o código da aplicação. Tudo isso em um único pacote chamado de imagem, que pode ser versionado e fácil de distribuir.
O Docker revolucionou a forma como distribuir e rodar a aplicação. Porém, uma vez tendo um container rodando, há ainda outras questões a resolver. Por exemplo, se um container falha na execução, como garantir que ele sobe novamente de maneira automática (alta disponibilidade)? E se precisarmos de 4 containers, como automatizar e garantir que sempre teremos os 4 rodando (escalabilidade)? E mais, se quisermos algo elástico, como por exemplo ter no mínimo 1 container mas podendo crescer até 5 em execução, como fazer? Isso são só algumas questões levantadas, existem vários outras (rede, volumes, monitoramento, atualização etc) que o Docker sozinho não resolve…..
A preocupação ainda cresce se pensarmos em um arquitetura baseada em Microservices. Ou seja, a aplicação que estava contida em um único container, agora é dividida em vários outros que precisam interagir entre si de maneira confiável passando por vários hosts. E claro, garantindo alta disponibilidade e escalabilidade. A complexidade só cresce ...
Reparem aqui a necessidade de ter um "gerenciador de container", alguém que "fica de olho" nos containers em execução, garantindo que o sistema como um todo continua rodando como foi planejado. Pensando nisso, será que não existe uma ferramenta que assume essas responsabilidades? Será que o Google não tem algo para ajudar? Talvez um projeto open-source, bem popular que também funciona nos grandes provedores de nuvem?
Bom, o nome do artigo já deu um pista, mas o que estamos procurando se chama Kubernetes, criado pelo Google com grandes contribuições da Red Hat e hoje é um dos projeto open source mais populares no Github. O nome Kubernetes soa um pouco estranho, pois é uma palavra grega e significa "timoneiro" ou "piloto" (o navio de carga pilotado pelo Kubernetes).
O Kubernetes veio com grande experiência da Google e não para de crescer nas funcionalidades e usuários. É ele quem gerencia os containers em execução e por isso ele também é chamado de Orquestrador de Containers. Através dele podemos definir o estado de um sistema completo, por exemplo baseado em Microservices, seguindo boas práticas de infraestrutura como código, permitindo balanceamento de carga, alta disponibilidade, atualizações em lote e rollbacks e muito muito mais.
Hoje em dia os grandes provedores de nuvem como Azure, AWS, IBM, Red Hat ou Google dão suporte ao Kubernetes. Além disso, existe uma implementação local chamada de Minikube que simula um cluster Kubernetes, ideal para testes e estudos. O mais legal é que as configurações locais, que definem o estado da aplicação, também rodam no Kubernetes na nuvem. Ou seja, podemos testar o orquestrador local usando Minikube e depois publicar o sistema no AWS ou Azure, apenas com poucas alterações.
Por fim vale ressaltar que o Kubernetes não é único Orquestrador de Containers no mercado. Há uma solução da própria empresa Docker, chamada de Docker Swarm com o mesmo propósito, gerenciar e cuidar os container em execução (a segunda imagem é o logo do Docker Swarm). Qual dos dois orquestradores é melhor ou mais fácil de usar é outra discussão, mas o mercado parece adotar mais o Kubernetes do que o Docker Swarm.