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 12 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

DevOps

Domine as principais ferramentas de DevOps e otimize seu fluxo de trabalho

Gitlab: um dos sistemas de controle de versão mais usados e baseado no GIT. Permite criar e gerenciar múltiplas versões de código, fazer comparações e aditar alterações. Puppet: normalmente usado

Infraestrutura TI

Criando imagens personalizadas com Packer para Google Cloud Platform

Olá pessoal, hoje no blog da 4Linux, vamos falar dessa ferramenta sensacional que é o Packer da HashiCorp. Bora lá. O que é o Packer O Packer é uma ferramenta

Banco de Dados

Entenda as diferenças entre MySQL Community, MySQL Enterprise, Percona e MariaDB

Nesta publicação quero explicar algumas diferenças interessantes entre o MySQL Community, MySQL Enterprise, Percona e MariaDB. Normalmente sempre abordamos algumas coisas em nosso curso de MySQL, mas o tempo sempre