Como usar o Kustomize no Kubernetes

Como usar o Kustomize no Kubernetes

Olá pessoal, hoje no blog da 4Linux, vamos falar de uma sensacional para Kubernetes chamada Kustomize. Bora lá!!

O que é o Kustomize?

O Kustomize é uma ferramenta nativa do Kubernetes que facilita o gerenciamento e a customização de arquivos de configuração YAML. Ele permite criar configurações reutilizáveis e flexíveis, eliminando a necessidade de duplicar arquivos YAML para diferentes ambientes, como desenvolvimento, staging ou produção.

Desde a versão 1.14 do Kubernetes, o Kustomize está integrado diretamente ao comando kubectl, tornando-o uma solução eficiente e acessível para gerenciar configurações.

Para que serve o Kustomize?

  • Gerenciar diferentes ambientes: Configurar ambientes como desenvolvimento, staging e produção de forma centralizada.
  • Customizar recursos: Permite modificar arquivos YAML sem editar os originais, mantendo um único conjunto de configurações base.
  • Simplificar alterações: Adicionar rótulos, anotações, substituir imagens ou ajustar parâmetros de recursos de forma declarativa.

Vantagens do Kustomize

O nosso querido Kustomize, possui algumas vantagens que ajuda na administração da criação de objetos no K8s. Abaixo eu separei algumas que a tornam tão atrativa:

Reutilização: arquivos base podem ser aplicados a múltiplos ambientes com personalizações específicas.

Simplicidade: Evita a complexidade de templating (como no Helm), utilizando apenas YAML puro e modificável.

Sem dependências: Integrado ao Kubernetes, sem necessidade de instalar ferramentas adicionais.

Flexibilidade: Suporte a patching, geração de ConfigMaps, Secrets e substituição de imagens.

Integração com “kubectl”: Use diretamente com comandos como kubectl apply -k.

Como é a estrutura do Kustomize

O Kustomize utiliza um arquivo chamado kustomization.yaml para definir as bases e as customizações de um conjunto de recursos. Aqui estão os principais elementos que você pode usar:

resources: Lista de arquivos YAML que contêm os recursos base.

patches: Modificações aplicadas aos recursos.

images: Substituição de imagens de contêiner.

configMapGenerator: Gera ConfigMaps dinamicamente.

secretGenerator: Gera Secrets dinamicamente.

Kustomize na prática

Agora que já vimos a parte teórica do Kustomize, vamos colocar a mão na massa e ver na prática como ele se fuciona.

Vamos criar um exemplo para gerenciar diferentes ambientes (desenvolvimento e produção) para uma aplicação Nginx.

Vem comigo!!

Estrutura de Diretórios

app/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── kustomization.yaml
├── overlays/
│   ├── development/
│   │   ├── kustomization.yaml
│   │   └── patch-deployment.yaml
│   └── production/
│       ├── kustomization.yaml
│       └── patch-deployment.yaml

O diretório base/ contém os arquivos YAML padrão da aplicação.

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19
        ports:
        - containerPort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

kustomization.yaml

resources:
  - deployment.yaml
  - service.yaml

Diretório Overlays (Ambientes)

Cada subdiretório em overlays/ representa um ambiente (por exemplo, development e production). Eles contêm customizações aplicadas sobre os recursos do diretório base.

development/kustomization.yaml

resources:
  - ../../base

patches:
  - patch-deployment.yaml

images:
  - name: nginx:1.21

development/patch-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2

production/kustomization.yaml


resources:
  - ../../base

patches:
  - patch-deployment.yaml

images:
  - name: nginx:1.21

production/patch-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 5

Aplicando Configurações

Para aplicar as configurações para o ambiente desejado, use o comando kubectl com a opção -k e o diretório do overlay correspondente.

Para segregar, crie dois namespaces. um chamado development e outro chamado production:

kubectl create ns development

kubectl create ns production

Development

kubectl -n development apply -k overlays/development/

output


kubectl -n development get pods,svc    
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-5bd9d7bb49-b9htz   1/1     Running   0          50s
pod/nginx-5bd9d7bb49-kmzcn   1/1     Running   0          50s

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/nginx   ClusterIP   10.96.138.174   <none>        80/TCP    51s

Production

kubectl -n production apply -k overlays/production/

output

kubectl -n production get pods,svc     
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-5bd9d7bb49-5fq8f   1/1     Running   0          7s
pod/nginx-5bd9d7bb49-f9cmj   1/1     Running   0          7s
pod/nginx-5bd9d7bb49-gh448   1/1     Running   0          7s
pod/nginx-5bd9d7bb49-k59zx   1/1     Running   0          7s
pod/nginx-5bd9d7bb49-kj7bh   1/1     Running   0          7s

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/nginx   ClusterIP   10.96.79.136   <none>        80/TCP    7s

Conclusão

O Kustomize é uma ferramenta poderosa para gerenciar configurações do Kubernetes de forma eficiente e organizada. Ele ajuda a evitar duplicidade de arquivos, facilita a customização para diferentes ambientes e é extremamente simples de usar. Com ele, você pode centralizar a gestão de seus manifestos YAML e garantir maior consistência e facilidade de manutenção no seu cluster Kubernetes.

Por hoje é só pessoal, nos vemos no próximo post no blog.

Abraços

Referências

https://github.com/kubernetes-sigs/kustomize

 

Anterior GitHub Actions - Self-Hosted Runner no Kubernetes
Próxima Monitoramento de TI: Zabbix, Grafana e Prometheus

About author

Emerson Silva
Emerson Silva 14 posts

Desenvolvedor de Infraestrutura e Monitoramento, atua como Engenheiro DevOps na 4Linux, entusiasta DevOps e apaixonado por software livre

View all posts by this author →

Você pode gostar também

Infraestrutura TI

A lenda do arquivo perdido. Domine a busca de arquivos no Linux com o comando find!

Você já se perguntou como os especialistas em Linux conseguem encontrar arquivos em um emaranhado de diretórios? Saiba que há um comando mágico chamado find que lhes concede esse poder.

Segurança

Descubra o DevSecOps: Segurança e eficiência no desenvolvimento de software

Saudações pessoal! Hoje vamos explorar o fascinante mundo do “DevSecOps”. Talvez você já tenha ouvido falar desse termo, mas não tenha ideia do que ele realmente significa. Neste artigo, vamos

Desenvolvimento

Moodle – Descomplicando a instalação

Caro leitor, nesse artigo vamos tentar descomplicar a instalação do ambiente virtual de aprendizado Moodle para quem está iniciando o uso desta plataforma. Para isso, utilizaremos o Vagrant para provisionar