Facebook pixel
>Blog>Ciência de Dados
Ciência de Dados

O que é Kubernetes? Entenda para que serve e como utilizá-lo!

Provavelmente você já deve ter ouvido falar sobre o Kubernetes, certo? No artigo que escrevi sobre Docker (você pode encontrar ele clicando aqui) expliquei um pouco sobre o universo de containers e como os mesmos funcionam.

Provavelmente você já deve ter ouvido falar sobre o Kubernetes, certo? No artigo que escrevi sobre Docker (você pode encontrar ele clicando aqui) expliquei um pouco sobre o universo de containers e como os mesmos funcionam. Legal, mas qual é a ligação? Pois muito bem, o Kubernetes é um orquestrador de containers em produção. Reparem que eu falei containers no geral, então caso você esteja trabalhando com container em outra tecnologia que não seja Docker, isso não é necessariamente um problema, pois o Kubernetes tem suporte a diversas interfaces de execução – cri-o e containerd para dar alguns exemplos.

O Kubernetes, antes de mais nada, é uma plataforma portável e extensiva, além de ser OpenSource e mantido pela CNCF — Cloud Native Computing Foundation. Portanto é extremamente flexível: você consegue trabalhar com ele desde infra on premise até cloud (AWS, GCP, Azure, DigitalOcean – para citar alguns exemplos).

O objetivo do Kubernetes é gerenciar cargas de trabalho e execução de containers, e, com isso, facilitar a configuração declarativa. Uma curiosidade é que o Kubernetes é comumente  conhecido apenas como “K8S” (a origem é basicamente um trocadilho com o próprio nome: K + 8 caracteres + S, daí K8S).

logo kubernetes

Mas afinal de contas, o que é orquestração de container?

É o gerenciamento de servidores individuais que rodam em containers. Com isso conseguimos manter a estrutura elástica de forma automatizada. Além de facilitar a alocação de recursos, provisionamento e o balanceamento de carga da aplicação.

Docker vs. Kubernetes

Apenas para explicar, o Docker é uma plataforma de conteinerização – com foco em construir, distribuir e executar os containers. E o Kubernetes como dito é um orquestrador de container que trabalha com plataformas como o Docker, porém também consegue trabalhar com outros runtimes.

DevOps Em nosso programa intensivo de DevOps, você terá contato com conceitos e Frameworks de desenvolvimento Front-End, Back-End, Conteinerização, e Performance aplicados ao contexto de Desenvolvimento Web. Começar Agora
Nossa metodologia de ensino tem eficiência comprovada
Curso da Awari em DevOps
120h de carga horária 8 semanas de duração Certificado de conclusão Mentorias individuais
docker vs kubernetes

Um pouco sobre a arquitetura do K8S

Podemos dividir a arquitetura do Kubernetes entre os Componentes Master (Control Plane) – que tomam decisões globais dentro do Cluster – Componentes de Nó e Objects Types. Abaixo explico um pouco melhor sobre cada um.

Control Plane

Pode ser executado em qualquer máquina do cluster e serve para tomar decisões globais (como scheduler) e também para detectar e reagir a eventos do cluster (como inicializar um novo pod), quando o número de réplicas não está de acordo com o esperado.

kubernetes control plane

    Arquitetura do Control Plane

  • API Server: O servidor de API é um componente responsável por expor a API do K8S. Podemos dizer que ele é o frontend do Control Plane. A principal implementação do servidor de API é o kube-apiserver que foi projetado para ser dimensionado de forma horizontal. Ele é dimensionado ao implantar mais instâncias.
  • etcd: O etcd é o armazenamento de apoio do Kubernetes que serve para todos os dados do cluster. O mesmo é baseado em chave-valor.
  • Scheduler: Responsável por observar os pods recém criados que ainda não foram atribuídos ao . A partir disso ele cria um agendamento do pod para um nó – de acordo com os recursos, disponibilidade e afinidade.
  • Controller Manager: Gerencia os controladores de processos do Kubernetes. Dentro dele existem controladores mais micros e específicos, como o controlador de nós, jobs, EndpointSlice – que é o link entre services e pods e contas de serviço.

Componentes de Nó

São executados em todos os nós e são responsáveis por manter todos os pods em execução, além de fornecer o ambiente em tempo de execução do K8S.

kubernetes componentes de nó

Arquitetura do Node

  • kubelet: O kubelet garante, através dos PodSpecs (especificação de Pods), que os containers estejam íntegros e em execução. Ele é executado em cada nó.
  • kube-proxy: O kube-proxy mantém regras de rede que possibilitam a comunicação entre pods e entre sessões dentro ou fora do cluster.
  • container runtime: Responsável pela execução dos contêineres. O Kubernetes suporta outras implementações além do Docker, através do CRI – Container Runtime Interface

Objects

  • Pods: Os nossos containers rodam nos pods, que são as menores unidades de implantação do K8S. Um pod pode conter N containers, porém os recursos são compartilhados entre os mesmos. Então, por via de regra, 1 pod executa 1 container, para que tenhamos uma melhor granularidade de controle dos recursos utilizados. Caso esteja trabalhando com ServiceMesh, no geral terá outro pod rodando ao lado – sidecar – porém isso é assunto para outro artigo.
  • Deployment: O deployment realiza o controle de quantas replicas (ou pods) a nossa aplicação terá. Com ele nós conseguimos mapear o estado desejado da nossa aplicação, além de facilitar um rollback da aplicação, visto que ele trabalha baseado em estado.
  • Service: Para que nossas aplicações sejam expostas, utilizamos o service. Caso o nosso deployment tenha pelo menos 2 pods rodando – que é o ideal para se ter uma mínima redundância – os 2 pods serão mapeados e terão um balanceamento de carga na frente para redirecionar o tráfego.
  • Ingress: O ingress expõe rotas HTTP e HTTPS para os services que estão dentro do cluster. O roteamento feito pelo ingress é controlado por regras declarativas. Eu consigo baratear o custo de infra com o ingress, visto que eu posso, necessariamente, utilizar apenas um endereço de IP exposto e mapear o mesmo em diversos services, através de subdomínios do meu domínio e request params na minha URI.

