Kustomize Patches - inna metoda zmiany parametrów manifestów z Kustomize¶
Patches umożliwiają bardziej szczegółowy rodzaj zmiany parametrów w overlayach w stosunku do oryginalnych szablonów bazowych z użyciem Kustomize.
Trzy parametry muszą być podane podczas tworzenia Patch'a:
- Rodzaj operacji (add/remove/replace)
- Co będzie zmieniane:
- Kind
- Version
- Group
- Name
- Namespace
- labelSelector
- annotationSelector
- Wartość (Value) - Jaka nowa wartość będzie ustawiona (przy operacji add/replace)
Dwa rodzaje Patch'y: - Json 6902 Patch
patches:
- target:
kind: <rodzaj_zasobu,np.Deployment>
name: <nazwa_zasobu, np. nginx-deployment>
patch: | -
- op: <operacja-add/replace/delete>
path: <ścieżka_w_manifeście,np./spec/replicas>
value: <nowa_wartość_atrybutu>
- Strategic Merge Patch Polega to na tym, że po prostu podajemy część zasobu (manifestu), która ma być zmieniona w danym Patchu.
Po prostu wrzucamy część manifestu, np. Deployment, plik kustomization.yaml:
patches:
- patch: | -
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
lub z użyciem oddzielnego pliku:
plik kustomize.yaml:
i nginx-deployment-patch.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
template:
spec:
containers:
- name: web
image: nginx:latest
Dodajemy tylko potrzebne pola - do zdefiniowania w tym przypadku Deploymentu, zmieniony został obraz kontenera w Podzie.
Przykład użycia¶
Zmiana wartości replicas w Deployment z użyciem Json 6902 Patch¶
Przykładowy Deployment:
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
Patch w Kustomize, plik kustomization.yaml:
patches:
- target:
kind: Deployment
name: nginx-deployment
patch: | -
- op: replace
path: /spec/replicas # lokalizacja w manifeście, patrz na manifest (spec.replicas)
value: 4
Deployment po zmianie:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
Zmiana parametru - operacja na liście list¶
Deployment przed zmianami:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
Patch w Kustomize (kustomization.yaml):
patches:
- target:
kind: Deployment
name: nginx-deployment
patch: | -
- op: replace
path: /spec/template/spec/containers/0 # obiekt w słowniku, który z kolei
value:
name: grafana
image: grafana
Deployment po zmianach:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: grafana
image: grafana
Dodawanie parametru - operacja na liście list¶
Deployment przed zmianami:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
Patch w Kustomize (kustomization.yaml):
patches:
- target:
kind: Deployment
name: nginx-deployment
patch: | -
- op: replace
path: /spec/template/spec/containers/- # specjalnie "-" jako koniec listy
value:
name: grafana
image: grafana
Deployment po zmianach:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: grafana
image: grafana
- name: grafana
image: grafana
Usuwanie parametru - operacja na słowniku (dict)¶
Zrobimy to na przykładzie pola spec.metadata.labels.
Deployment przed zmianami:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
type: frontend
spec:
containers:
- name: nginx
image: nginx
Plik kustomization.yaml
patches:
- target:
kind: Deployment
name: nginx-deployment
patch: | -
- op: remove
path: /spec/template/metadata/labels/type
Deployment po zmianach:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
Usuwanie parametru - operacja na liście (list)¶
Deployment przed zmianami:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
- name: sidecar
image: fluent-bit
Patch w Kustomize (kustomization.yaml):
patches:
- target:
kind: Deployment
name: nginx-deployment
patch: | -
- op: remove
path: /spec/template/spec/containers/1
Deployment po zmianach:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
Usuwanie parametru (z użyciem) Strategic Merge Patch¶
Usuwanie kontenera z listy kontenerów wewnątrz Poda
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
replicas: 1
selector:
matchLabels:
component: api
template:
metadata:
labels:
component: api
spec:
containers:
- $patch: delete
name: memcached
Kontener o nazwie memcached zostanie usunięty.