'

Tudo sobre PaaS

Implantando com Kustomize no Kubernetes

kustomize

Introdução ao Kustomize

O Kustomize é uma ferramenta nativa do Kubernetes projetada para facilitar a customização de objetos declarativos YAML sem modificar diretamente os arquivos originais. Essa abordagem torna as implantações mais flexíveis e reutilizáveis, permitindo a aplicação de configurações específicas para diferentes ambientes como desenvolvimento, homologação e produção.

O Kustomize foi incorporado ao cliente kubectl, o que significa que você pode usá-lo sem a necessidade de instalar ferramentas adicionais.


Principais Benefícios do Kustomize

  • Sem alterações diretas: Mantém os manifestos base intactos.
  • Customização para ambientes: Permite sobreposição de configurações para atender às necessidades de diferentes ambientes.
  • Reutilização de recursos: Facilita a reutilização de configurações comuns entre projetos.
  • Organização estruturada: Permite que os manifestos sejam organizados de maneira modular.

Componentes Principais

Bases

Os arquivos YAML originais, mencionados como bases no contexto do Kustomize, são fundamentais em um ambiente Kubernetes, pois contêm as definições de recursos básicos que descrevem como os objetos no cluster devem ser criados e configurados. Esses arquivos funcionam como ponto de partida para customizações e geralmente incluem elementos como:

  1. Pods:
    • Descrevem uma ou mais aplicações que compartilham o mesmo ambiente de execução (containers).
    • São o menor e mais básico recurso do Kubernetes.

    Exemplo:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: nginx
        image: nginx:latest
    
  2. Services:
    • Proporcionam um ponto de acesso estável para os Pods.
    • São usados para expor aplicações para comunicação interna ou externa.

    Exemplo:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app
      ports:
      - protocol: TCP
        port: 80
        targetPort: 8080
    
  3. Deployments:
    • Gerenciam a criação e a atualização de Pods de maneira declarativa.
    • Permitem especificar o número de réplicas, atualização contínua (rolling updates), entre outras configurações.

    Exemplo:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-app
            image: my-app:1.0.0
    

Esses arquivos são imutáveis por princípio no Kustomize. Isso significa que, ao usar essa ferramenta, você nunca altera diretamente os arquivos base, garantindo que eles permaneçam reutilizáveis e consistentes. Qualquer alteração ou ajuste necessário é feito por meio de patches ou sobreposições (overlays), permitindo uma abordagem modular e organizada na gestão de configurações.

Essa separação entre bases e overlays facilita a manutenção de múltiplos ambientes, como desenvolvimento e produção, sem o risco de sobrescrever configurações críticas.

Overlays

As customizações aplicadas sobre as bases, conhecidas como overlays no Kustomize, são modificações que ajustam os manifestos YAML básicos (bases) para atender a requisitos específicos de diferentes contextos. Isso permite que você adapte configurações de forma organizada e reutilizável para diferentes ambientes, como desenvolvimento, produção, testes, entre outros.

Como funcionam os Overlays?

Os overlays utilizam arquivos YAML adicionais, chamados de patches, e um arquivo de configuração kustomization.yaml para definir como os arquivos base devem ser ajustados. Essas customizações são aplicadas em cima dos recursos originais sem alterar os arquivos base diretamente.

Principais Características:

  • Modularidade: As customizações são mantidas separadas das definições originais.
  • Flexibilidade: Permite que diferentes configurações, como réplicas, imagens de container ou rótulos, sejam aplicadas dependendo do ambiente.
  • Centralização: Todas as alterações são definidas de maneira declarativa e centralizada em arquivos de sobreposição.

Exemplo de Situações para Overlays

Ambiente de Desenvolvimento

No ambiente de desenvolvimento, você pode precisar de configurações como:

  • Menor número de réplicas para economizar recursos.
  • Uso de imagens de container mais recentes ou instáveis.
  • Rótulos que identificam o ambiente como “dev”.

