Hoje avanço um pouco nos conceitos de contêineres trazendo o Kubernetes para automatizar e gerenciar seus aplicativos em contêineres. Ao fim farei um breve comparativo entre o Kubernetes e o docker Swarm.
Tópicos
Kubernetes
O Kubernetes é uma plataforma desenvolvida pela Google para gerenciar aplicativos em contêineres através de múltiplos hosts de um cluster e assim, ampliar a estabilidade e controle do serviço.
Com ele se tornou possível o que por muito tempo não era possível, nativamente, através do Docker: criar balanceamento de cargas e a migração de contêineres sem perda de dados. Além disto é possível automatizar estas ações para ter alta disponibilidade dos seus serviços.
ReplicaSet
O ReplicaSet é a nova geração do já conhecido Replication Controller, este controlador é responsável por manter a disponibilidade dos seus contêineres (no Kubernetes estes contêineres são encapsulados em Pods, individualmente ou, em alguns casos, em grupos). Ele irá gerenciar a replicação dos Pods de forma que:
- Se você necessita de 10 Pods sempre rodando, quando um destes Pods cair ou travar, outro Pod será iniciado em seu host para manter o serviço funcionando.
- Você também pode definir regras para que um novo Pod seja criado sempre que o consumo de CPU de seus Pods, em execução, alcancem 70% de uso, por exemplo.
Lembro que o ReplicaSet não é responsável por definir configurações do seu Pod. Para editar qualquer configuração você deve atualizar o Pod através do Deployment.
Services
Um serviço do Kubernetes é responsável por abstrair das definições lógicas dos Pods, além de definir as regras de acesso a estes Pods. Em outras palavras, aqui atrelamos uma faixa de IP para o ReplicaSet, definimos as regras de acesso do mesmo e configuramos o Load Balance para manter o uso de recursos de cada Pod estável.
Gerenciamento de Storage
Como os Pods são vulneráveis a travamentos e restarts, o Kubernetes trouxe o conceito de volumes independentes, ou seja, possuem suas próprias características de tempo de vida etc. Isto permite que um volume permaneça vivo fora de um contêiner e assim, os dados vinculados a um contêiner “morto” não se percam no meio do caminho. Além disto, um Pod pode utilizar diversos tipos de volumes e inúmeros volumes simultaneamente. Isto porque as regras de como o diretório é e seus conteúdos são determinados pelo tipo de volume utilizado.
Ok. Agora que entendemos um pouco melhor sobre o Kubernetes deu pra ver que ele faz um trabalho de automatização bem completo.
Mas, mesmo depois do Docker ter lançado o Swarm mode, porque o Kubernetes ainda é uma opção mais interessante?
Sem dúvida o Docker swarm é uma opção interessante para criarmos clusters de contêineres e gerenciarmos de forma simples, mas o Kubernetes traz uma proposta bem mais automatizada para fazermos isto.
Enquanto através do Docker Swarm você criará manualmente um cluster, o Kubernetes fará isto tudo automaticamente para você. Ele seguirá suas regras predefinidas (de uso de recursos ou de quantidade de Pods) para manter a estabilidade do serviço.
Um segundo ponto é o isolamento dos volumes que garante que os dados de um Pod estejam da forma que estavam quando ele precisou ser reiniciado.
Não mencionei anteriormente neste post, mas, pelo Kubernetes também é possível definir namespaces para criarmos ambientes isolados de produção e testes. Assim, podemos limitar os recursos de cada ambiente, para que um não interfira no outro.
E para finalizar, um ponto que achei interessante é a flexibilidade dele trabalhar com outros modelos de contêiner que não seja o Docker, como o Rockets (Containers no CoreOS).