Exemplos de Yaml para Kubernetes com Awesome-Kubernetes

Crie arquivos yaml para o Kubernetes (K8S) com exemplos para facilitar sua vida através do awesome-kubernetes. Criar arquivos yaml para utilização no Kubernetes nem sempre é uma tarefa fácil. O projeto Awesome-Kubernetes (https://github.com/Anselming/awesome-kubernetes) é um repositório do github com um conjunto de exemplos que facilitam o consumo rápido desses arquivos. Atualmente o repositório está dividido em quase 20 diferentes categorias. Vamos falar um pouco sobre elas.

Autoscaler

Em primeiro lugar o principal objetivo de se utilizar o Kubernetes é estruturar aplicações para poderem escalar. Essa pasta lida com esse cenário, com yamls de instalação do metrics-server (note que a linha kubelet-insecure-tls é opcional, mas muito útil para ambientes de testes com Kind, k3d, etc.). Ele também tem arquivos que ajudam a criar um HPA (Horizontal pod autoscaler) e um deployment que esteja relacionado a essas estruturas.

Cert-manager

Dando prosseguimento, a pasta cert-manager no momento possui apenas um arquivo yaml. Ela explica como é configurar sua aplicação para gerar certificados e ter HTTPS nela. O exemplo citado utiliza o Let’s Encrypt, projeto que oferece certificados gratuitamente. É possível encontrar mais detalhes sobre esse tema no artigo 10 Ferramentas mais utilizadas no Kubernetes.

ConfigMap

Já a pasta configmap se relacionada a estratégia nativa do kubernetes para lidar com o gerenciamento de configurações de dados não sensíveis. Essa pasta possui exemplos yaml para kubernetes: de workload, de configmap separado referenciado (com referência para todo o arquivo), configmap separado com referência aos itens (nem todo o arquivo do configmap está referenciado). É interessante que todos as diferentes formas estão disponíveis para uso fácil.

Daemonset

Além disso a versão atual do repositório possui apenas um deamonset de exemplo, onde ele instala o Prometheus, nessa pasta. Esse workload é menos utilizado no dia-a-dia do que o deployment, mas é igualmente importante por subir aplicações em todos os nodes ao mesmo tempo e garantindo que ele suba ao mesmo tempo que o node sobe.

Deployment

Continuando com pasta deployment, esse é o workload mais utilizado no dia-a-dia. Vários outros objetos do k8s são criados para que, de alguma maneira, o deployment funcione. A versão atual possui apenas um deployment simples com algumas réplicas.

Ingress

Já a pasta ingress carrega 2 itens: um com TLS e outro sem TLS. Note que o repositório tem uma pasta Cert-Manager. Ela é muito útil para esse cenário. No exemplo em questão se aplica-se o pattern ingress através do Ingress-Nginx.

Job

Contextualizando, os pods de deployments são feitos para ficarem sempre no ar: se morrerem por qualquer motivo eles são recriados. Isso significa que são pensados para a continuidade. Já os jobs são o contrário, são objetos pensados para que se finalizem. Um exemplo disso é um job de geração de relatórios, ou outro de geração de ETLs. Essa pasta carrega alguns exemplos de Jobs e CronJobs.

Namespace

A versão atual trás essa pasta de maneira extremamente simples: um yaml gerando um namespace. Apenas isso, por enquanto.

Network Policy

Por vezes é comum pegar ambiente Kubernetes com uma estrutura frágil, seja por que não possui afinidade/anti-afinidade configurada, seja por que tudo está no namespace default, seja por que não há configuração adequada de segurança, de limites de recursos, de escala, e seja por que não há configuração de rede. Essa pasta possui um exemplo de política de rede que garante que apenas pods vindos no namespace ‘production’ possam acessar ao banco de dados.

Pod

Essa pasta possui vários exemplos de criação de naked pods (pod que são instanciados diretamente, sem um statefulset, daemonset, deployment, replicaset , cron ou cronJob). De maneira geral isso não é recomendado, mas cada cenário é único e cabe um estudo.

Probes

Seguindo, os probes são as estruturas de verificação da saúde de um pod. Há três diferentes tipos de probes e essa pasta possui exemplos de cada um deles: Startup Probe, Readiness Probe e Liveness Probe.

Replicaset

Já a pasta replicaset trata de um workload que dificilmente é criado diretamente. Normalmente ele faz parte de um deployment, mas nada impede o seu uso direto: mas sinceramente nunca vi. Portanto o exemplo a ser visto nessa pasta tem cunho meramente didático.

Secret

Bem como o configmap o secret é outra estrutura de gestão de configuração, mas com a diferença de ser utilizado para dados sigilosos, como senhas. O seu uso padrão exige que o dado seja cifrado em base64. Isso não é exatamente seguro, mas é o padrão. Se o Kubernetes estiver devidamente configurado é possível garantir que esse dado esteja cifrado com algoritmos mais robustos e não simétricos.

Security

Para melhor entendimento, o tratamento de credenciais do kubernetes utiliza o padrão RBAC (Role based access control). Alguns até acham que esse padrão só existe no Kubernetes: mas não! Esse é um padrão da indústria amplamente utilizado. No Kubernetes temos alguns objetos para suportar esse cenário: ClusterRole, ClusterRoleBinding, Role, RoleBinding e ServiceAccount. Há exemplos do uso de cada um deles na pasta.

Service

Esse é um dos objetos mais importantes do Kubernetes. Ele é quem transforma um workload em uma entrada (CNAME) DNS válida, podendo ou não ser exposta externamente. Há diferentes tipos de service que dão mais ou menos exposição: LoadBalancer, NodePode, ClusterIP e headless service (que não é exatamente um tipo, mas tem sua relevância).

Statefulset

O Awesome-Kubernetes possui apenas um exemplo nessa versão. Trata-se de um workload que é criado em LIFO, ou seja, o primeiro a ser criado pod é o último a ser excluído. Isso é útil para cluster de bancos de dados no modelo master-slave, por exemplo. Os slaves precisam saber exatamente quem é o master e ele não pode ser apagado antes dos demais. Mas também é verdade que colocar banco de dados no Kubernetes é algo que merece um bom debate.

Volumes

Essa é a última pasta criada para versão atual. Essa pasta possui muitos exemplos de yaml para kubernetes. Note que ele possui exemplos de PersistentVolumeClaim, Secrets (como volume), Local, hostPath, EmptyDir, StorageClass e outros. Há vários exemplos interessantes para lidar com essa questão.


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