Exemplo de Patch (overlay):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  template:
    spec:
      containers:
      - name: my-app
        image: my-app:latest

Ambiente de Produção

No ambiente de produção, as necessidades são diferentes:

  • Maior número de réplicas para garantir alta disponibilidade.
  • Uso de imagens estáveis e versionadas.
  • Inclusão de configurações de segurança, como liveness e readiness probes.

Exemplo de Patch (overlay):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 10
  template:
    spec:
      containers:
      - name: my-app
        image: my-app:1.0.0
        readinessProbe:
          httpGet:
            path: /
            port: 8080

Arquivo kustomization.yaml no Overlay

O arquivo kustomization.yaml em cada overlay define as bases que ele deve usar e os patches que devem ser aplicados.

Exemplo de kustomization.yaml para desenvolvimento:

resources:
  - ../../base
patches:
  - patch-dev.yaml
commonLabels:
  environment: dev

Exemplo de kustomization.yaml para produção:

resources:
  - ../../base
patches:
  - patch-prod.yaml
commonLabels:
  environment: prod

Benefícios dos Overlays

  1. Facilidade de Gerenciamento: Cada ambiente tem suas configurações organizadas em diretórios próprios.
  2. Prevenção de Erros: Como os arquivos base não são alterados diretamente, há menos risco de sobrescrever configurações críticas.
  3. Eficiência no CI/CD: No pipeline de CI/CD, os overlays podem ser usados para aplicar as configurações corretas automaticamente, dependendo do ambiente.

Fluxo de Uso em um Pipeline

  1. Use kubectl apply -k overlays/dev para aplicar a configuração de desenvolvimento.
  2. Use kubectl apply -k overlays/prod para aplicar a configuração de produção.

Os overlays são uma ferramenta essencial para ambientes Kubernetes, permitindo gerenciar a complexidade de múltiplos ambientes de forma modular, segura e eficiente.

kustomization.yaml

Este é o arquivo principal que define quais bases usar, quais customizações aplicar e como os recursos serão combinados. Alguns dos campos principais incluem:

  • resources: Lista de arquivos base a serem usados.
  • patches: Customizações que serão aplicadas aos recursos.
  • commonLabels: Etiquetas adicionadas a todos os recursos gerados.
  • configMapGenerator e secretGenerator: Ferramentas para criar ConfigMaps e Secrets diretamente.

Exemplo de Implantação com Kustomize

Vamos explorar como configurar e implantar aplicações usando o Kustomize em um ambiente Kubernetes.

Estrutura do Diretório

project/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── kustomization.yaml
├── overlays/
    ├── dev/
    │   ├── kustomization.yaml
    │   └── patch-dev.yaml
    ├── prod/
        ├── kustomization.yaml
        └── patch-prod.yaml

Arquivos Base

base/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:latest

base/service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

base/kustomization.yaml

resources:
  - deployment.yaml
  - service.yaml

Overlay para Desenvolvimento

overlays/dev/patch-dev.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2

overlays/dev/kustomization.yaml

resources:
  - ../../base
patches:
  - path: patch-dev.yaml
labels:
  environment: dev

Overlay para Produção

overlays/prod/patch-prod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 5

overlays/prod/kustomization.yaml

resources:
  - ../../base
patches:
  - path: patch-prod.yaml
labels:
  environment: prod

Implantando com Kustomize

Desenvolvimento

Para aplicar a configuração de desenvolvimento:

kubectl apply -k overlays/dev

Produção

Para aplicar a configuração de produção:

kubectl apply -k overlays/prod

Conclusão

O Kustomize é uma ferramenta poderosa e flexível para gerenciar configurações em ambientes Kubernetes. Ele simplifica a customização e aumenta a produtividade, permitindo que equipes gerenciem manifestações de maneira modular e eficiente.

Seja para aplicações simples ou arquiteturas complexas, o Kustomize se torna uma peça essencial no ciclo de vida de implantação.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *