10 Ferramentas mais utilizadas no Kubernetes

O Kubernetes é um orquestrador de containers que dá suporte a uma grande gama de funcionalidades interessantes. Imagine que seu sistema está no ar e, de repente, há um aumento absurdo no tráfego, por que muitos estão comprando ao mesmo tempo. Isso é ótimo, mas se sua infraestrutura não souber crescer você terá problemas. O Kubernetes consegue oferecer escalabilidade automática, se assim configurado.

Já o ArtfifactHub.io é o repositório de referência para os pacotes prontos para o Kubernetes baseados no Helm. Nele há uma grande quantidade de soluções relevantes e fáceis de serem utilizadas. Hoje a plataforma possui quase 11mil packages e 126mil releases. Esse artigo é uma seleção dos pacotes mais baixados e instalados no Kubernetes através do Helm.

1 – Kube-Prometheus-Stack

A stack de observabilidade prometheus-grafana é um dos itens mais baixados e instalados no Kubernetes. O mais legal é que ela possui uns 15 dashboards prontos que monitoram diversas características do Kubernetes, tais como o API-Server, os Pods, os workloads em geral, os volumes, e etc. Segue uma imagem de exemplo da minha instalação do kube-prometheus-stack

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install anselme-prometheus prometheus-community/kube-prometheus-stack

2 – Ingress-nginx

O nginx (Engine X) é um WebServer muito especial. Ele pode ser utilizado de muitas maneiras específicas: uma bastante comum é utilizar como load balance (veja também esse artigo: Como criar um load balance com Nginx). Outra aplicação interessante é utiliza-lo para separar a rede interna da empresa da internet, posicionando-se na DMZ como proxy reverso.

Quando estamos falando de ambientes Kubernetes a situação é semelhante. Utilizar muitos services expostos como LoadBalancer pode gerar custos desnecessários além de uma complexidade maior na manutenção de vários canais com o mundo externo. O Ingress é um pattern bastante utilizado para canalizar as demandas utilizando apenas um loadbalancer. Há vários Ingress no mercado como APIs gateways, Traefik, Envoy, e outros.

Essa é a implementação do pattern Ingress utilizando o nginx como base. Ela é bastante simples de se utilizar e é uma das mais baixadas do Helm.

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install anselme-ingress-nginx ingress-nginx/ingress-nginx

3 – Cert-Manager

Quando temos um site para expor na internet é fundamental ter configurado o certificado TLS (SSL) nele. Se isso não for feito, além do site ficar mais vulnerável caso alguém faça sniffing da rede, o site fica pior rankeado no google, gera mensagens de erro dos navegadores e outros incomodos ocorrem. Hoje ter certificado digital não é mais uma opção.

A Internet Security Research Group criou em 2016 um modelo de certificado que transformou toda a indústria: o Let’s Encrypt. Com essa ferramenta é possível gerar certificados de modo gratuito no modelo DV, de forma bastante simples. Quando estamos falando de Kubernetes é possível, por exemplo, atrelar a geração dos certificados diretamente ao seu ingress-host, associando-o a um cluster-issuer corretamente configurado.

Esse pacote chamado Cert-Manager facilita esse processo e ajuda a gerenciar a dezena de alterações que ele faz no seu kubernetes.

helm repo add jetstack https://charts.jetstack.io
helm repo update


helm install my-cert-manager --namespace cert-manager --version v1.9.1 jetstack/cert-manager

4 – Argo-CD

Já imaginou garantir que seu repositório do git na branch main/master seja um reflexo do que está em produção? Nós sabemos que essa é a expectativa mas não é necessariamente uma verdade, por vários motivos do dia-a-dia. Porém o Argo-cd pode estar atrelado ao seu pipeline de CI/CD obtendo sempre uma imagem de um container que represente a versão final de seu código. Quando ele nota diferenças ele atualiza (ou autoriza a atualização manual, dependendo de como está configurado). Essa solução é realmente muito interessante.

helm repo add argo https://argoproj.github.io/argo-helm
helm install anselme-cd argo/argo-cd --version 5.4.0

# para detalhes consulte https://argo-cd.readthedocs.io/en/stable/understand_the_basics/

5 – Kubernetes Dashboard

Trabalhar com o Kubernetes é algo desafiador: ao mesmo tempo que ele é simples e objetivo, ele é complexo e cheio de possibilidades. Saber bem a command-line do k8s não é opção. Entretanto pode ser interessante ter uma interface para gerenciamento dos seus clusters, seja através do Rancher, do próprio VS Code (através do plugin), do K8s lens ou através do Kubernetes Dashboard.

Essa interface é bem simples e objetiva, dando capacidade de observar visualmente o seu cluster, podendo criar estruturas e demais capacidades comuns. Veja a seguir meu cluster k8s que está no GKE:

helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm repo update

helm install anselme-dashboard kubernetes-dashboard/kubernetes-dashboard

6 – Postgresql

O postgre é, nesse exato momento, segundo o db-engines o 4º banco de dados mais utilizado do mundo. Ele é um banco relacional utilizado para todo tipo de aplicação, bem como sqlserver ou mysql. Utilizar banco de dado no Kubernetes é algo polêmico, mas entendo que pequenas aplicações que não demandem escala possam estar nele sem grandes debates.

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm install anselme-postgresql bitnami/postgresql

7 – Traefik

O Treafik é uma alternativa ao número 2 da lista, o Ingress-nginx. O Traefik funciona como Ingress Gateway e proxy reverso, útil para roteamento de microserviços. Como ele foi construído em go (ou golang) ele traz vantagens com o seu grande desempenho. Eu, particularmente, utilizo mais o nginx, mas o Treafik é, sem dúvidas, uma boa opção.

helm repo add traefik https://helm.traefik.io/traefik
helm repo update

helm install anselme-traefik traefik/traefik

8 – Gitlab

O Gitlab é um famoso repositório de código fonte baseado em git, bem como git hub, bit bucket, e vários outros. Ele é bastante completo e tem muitas funcionalidades interessantes. Mas, tentei fazer um laboratório instalando em minha maquina com o Helm e não consegui. Na verdade tive sucesso na instalação mas meu computador (i7 9ª geração com 16GB RAM DDR4) ele não conseguiu abrir. É verdade que também tenho muias outras coisas na máquina, mas não consegui subir. Ele instala uns 15 pods, instala certificado, grafana, redis, banco de dados, e mais outras coisas. Ele também configura do HPA (horizontal pod autoscaller). Em resumo, fui obrigado a não instalar esse no meu PC. Mas estude bem seu cenário por que o git lab pode ser o ideal para você ou sua empresa.

helm repo add gitlab https://charts.gitlab.io/
helm repo update

helm install anselme-gitlab gitlab/gitlab --version 6.3.2 --set [email protected]

9 – Jenkins

O Jenkins é o famoso automatizador de tarefas, normalmente utilizado para fazer pipelines de CI/CD. Ele teve o seu primeiro release em 2005 sob o nome Hudson. Ele era da antiga Sun, empresa criadora da linguagem Java. Tempos depois a Sun foi comprada pela Oracle e após disputas o Hudson sofreu um fork criando o Jenkins, mandido pela comunidade. O projeto Hudson seguiu de maneira proprietária mas em 2017 o projeto foi considerado obsoleto.

Mesmo o Jenkins não é mais tão badalado quanto no passado, mas ainda tem um grande número de usuários ativos que utilizam sua estrutura para implantação dos sistemas e, também, outros que produzem plugins valiosos para ele.

helm repo add jenkinsci https://charts.jenkins.io/
helm repo update

helm install anselme-jenkins jenkinsci/jenkins --version 4.1.17

10 – MySQL

Bom, o mysql é o mysql. Mas vale esclarecer que esse helm package instala um statefulset do mysql pronto para que possa ser escalado caso seja necessário. Após instalar o helm dará orientações claras sobre como pegar o password (mas é possível indicar por parâmetro password específico na criação do helm release), como criar um pod cliente e como utilizar.

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm upgrade mysql-release bitnami/mysql --set auth.rootPassword=a123456

Bonus: ElasticSearch

O ElasticSearch é uma das ferramentas mais fantásticas que tive oportunidade de trabalhar. Ele é baseado no Apache Lucene, um banco de dados que usa um contexto de índice invetido. Vamos comparar com o banco tradicional para entender melhor: imagine um banco com dezenas de tabelas. O nome João pode aparecer na tabela Usuario e na tabela Cliente. Nesse caso as duas tabelas terão o mesmo dado, duplicado. No Lucene não é assim, basicamente ele tem João -> tabela usuario, tabela cliente.

Esse modelo é drasticamente diferente do que estamos acostumados no banco de dados relacional. Entretanto esse modelo consegue oferecer uma qualidade muito grande no resultado das buscas. Por isso ele é excelente para busca de dados. Note que o Elastic é uma estrutura que transforma o Lucene num cluster com vário nós dele, expondo APIs rest para acesso e facilitando o controle. Para conhecimento, o Solr é um concorrente que tem a mesma estratégia mas, de modo geral, o Elastic é o mais utilizado.

helm repo add elastic https://helm.elastic.co
helm repo update

helm install my-elasticsearch elastic/elasticsearch --version 7.17.3

Thiago Anselme
Thiago Anselme - Gerente de TI - Arquiteto de Soluções

Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.

Deixe um comentário