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
About author
Você pode gostar também
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
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
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