Se tem uma área em tecnologia que ainda consegue se destacar das demais em relação a necessidade para as empresas e boas remunerações, é a que envolve trabalho em containers. Dentro desse contexto, conhecer bem o que faz e como se destacar no domínio da ferramenta kubernetes é essencial.
Acompanhe neste artigo o que é Kubernetes, como é sua arquitetura, vantagens e desafios dessa ferramenta e muito mais!
Escrito por: Leonardo Romão e Rodrigo Melgar Rodrigues.
Tá, mas o que é Kubernetes?
Segundo a documentação oficial:
“O Kubernetes é uma plataforma portátil, extensível e de código aberto para o gerenciamento de cargas de trabalho e serviços em contêineres, que facilita a configuração declarativa e a automação. Tem um grande ecossistema de crescimento rápido. Os serviços, suporte e ferramentas do Kubernetes estão amplamente disponíveis.”
Em outras palavras, o Kubernetes é uma ferramenta que orquestra cargas de trabalho, aplicações e serviços através de containers, facilitando a declaração e a expansão dos recursos possíveis nos objetos.
O Kubernetes também é conhecido como K8s (um trocadilho com o nome Kubernetes: k + 8 caracteres + s) ou somente Kube, para alguns.
Atualmente mantido pela Cloud Native Computing Foundation, o Kubernetes gerencia os clusters que contêm os hosts que executam as aplicações.
Pense você fazendo a implantação de uma nova versão de uma aplicação ou sistema, é sempre um processo arriscado, certo?
Agora pense isso com uma aplicação composta por dezenas de microsserviços, cada um com um ciclo de vida, datas de lançamentos e estruturas diferentes (tecnologia, linguagens etc.).
O Kubernetes elimina muitos processos manuais que uma aplicação em containers exige, facilitando o trabalho e dando agilidade.
Principal diferença entre Kubernetes e Docker
Docker é uma plataforma de conteinerização, capaz de construir, distribuir e executar containers.
Já Kubernetes é uma plataforma de orquestração de containers para plataformas como Docker (pode-se utilizar outros containers runtimes como podman, cri-o etc).
Em resumo, o Kubernetes expande os recursos a serem utilizados nos containers que são executados no Docker.
A arquitetura do Kubernetes
Seguindo com a documentação oficial, o Kubernetes possui vários componentes, cada um com seu propósito, garantindo que exista uma separação na responsabilidade e que o sistema seja resiliente:
Os componentes acima correspondem a estrutura necessária para a gerência de um ambiente Kubernetes, no caso, são executados em um NODE, que pode ser físico ou virtual, dependendo da estrutura do cluster.
O NODE Master é responsável por gerenciar o cluster Kubernetes e suas cargas de trabalho e/ou aplicações que é possível através destes componentes:
PODs
Antes, vamos falar sobre como o Kubernetes gerencia os containers.
POD é a menor unidade que pode ser trabalhada no Kubernetes. É possível inserir 1 ou mais containers dentro de uma POD e ambos irão compartilhar os mesmos recursos disponíveis.
Em outras palavras, quando uma POD é criada, ela possui 1 IP para identificação. Dessa forma, se ela possuir mais de um container, ambos irão utilizar/compartilhar o mesmo IP.
Não se preocupe que ainda vamos falar mais sobre o conceito de POD neste artigo. ?
Agora sim, vamos conhecer melhor os componentes do Kubernetes:
Componentes Master (Control Plane)
API Server
É um componente do NODE Master que expõe a API do Kubernetes, sendo o API Server front-end.
É o “cérebro” do cluster, as solicitações passam pela API, bem como a gravação no banco de dados interno do Kubernetes também é feita pela API.
ETCD
É a solução que o Kubernetes utiliza como banco de dados para armazenar as informações pertinentes ao cluster.
O ETCD não é uma solução que foi desenvolvida para o K8s, ele somente utiliza a solução já existente. Todas as informações sobre banco de dados ETCD podem ser encontradas na sua documentação oficial.
Scheduler
Componente que observa os PODs recém-criados sem nenhum nó atribuído e seleciona um nó para executá-los.
Quando você solicita a API para criar um container, ela irá conversar com o Scheduler para saber qual nó está disponível para alocar o container, bem como verificar se não há nenhum requisito de hardware (como memória RAM ou CPU) ou qualquer política.
Controller Manager
Componente que executa os processos do controlador.
Logicamente, cada controlador é um processo separado, mas para reduzir a complexidade, todos são compilados em um único binário e executados em um único processo. Por exemplo: Replicaset Controller.
O controller Replicaset é responsável por garantir que as quantidades de PODs definidas estejam de acordo. Então quando você define que o Replicaset precisará ter 5 Pods, caso algum container caia ou seja destruído, o Replicaset irá forçar a criação de uma nova POD. Quem gerencia esse controlador, no caso, é o Controller Manager que observa os estados dos controladores sendo que alguns deles: Job controller, Deployment, Endpoints etc.
Componentes Node
Os componentes a seguir são executados em todos os NODES.
Kubelet
O Kubelet é um agente que é executado em cada NODE. Ele garante que os containers estão sendo executados através das PODs. Também fornece uma comunicação entre todos os NODEs que compõem o seu cluster, tendo o estado e saúde de cada NODE.
Kube-proxy
kube-proxy é um proxy de rede executado em cada nó do cluster, implementando parte do conceito de serviço Kubernetes.
O kube-proxy mantém regras de rede em nós. Essas regras de rede permitem a comunicação de rede com seus PODs a partir de sessões de rede dentro ou fora do cluster.
Container Runtime
No caso se trata da aplicação que irá executar os containers para nós. Pode ser o Docker, containerd, cri-o, podman etc.
Addons
Funcionam como um plugin, utilizando recursos do Kubernetes para implementar soluções adicionais ao cluster.
DNS
Enquanto outros ADDONs não são obrigatórios, todo cluster Kubernetes requer uma solução de DNS, dessa forma facilita o alcance e registros dos serviços.
Estado da aplicação atual X Estado desejado
É importante entendermos um conceito central do K8s: o estado da aplicação.
O estado da aplicação atual descreve a realidade. Por exemplo, quantas réplicas de um determinado serviço estão em execução, qual a versão em produção de cada serviço e por aí vai.
Já o estado desejado descreve como o time ou a pessoa responsável pela aplicação deseja que ela esteja naquele momento.
O K8s implementa uma série de verificações que ficam constantemente observando se o estado atual é igual ao estado desejado. Esse papel é desempenhado pelos chamados “Controllers”.
Quando um “Controller” identifica que o estado atual é diferente do estado desejado, ele aciona outros componentes do sistema para fazer com que o estado atual se iguale ao estado desejado.
Tipos de Objects no Kubernetes
Existem diversos tipos de Objects em um ambiente Kubernetes, mas alguns deles são essenciais para entendermos como a ferramenta funciona:
Pod
Segundo a documentação: “Pods são as menores unidades de implantação que iremos trabalhar dentro do Kubernetes”.
São com as PODs que iremos executar os nossos containers. Uma Pod pode conter um ou mais containers, sendo que seus recursos são compartilhados. Dessa forma, vamos pensar em um exemplo:
1 Pod tendo 100 containers, possui somente 1 único IP e esse IP é compartilhado entre todos os containers. Isso vale para volumes, política de rede e qualquer outro recurso necessário para os containers na Pod.
Deployment
Utilizando Deployments, nós podemos descrever qual o estado desejado da nossa aplicação e um Deployment controller vai se encarregar de transformar o estado atual no estado desejado, caso eles sejam diferentes.
Através dos deployments, e a quantidade de réplicas que nossa aplicação terá, conseguiremos obter escalabilidade e redundância no nosso cluster. Como o deployment mantém o estado desejado, através dele nós podemos trabalhar com rollback de aplicações, pois a cada atualização do deployment a informação do que foi alterado é mantida.
Services
Por meio dos Services nós podemos expor as nossas aplicações para o cluster tornando acessível através da rede.
É interessante mencionar que caso haja um “deployment” com 3 Pods (exemplo) e expormos esse “deployment”, as 3 replicas serão mapeadas pelo Service, tendo um balanceamento de carga nas aplicações.
Como criar aplicações no Kubernetes?
Para nos comunicarmos com o Kubernetes, precisamos de uma biblioteca de comandos que converse com o cluster: o “kubectl”.
O “kubectl” é uma ferramenta de linha de comando que permite controlar o nosso cluster, criar objetos, gerenciar configurações etc.
Você pode criar objetos através da própria linha de comando (Configuração Imperativa) com o comando:
“kubectl --help”
No entanto, também pode ser através de objetos com linguagem YAML (Configuração Declarativa):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Para a criação desses objetos basta executar o “kubectl” passando o nome do arquivo:
“kubectl apply -f nome_arquivo.yml”
Observação: qualquer objeto poderá ser criado ou atualizado através de declaração com YAML.
Vantagens em adotar o Kubernetes
- O K8s oferece uma plataforma completa para aplicações conhecidas como cloud-native, dessa forma poderá ser executado em qualquer ambiente cloud ou local (on-premisses), tornando a aplicação agnóstica ao ambiente.
- Ele utiliza abstrações, como Pods e Deployments, chamadas de Objects para representar diferentes aspectos do estado de uma aplicação.
- É uma ferramenta extremamente flexível, podendo instalar diversos add-ons que podem ampliar a possibilidade do K8s, por exemplo, service mesh, serveless, ci/cd, proxy etc.
- Possui amplo apoio da comunidade, sendo a principal ferramenta de muitos profissionais para orquestrar containers para pequenas, médias e grandes empresas.
Quais são as partes mais difíceis de aprender do Kubernetes?
Muitas empresas já adotaram o Kubernetes ou têm um plano de migração do Kubernetes em vigor, deixando claro que a plataforma veio para ficar. No entanto, embora ofereça muitos benefícios aos usuários, para aproveitá-los, você precisa aprender completamente o K8s e como ele funciona na produção.
Normalmente, os aspectos mais difíceis do K8s são aprendidos por meio da experiência na solução de problemas do mundo real. Mas segue uma lista de conteúdos que considero críticos para a aprendizagem do Kubernetes.
Administração de Cluster
Se você precisa começar de algum lugar, aprenda os conceitos de cluster do Kubernetes. Todos os principais provedores de nuvem (Google, AWS, Azure etc.) fornecem clusters Kubernetes como um serviço. Este é um ótimo lugar para começar. Dessa forma, com apenas alguns cliques em seus consoles de nuvem, você pode criar um cluster.
Além disso, os provedores de nuvem gerenciam o cluster, realizando tarefas de rotina como rotação de certificados e correção de versões. Se, no entanto, você tiver que configurar seus próprios clusters do Kubernetes, precisará gerenciar tudo sozinho, tornando a situação um pouco mais complexa.
Networking
Problemas relacionados à rede do Kubernetes são comuns em sistemas Kubernetes configurados incorretamente. A rede é uma camada central no K8s e, no início do processo de inicialização de um cluster, você precisa tomar uma decisão sobre qual interface de rede de contêiner (CNI) deseja usar em seu cluster.
Dependendo do CNI escolhido, você pode obter acesso a recursos adicionais, como suporte a políticas de rede e criptografia na rede. O suporte à política de rede pode ser um requisito crítico para você se quiser controlar o tráfego de entrada e saída por meio de namespaces ou pods dentro do cluster do Kubernetes.
Armazenamento Kubernetes
Kubernetes é um PaaS (Platform as a Service, ou Plataforma como serviço, em português.) que permite executar workloads como contêineres. Na maioria das vezes, por exemplo, esses workloads precisarão persistir em seu estado.
O K8s suporta uma ampla gama de drivers de armazenamento nativamente, e a opção de usar drivers externos também existe. Ao escolher um driver de armazenamento, você precisa considerar o desempenho, os modos de acesso ao volume, a disponibilidade e a escalabilidade.
Segurança do Kubernetes
Esteja seu cluster Kubernetes em execução local ou na nuvem, sua segurança é de extrema importância. Um cluster Kubernetes mal configurado ficará vulnerável a ataques.
Como regra geral, é melhor evitar expor a API Kubernetes ao público para reduzir a área de superfície de ataques em potencial.
Claro, existem outras maneiras de atacar um cluster e, consequentemente, de prevenir esses ataques, por exemplo:
- Service Accounts
- Avoiding Root Containers
- User Federation
- Ingress Traffic
- Secure Secrets
- Kubernetes Security Best Practices
Sempre antes de colocar um cluster em produção faça um checklist de todos os itens acima para verificar se está cobrindo os requisitos básicos de segurança.
Observabilidade do Kubernetes
A geração de registros e o monitoramento (métricas) concluem a configuração do cluster Kubernetes de nível de produção.
As métricas, também conhecidas como monitoramento (embora o termo às vezes possa ser encontrado estendendo-se a outros aspectos da observabilidade) permitem que você observe e atue no comportamento do cluster ao longo do tempo. Ao mesmo tempo, o registro permite depurar cargas de trabalho em execução e observar seu status.
Serviços gerenciados na nuvem
Os principais provedores de nuvem (AWS, Azure, GCP), já possuem serviços gerenciados que provêm um ambiente Kubernetes para orquestrar seus containers.
Dessa forma, o foco aqui é na carga de trabalho, você não precisará se preocupar com backup, restore de dados ou até mesmo com a saúde dos hosts que compõem o cluster, essa responsabilidade é da nuvem.
Seu papel é entender como o Kubernetes se integra na nuvem: redes, volumes, segurança etc.
Onde começar os estudos?
Em primeiro lugar, para quem está começando, a documentação do Kubernetes é extremamente rica e detalhada possuindo diversos cenário interativos para você praticar:
- Interactive Tutorial – Creating a Cluster – Documentação oficial do Kubernetes
- Documentação oficial do Kubernetes
Além disso, o melhor é que a documentação oficial do Kubernetes possui tradução em português.
Para ambiente de testes e estudos, pode ser interessante trabalhar com soluções que simulam um cluster kubernetes como: minikube, kind etc.
Para quem se interessar em tirar certificações, saiba que é permitido consultar a documentação durante a prova.
E falando em certificação…
A entidade que certifica profissionais em Kubernetes é a Linux Foundation. Atualmente há 3 tipos de certificação em kubernetes:
- CKA – Certified Kubernetes Administrator: voltada para administração de um ambiente Kubernetes. Saiba mais sobre essa certificação aqui.
- CKAD – Certified Kubernetes Application Developer: voltada para cargas de trabalho (workload) em um ambiente Kubernetes. Saiba mais sobre essa certificação aqui.
- CKS – Certified Kubernetes Security Specialist – voltada para segurança em um ambiente Kubernetes. Saiba mais sobre essa certificação aqui.
Atualmente existem vários cursos na comunidade que auxiliam no aprendizado e preparação para a prova. Inclusive, há uma plataforma oficial da certificação que gera um simulador do exame que recomendo fortemente para quem for realizar a certificação.
Dicas para a prova de Certificações Kubernetes:
- Faça os exemplos estudados mais de uma vez. Inclusive, com valores diferentes. Assim, você pode abordar todos os tópicos com relação a prova.
- Na prova, foque nas perguntas que tiver maior facilidade.
- Não ceda ao nervosismo, isso pode atrapalhar sua concentração.
Está gostando do conteúdo até aqui? Então, antes de concluirmos que tal assinar a nossa newsletter para receber artigos da Zup no seu e-mail?
Conclusão
Por fim, começar a usar o Kubernetes é fácil e fazer as coisas da maneira certa requer prática. Para dominá-lo totalmente, você precisa ter experiência prática em usá-lo para resolver problemas do mundo real. Recomendo esse assistir esse vídeo abaixo, além de te explicar sobre o que é e como funciona, também teremos uma demonstração ao vivo de codificação de Kubernetes.
Às vezes, você precisa de uma pequena orientação de um especialista sobre por onde começar a procurar e como começar. Existem muitas opiniões diferentes sobre a melhor forma de alcançar os resultados que discutimos acima. Os recursos neste post foram compilados na esperança de fornecer a você essa direção inicial.
Pessoal, aqui na Zup usamos o Kubernetes pra valer! Conta pra gente nos comentários quais os maiores apuros que já passaram com k8’s, já atualizaram cluster role com admin que não existe e perderam acesso ao cluster?
Referências
- Orquestração de contêineres prontos para produção – Documentação Kubernetes.
- Kubernetes cluster: O que é e para que serve – RedHat.