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 `-- 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, willen we dit wijzigen naar type ‘NodePort’. Hiervoor maken we een overlay-bestand overlays/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 te mergen met de base hebben we kustomization bestanden nodig. De eerste komt in overlays 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 patchesStrategicMerge: - 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
Om met kubectl (>=1.14) deze omgeving te bouwen, kan volstaan worden met het volgende commando:
kubectl apply -k overlays
Happy kustomizing!