Skip to content

Kustomize - opis

Jest to narzędzie do zarządzania manifestami Kubernetes bez ich duplikowania. Możemy podzielić na różne warianty konfiguracji manifesty (np. prod, dev, staging) na bazie tych samych plików bazowych, bez używania szablonów Helmowych.

Dodajemy Overlay (nakładki) na bazowe manifesty. W nakładkach dodajemy tylko manifesty z polami które chcemy zmienić (możemy na przykład dodać tylko pole replicas).

Info

Ważne jest to, że w ramach różnych środowisk możemy także dokładać nowe manifesty, nie muszą być brane tylko z tego bazowego!

Przykład działania

Tworzymy manifest Deploymentu nginx, w katalogu base/deployment.yaml:

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

Aby następnie tworzyć nowe overlay'e:

plik overlays/dev/deployment.yaml

spec:
    replicas: 1

plik overlays/prod/deployment.yaml

spec:
    replicas: 4

Przykładowa struktura katalogu projektu

Najlepiej rozbijać na poszczególne projekty (np. właśnie overlaye), do każdego z nich dokładać kustomization.yaml a w nim podawać info o tym jakie resources są utworzone.

W głównym kustomization.yaml podajemy info o wszystkich katalogach jakie używamy, np.

resources:
    - ../overlays/dev/
    - ../overlays/staging/
    - ../overlays/prod/

a następnie w każdym z kustomization.yaml w osobnym katalogu, np. dla overlays/dev/kustomization.yaml:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
    - patch-deployment.yaml
    - configmap-dev.yaml

k8s-cluster/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── configmap.yaml
│   └── kustomization.yaml
├── overlays/
│   ├── dev/
│   │   ├── kustomization.yaml
│   │   ├── patch-deployment.yaml
│   │   └── configmap-dev.yaml
│   │
│   ├── staging/
│   │   ├── kustomization.yaml
│   │   └── patch-deployment.yaml
│   │
│   └── prod/
│       ├── kustomization.yaml
│       └── patch-deployment.yaml
└── README.md