Sempre que eu ouço alguém falar que a Cloud é “apenas o computador de outra pessoa”, isso me traz um sorriso, tanto que esse foi um dos primeiros pontos que escolhi para o meu artigo sobre os mitos da nuvem’
A verdade é que, sim, quando a nuvem não é privada, ela obviamente inclui a infraestrutura de um terceiro. Entretanto, o erro da frase acima não está em dizer que a nuvem é o computador de outra pessoa, e sim em uma ênfase completamente errada em um único termo: apenas.
Pela própria natureza do conceito de nuvem, com suas inúmeras possibilidades, a associação com a palavra “apenas” me parece bem injusta. A cloud torna real inovações que mudaram completamente a forma como as empresas estruturam a tecnologia e, consequentemente, a forma como fazem negócios.
Não muito tempo atrás, quem poderia imaginar que as mesmas ferramentas usadas por grandes corporações estariam disponíveis, e financeiramente viáveis, para pequenas e médias empresas? Que recursos críticos como servidores poderiam estar a um clique de distância e disponíveis em uma questão de minutos, possibilitando uso sobre demanda, elasticidade e automação?
Bem, voltando a pergunta central desse artigo: Você sabe o que é o Kubernetes e sua importância?
Para responder isso, primeiro temos que entender melhor outro conceito que também é muito importante: contêineres Linux.
Falando sobre contêineres Linux
Usando uma definição não-técnica, contêineres podem ser entendidos como uma solução para o problema de como se fazer com que o software seja executado de forma confiável quando é movido de um ambiente de computacional para outro. Isso pode ser, por exemplo, do notebook de um desenvolvedor para um ambiente de testes, ou uma migração para ambiente produtivo, ou mesmo de uma máquina física em seu datacenter para um ambiente virtual em uma nuvem pública ou privada.
Contêineres são um conjunto de processos isolados do resto do sistema, eles criam um ambiente completo de execução, incluindo um aplicativo e todas as suas dependências, bibliotecas e outros binários e arquivos de configuração que são necessários para executá-lo, tudo isso agrupado em um pacote. Com a criação desse container isolado para a aplicação, diferenças nas distribuições de sistema operacional e na infraestrutura utilizada são abstraídas.
É importante não confundir contêineres com virtualização. Por exemplo, um servidor físico executando cinco máquinas virtuais teria um hypervisor e cinco sistemas operacionais separados sendo executados sobre ele. Já no caso de um servidor executando aplicações em contêineres, existiria um único sistema operacional, e cada container compartilha o kernel do sistema operacional com os demais, mesmo permanecendo individualmente isolados. O que isso significa em termos práticos? Bem, enquanto um container pode ter apenas pouco mais de 10 megabytes de tamanho, um servidor virtual – que obrigatoriamente inclui todo um sistema operacional – normalmente estará ocupando vários gigabytes.
Contêineres trazem grandes benefícios, por exemplo, enquanto uma máquina virtual leva vários minutos para ser iniciada e carregar suas aplicações, aplicações em contêineres podem ser instanciadas quase que imediatamente. Outro grande benefício é o fato dos contêineres serem modulares: Não há necessidade de executar uma aplicação complexa inteiramente dentro de um único container, é perfeitamente possível dividir a aplicação em módulos, por exemplo, separando o banco de dados do front-end. Esse tipo de arquitetura é conhecida como microsserviços (microservices), e aplicações que são desenvolvidas nesse modelo são bem mais simples de gerenciar, por exemplo, é possível já que cada modulo é relativamente simples e conta com interfaces e operações bem definidas, é perfeitamente possível realizar atualizações individuais em cada módulo sem ter que reconstruir a aplicação como um todo.
Mas e o Kubernetes?
Colocando em termos bem simples, os contêineres são algo extremamente prático e que cada vez mais estão sendo adotados por organizações que querem ter mais agilidade ou mesmo adotar uma abordagem baseada em DevOps. Essa facilidade de uso cria uma tendência bem simples: uma vez que você começa a utilizar, contêineres podem crescer em número muito rapidamente, se multiplicando em uma velocidade assombrosa!
É aí que entra o Kubernetes, originalmente criado e desenvolvido pelos engenheiros do Google, ele é uma uma plataforma de código aberto usada para orquestrar e gerenciar clusters de contêineres, eliminando a maior parte dos processos manuais necessários para implantar e escalar os aplicativos em contêineres. Ou seja, quando se é necessário agrupar em clusters os hosts executados nos contêineres Linux, que podem estar em clouds públicas, privadas ou híbridas, o Kubernetes ajudará a gerenciar esses clusters com facilidade e efetividade.
Na verdade, o Kubernetes organiza os contêineres em grupos chamados “pods”, isso permite solucionar boa parte dos problemas relacionados a sua proliferação. Os pods criam uma camada extra de abstração, dessa forma fica bem mais fácil controlar a carga de trabalho, e fornecer serviços necessários ao funcionamento dos contêineres, como rede e armazenamento.
O que eu posso fazer com o Kubernetes?
Se você entendeu o aspecto modular dos contêineres, fica fácil imaginar que um ambiente de produção vai incluir vários contêineres espalhados em múltiplos hosts. Com o poder de orquestração do Kubernetes, é bem mais simples criar e gerenciar serviços de aplicativos abrangendo múltiplos contêineres, programar como esses contêineres são usados no cluster, escalá-los e gerenciar a sua integridade ao longo do tempo. É claro, o Kubernetes também permite a integração com serviços de segurança, rede, armazenamento, monitoramento, medição e outros.
Dentre outras funcionalidades, o Kubernetes permite:
- Orquestrar contêineres em múltiplos hosts, em clouds públicas, privadas ou híbridas.
- Otimizar o uso do hardware, maximizando a disponibilidade de recursos para execução dos aplicativos.
- Maior agilidade para escalar aplicativos em contêineres e recursos relacionados.
- Gerenciar e automatizar a maior parte das implantações e atualizações de aplicativos.
- Garantir a integridade e autorrecuperação dos aplicativos em contêineres, com posicionamento, reinício, replicação e escalonamento automáticos.
Alguns conceitos importantes
Se você quer entender como funciona a estrutura do Kubernetes, é claro que será preciso entender alguns conceitos e termos específicos, então abaixo estão os mais importantes. O glossário completo você pode acessar no Kubernetes.io:
- API Server: O servidor de API é um componente essencial e serve a API do Kubernetes usando JSON sobre HTTP, que fornece a interface interna e externa para o Kubernetes. O servidor de API processa e valida as solicitações REST e atualiza o estado dos objetos da API no etcd, permitindo, assim, que os clientes configurem cargas de trabalho e contêineres nos nós do Worker.
- Controller Manager: O processo que executa os principais controladores do Kubernetes, como o DaemonSet Controller e o Replication Controller. Os controladores se comunicam com o servidor de API para criar, atualizar e excluir os recursos que gerenciam como, por exemplo, pods.
- Scheduller: É o componente que seleciona em qual nó um pod não programado (a entidade básica gerenciada pelo Scheduller) é executado, com base na disponibilidade de recursos. O Scheduler rastreia o uso de recursos em cada nó para garantir que a carga de trabalho agendada não exceda os recursos disponíveis. Para essa finalidade, o Scheduller deve conhecer os requisitos de recursos, a disponibilidade de recursos e outras restrições e diretivas de políticas fornecidas pelo usuário, como requisitos de qualidade de serviço (QoS), localidade de dados e assim por diante. Em essência, a função do Scheduller é combinar o recurso “oferta” com a “demanda” da carga de trabalho.
- Node: Um nó é uma máquina controlada no Kubernetes. Um nó pode ser uma máquina virtual ou física, dependendo do cluster. Possui os Serviços necessários para executar os Pods e é gerenciado pelos componentes principais. Os Serviços em um nó incluem Docker, kubelet e kube-proxy.
- Pod: O menor e mais simples objeto do Kubernetes. Um Pod representa um conjunto de contêineres em execução no seu cluster.
- ReplicaSet: A nova geração do ReplicationController, o ReplicaSet garante que um número especificado de réplicas de pods esteja em execução ao mesmo tempo.
- Kubelet: Um agente que é executado em cada nó no cluster. Isso garante que os contêineres estejam sendo executados em um pod.
- Kubectl: Uma ferramenta de linha de comando para se comunicar com um servidor Kubernetes API.
Uma curiosidade: 7 de 9 nas origens do Kubernetes
Uma curiosidade que, como bom Trekker eu não poderia deixar passar, é que o codinome original do Kubernetes dentro do Google era o Projeto Sete, uma referência ao personagem Seven of Nine de Star Trek Voyager, a Borg que, após alguns conflitos iniciais, se juntou a tripulação da capitão Janeway Voyager.
4 Comentários
Obrigado por compartilhar!!
Obrigado por compartilhar!!
Olá Cláudio!
Muito bom esse seu artigo: Contextualizou muito bem passando por um esclarecimento breve acerca de cloud computing, sobre contêineres para só então adentrar ao tópico da pergunta. Continue esse bom trabalho!
Olá Cláudio!
Muito bom esse seu artigo: Contextualizou muito bem passando por um esclarecimento breve acerca de cloud computing, sobre contêineres para só então adentrar ao tópico da pergunta. Continue esse bom trabalho!
Obrigado pelo conteúdo é totalmente lógico, com uma boa linguagem e entendível! Estou iniciando no mundo DevOps e agora que minha doca já está em produção e organizada irei implementar o Kubernetes!
Obrigado pelo conteúdo é totalmente lógico, com uma boa linguagem e entendível! Estou iniciando no mundo DevOps e agora que minha doca já está em produção e organizada irei implementar o Kubernetes!
Excelente texto e didática ao transmitir seus conhecimentos
Excelente texto e didática ao transmitir seus conhecimentos