Kubernetes, comumente estilizado como K8s, é uma plataforma de código aberto, portável e extensiva, que automatiza a implantação, o dimensionamento e a gestão de aplicações em contêineres, facilitando tanto a configuração declarativa quanto a automação. Possui ecossistema grande e de rápido crescimento.
O nome Kubernetes tem origem grega e significa timoneiro ou piloto. K8s é a abreviação derivada pela troca das oito letras “ubernete” por “8”, se tornado K”8″s.
Kubernetes foi originalmente projetado pelo Google que foi um dos pioneiros no desenvolvimento da tecnologia de containers Linux. O Google já revelou publicamente que tudo na empresa é executado em contêineres.
Hoje o Kubernetes é mantido pela Cloud Native Computing Foudantion.
Kubernetes funciona com uma variedade de ferramentas de conteinerização, incluindo Docker.
Muitos serviços de nuvem oferecem uma plataforma baseada em Serviço (PaaS ou IaaS), onde o Kubernetes pode ser implantado sob serviço gerenciado. Muitos fornecedores também provêm sua própria marca de distribuição de Kubernetes.
Mas antes de falarmos sobre aplicações em contêineres, vamos voltar um pouco no tempo e ver como eram essas implementações antes.
História das implementações
Vamos voltar um pouco no tempo para entender por que o Kubernetes é tão importante nos dias de hoje.
Implementação tradicional
Há alguns anos as aplicações eram executadas em servidores físicos e por isso, não era possível definir limites de recursos para aplicações em um mesmo servidor físico o que causava problemas de alocação de recursos.
Implantação virtualizada
Para resolver os problemas do servidor físico foi implementado a solução de virtualização, que permitia a execução de várias máquinas virtuais (VMs) em uma única CPU de um servidor físico. A virtualização permitiu que as aplicações fossem isoladas entre as VMs, fornecendo um nível de segurança maior, pois as informações de uma aplicação não podem ser acessadas livremente por outras aplicações.
Com virtualização foi possível melhorar a utilização de recursos em um servidor físico, tendo melhor escalabilidade uma vez que uma aplicação pode ser adicionada ou atualizada facilmente, além da redução dos custos de hardware.
Implementação em contêineres
Os contêineres são muito parecidos com as VMs, mas uma das grandes diferenças é que tem propriedades de isolamento flexibilizados para compartilhar o sistema operacional (SO) entre as aplicações. Assim eles são considerados leves.
Como a VM, um contêiner tem seu próprio sistema de arquivos, compartilhamento de CPU, memória, espaço de processamento e muito mais. Como eles estão separados da infraestrutura subjacente, eles são portáveis entre nuvens e distribuições de sistema operacional.
Cluster no Kubernetes – o que são?
Como já dito anteriormente, o K8s é um projeto de código aberto que tem como objetivo orquestrar containers e automatizar a implantação de aplicações. O Kubernetes gerencia os clusters que contêm os hosts que executam as aplicações Linux.
Os clusters podem incluir e abranger hosts em nuvens on-premise, públicas, privadas ou híbridas, por isso, o Kubernetes é a plataforma ideal para hospedar aplicações cloud-native que exigem escalabilidade rápida, como a transmissão de dados em tempo real por meio do Apache Kafka.
No Kubernetes o estado do cluster é definido pelo utilizador, sendo função do serviço de orquestração atingir e manter o estado desejado, dentro das limitações impostas pelo utilizador. Podemos entender o Kubernetes como dividido em dois planos: o plano de controle, que realiza a orquestração global do sistema, e o plano de dados, onde residem os containers.
Se você deseja agrupar os hosts executados nos containers Linux®(LXC) em clusters, o Kubernetes ajuda a gerenciá-los de maneira fácil e eficiente e em grande escala.
Com o Kubernetes elimina-se muitos dos processos manuais que uma aplicação em containers exige, facilitando e dando agilidade a projetos.
Vantagens do Kubernetes
Ao usar o Kubernetes fica mais fácil implementar e confiar totalmente em uma infraestrutura baseada em containers para os ambientes de produção. Como o propósito do Kubernetes é automatizar completamente as tarefas operacionais, você faz as mesmas tarefas que outros sistemas de gerenciamento ou plataformas de aplicação permitem, mas para seus containers.
Com Kubernetes também pode-se criar apps nativas em nuvem como plataforma de ambiente de execução. Basta usar os padrões do Kubernetes, que são as ferramentas necessárias para o programador criar serviços e aplicações baseados em container.
Aqui vão outras dicas do que é possível fazer com Kubernetes:
- Orquestrar containers em vários hosts.
- Maximizar os recursos necessários na execução de apps empresariais.
- Controlar e automatizar atualizações e implantações de aplicações.
- Ativar e adicionar armazenamento para executar apps stateful.
- Escalar aplicações em containers e os recursos correspondentes com rapidez.
- Gerenciar de maneira mais assertiva os serviços para que a execução das aplicações implantadas ocorra sempre como o esperado.
- Fazer auto recuperação e verificação de integridade dos apps ao automatizar o posicionamento, a reinicialização, a replicação e o escalonamento.
Kubernetes depende de outros projetos open-source, para conseguir desenvolver esse trabalho orquestrado.
Aqui estão alguns dos recursos:
- Registro usando projetos como o Docker Registry.
- Rede usando projetos como o OpenvSwitch e roteamento da edge.
- Telemetria usando projetos como Kibana e Hawkular.
- Segurança usando projetos como LDAP e SELinux com camadas de multilocação.
- Automação com a inclusão de Ansible playbook para gerenciamento de ciclo de vida do cluster e instalação.
- Serviços usando um catálogo vasto de padrões de apps conhecidos.
Termos comuns do Kubernetes
Toda tecnologia tem uma linguagem específica e isso dificulta muito a vida dos desenvolvedores. Então, aqui estão alguns dos termos mais comuns no Kubernetes para lhe ajudar entender melhor:
1) Control plane: conjunto de processos que controla os nós do Kubernetes. É a origem de todas as atribuições de tarefas.
2) Nós: são eles que realizam as tarefas solicitadas e atribuídas pelo control plane.
3) Pod: um grupo de um ou mais containers implantados em um nó. Todos os containers em um pod têm o mesmo endereço IP, IPC, nome de host e outros recursos. Pods abstraem a rede e o armazenamento do container subjacente. Isso facilita a movimentação dos containers pelo cluster.
4) Controlador de replicações: é ele que controla quantas cópias idênticas de um pod devem ser executadas em um determinado local do cluster.
5) Serviço: desacopla as definições de trabalho dos pods. Os proxies de serviço do Kubernetes recebem as solicitações automaticamente no pod certo, não importa para onde ele vá no cluster nem se ele foi substituído.
6) Kubelet: é um serviço executado em nós, lê os manifestos do container e inicia e executa os containers definidos.
7) Kubectl: a ferramenta de configuração da linha de comando do Kubernetes.
Como funciona o kubernetes?
Depois de falarmos sobre os termos mais usados no Kubernetes, vamos falar como ele funciona.
Cluster é a implantação do Kubernetes em funcionamento. O cluster é dividido em duas partes: o control plane e nó, sendo que cada nó tem o seu próprio ambiente Linux®, físico ou virtual. Os nós executam pods que são formados por containers. Já o control plane é o responsável por manter o estado desejado do cluster. As máquinas de computação executam as aplicações e cargas de trabalho.
O Kubernetes é executado em um sistema operacional, como o Red Hat® Entreprise Linux e interage com pods de containers executados em nós.
O control plane do Kubernetes aceita os comandos de um administrador (ou equipe de DevOps) e retransmite essas instruções às máquinas de computação. Essa retransmissão é realizada em conjunto com vários serviços para decidir automaticamente qual nó é o mais adequado para a tarefa. E seguida, os recursos são alocados e os pods do nó atribuídos para cumprir a tarefa solicitada.
O estado do cluster do Kubernetes define quais aplicações ou cargas de trabalho serão executadas, além das imagens que elas usarão, os recursos disponibilizados para elas e outros detalhes de configuração.
O controle sobre os containers acontece em um nível superior o que o torna mais refinado e sem a necessidade de micro gerenciar cada container ou nó separadamente. Ou seja, só é preciso configurar o Kubernetes e definir os nós, os pods e os containers presentes neles, pois o Kubernetes faz toda a orquestração dos containers sozinho.
O ambiente de execução do Kubernetes é escolhido pelo programador. Pode ser servidor físico, nuvem pública, máquinas virtuais e nuvens privadas e híbridas. Ou seja, Kubernetes funciona em vários tipos de infraestrutura.
Também podemos usar Docker como um ambiente de execução de container orquestrado pelo Kubernetes. Quando o Kubernetes programa um pod para um nó, o kubelet no nó instrui o Docker a iniciar os containers especificados. Assim o kubelet coleta o status dos containers do Docker e agrega informação no control plane continuamente. Em seguida, o Docker insere os containers nesse nó e os inicia e interrompe normalmente.
A principal diferença ao usar o Kubernetes com o Docker é que um sistema automatizado solicita que o Docker realize essas tarefas em todos os nós de todos os containers, em vez do administrador efetuar essas solicitações manualmente.
A maioria das implantações on-premises do Kubernetes é executada em uma infraestrutura virtual, com cada vez mais implantações em servidores físicos. Dessa forma, o Kubernetes funciona como uma ferramenta de gerenciamento do ciclo de vida e da implantação de aplicações em container.
Dessa maneira você consegue mais agilidade da nuvem pública e simplicidade on-premises para reduzir os problemas de desenvolvedores nas operações de TI. O custo-benefício é maior, uma vez que não é necessário uma outra camada de hipervisor para executar as VMs. Tem mais flexibilidade de desenvolvimento para implantar containers, aplicações serverless e VMs do Kubernetes, escalando aplicações e infraestruturas. E por último a extensibilidade de nuvem híbrida com o Kubernetes como a camada comum em nuvens públicas e on-premises.
O que achou do nosso artigo? Não deixe de nos seguir nas redes sociais e acompanhar o nosso blog para ficar atualizado!