Vantagens ao usar o Kubernetes

Existem diversas vantagens ao adotar o uso do Kubernetes. Podemos trabalhar com o Kubernetes praticamente em qualquer tipo de infraestrutura, por isso ele é extremamente flexível. A sua adoção também aumenta a produtividade da pessoa desenvolvedora, visto que as implantações são mais facilitadas com o seu uso. Além disso, o Kubernetes proporciona um ambiente muito mais escalável e o fato de ser Open Source também é uma vantagem, uma vez que ele pode ser modificado por todos os interessados da comunidade.

vantagens ao usar kubernetes

Como executo a minha primeira aplicação no K8S?

Como citado, o Kubernetes é extremamente portátil, então é possível executá-lo em diversos ambientes, inclusive na sua própria máquina. Para tal, vamos trabalhar com o kind (Kubernentes in Docker) — https://kind.sigs.k8s.io. Isso mesmo: vamos executar o cluster K8S utilizando containers. Além dele, precisamos instalar também o kubectl https://kubernetes.io/docs/tasks/tools – que é interface via linha de comando padrão do Kubernetes. Após a instalação, para criar o primeiro cluster, basta executar o comando abaixo:

como executar kubernetes

Esse comando cria o cluster com apenas um nó, caso precise de mais, acesse: https://kind.sigs.k8s.io/docs/user/quick-start/#advanced

DevOps Em nosso programa intensivo de DevOps, você terá contato com conceitos e Frameworks de desenvolvimento Front-End, Back-End, Conteinerização, e Performance aplicados ao contexto de Desenvolvimento Web. Começar Agora
Nossa metodologia de ensino tem eficiência comprovada
Curso da Awari em DevOps
120h de carga horária 8 semanas de duração Certificado de conclusão Mentorias individuais

Depois do cluster ter sido criado, precisamos criar os nossos manifestos e referenciar a imagem que nosso deployment vai executar. Para isso, vamos criar uma pasta e colocar os manifestos abaixo:

Como executo a minha primeira aplicação no K8S

Reparem que estamos trabalhando com 5 réplicas para o container do nginx – referenciado em image dentro de containers em specs. Isso significa que, caso um container apresente problemas, a aplicação não ficará indisponível Claro que para garantir essa alta disponibilidade, precisaríamos rodar as nossas réplicas em diversos nós e ter diversos control plane no cluster – ambiente redundante. Além disso, estamos tratando a quantidade de recursos que a aplicação pode utilizar. Por fim, basta salvar o arquivo e aplicar o seguinte dentro da pasta via terminal:

kubectl apply -f <filename>.yaml

Após isso o deployment foi criado e a aplicação já tá rodando no cluster. Para acompanhar basta rodar o comando:

kubectle get pods

Eu falei no tutorial sobre o service e ingress, que servem para expor nossa aplicação pro mundo. Para não ficar muito longo, vamos utilizar um recurso em ambiente local para conseguir visualizar a nossa aplicação rodando, com esse comando: 

como executar kubernetes kubectl port forward

Basicamente, com esse comando o tráfego da sua porta 8080 será redirecionado para a porta 80 do container – que foi definido em ports no manifesto. Para ver o resultado basta acessar http://localhost:8080 no seu navegador.

welcome to nginx

Pontos importantes

Quando estamos trabalhando com containers em produção, é importante sempre lembrarmos sobre a efemeridade do disco. Sempre que houver um problema na aplicação, a primeira coisa que o Kubernetes vai fazer é tentar se auto recuperar (self healing) e com isso os pods serão reestardados. Portanto, caso os logs estejam salvos em disco, os mesmos serão perdidos (essa regra vale para assets também). Então é interessante manter sempre a aplicação desacoplada dessas regras e utilizar outros serviços para tal.

O Kubernetes abstrai toda a complexidade da infra em si, sendo assim uma interface única para que consigamos realizar as nossas implantações de forma mais simples.

DevOps Em nosso programa intensivo de DevOps, você terá contato com conceitos e Frameworks de desenvolvimento Front-End, Back-End, Conteinerização, e Performance aplicados ao contexto de Desenvolvimento Web. Começar Agora
Nossa metodologia de ensino tem eficiência comprovada
Curso da Awari em DevOps
120h de carga horária 8 semanas de duração Certificado de conclusão Mentorias individuais

Curso Completo de
DevOps

Em nosso programa intensivo de DevOps, você terá contato com conceitos e Frameworks de desenvolvimento Front-End, Back-End, Conteinerização, e Performance aplicados ao contexto de Desenvolvimento Web.

Ao clicar no botão ”Começar Agora”, você concorda com os nossos Termos de Uso e Política de Privacidade.

CONHEÇA A AWARI

Compartilhe seus objetivos de carreira com a Awari

Nós queremos construir uma comunidade onde membros tenham objetivos compartilhados, e levamos essas respostas em consideração na hora de avaliar sua candidatura.

Sobre o autor

Dê um salto em sua carreira com nosso curso de DevOps

Em nosso programa intensivo de DevOps, você terá contato com conceitos e Frameworks de desenvolvimento Front-End, Back-End, Conteinerização, e Performance aplicados ao contexto de Desenvolvimento Web.