Installatie
Installeren van kustomization op een MacBook:
brew install kustomize
Kustomization wordt vaak gebruikt om meerdere wijzigingen door te voeren op een deployment zonder de bestaande source-bestanden te wijzigen. Door het ‘mergen’ van overlay bestanden kan een deployment aangepast worden om deze vervolgens met de wijzigingen te deployen in Kubernetes.
De basis (source) bestanden staan in een zgn. base directory en de wijzigingen worden in een overlays directory geplaatst, bijvoorbeeld:
|-- base | |-- mysql | | |-- deployment.yaml | | |-- secret.yaml | | `-- service.yaml `-- wordpress | |-- deployment.yaml | `-- service.yaml `-- overlays `-- dev `-- service.yaml
Base
Om de base bestanden te gebruiken om een Kubernetes omgeving te maken, voegen we een kustomization.yaml bestand toe aan de base directory met de volgende inhoud:
bases: - ./wordpress - ./mysql
Om deze te deployen met kubectl (>=1.14) kan het volgende commando gebruikt worden:
kubectl apply -k base
In de base/mysql/service.yml staat het volgende:
apiVersion: v1 kind: Service metadata: name: mysql labels: app: mysql spec: ports: - port: 3306 selector: app: mysql
en in base/wordpress/service.yaml staat:
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress type: LoadBalancer
Overlays
Aangezien een type ‘LoadBalancer’ niet beschikbaar is op een lokale (minikube) cluster in onze development omgeving, willen we dit wijzigen naar type ‘NodePort’. Hiervoor maken we een overlay-bestand overlays/dev/service.yaml met de volgende inhoud:
apiVersion: v1 kind: Service metadata: name: wordpress spec: type: NodePort --- apiVersion: v1 kind: Service metadata: name: mysql spec: type: NodePort
Zoals je ziet hoeven we niet de hele inhoud van de service te gebruiken, slechts de wijzigingen die we willen doorvoeren. We gebruiken metadata.name alleen om aan te geven welke service we willen wijzigen.
Kustomization
Om de wijzigingen van de overlay/dev te mergen met de base hebben we kustomization bestanden nodig. De eerste komt in overlays/dev en bevat de volgende inhoud om aan te geven welke bases we willen gebruiken en welke patch we willen mergen:
bases: - ../../base/mysql - ../../base/wordpress patches: - service.yaml
Vervolgens maken we kustomization.yaml bestanden in de base/mysql en de base/wordpress directories waarin aangegeven wordt welke resources gewijzigd dienen te worden met de overlays.
Voor base/mysql/kustomization.yaml:
resources: - deployment.yaml - service.yaml - secret.yaml
Voor base/wordpress/kustomization.yaml:
resources: - deployment.yaml - service.yaml
We geven het volgende commando om de manifests te bekijken:
kustomize build overlay/dev
Om met kubectl (>=1.14) deze omgeving te bouwen, kan volstaan worden met het volgende commando:
kubectl apply -k overlays/dev
HELM
Met kustomize kunnen ook helm charts ge-deployed worden. Een voorbeeld in de base directory voor een awx-operator helm chart in kustomization.yaml waarbij via values.yaml extra instellingen gemaakt kunnen worden:
helmCharts: - name: awx-operator repo: oci://url-van-repostory/oci-charts version: 0.25.1 releaseName: awx-operator includeCRDs: true valuesFile: values.yaml
in de overlays kan een extra helm configuratie ingevoerd worden , bv met een specifieke versie en namespace:
helmCharts: - name: awx-operator repo: oci://url-van-repostory/oci-charts version: 0.25.5 namespace: awx-namespace valuesFile: values.yaml
Happy kustomizing!