I have around 20 container app and for each one I have deployment.yaml and now let's say I want to put different replicas for each one. What below image suggest that I need to match metadata:name.
Is this means I need to create 20 overlay.yaml each for one container app? Can I managed all app with SINGLE overlay file?
This can be resolved by using patches. You will be able to manage all deployments with one overlay file per environment where you can set explicitly number of replicas for each deployment.
Here's a simplified example of it:
I have two environments: dev and stage. Both have kustomization.yaml with patches for specific deploys and numbers of replicas (different for both envs).
tree command:
.
├── base
│ ├── app-1.yaml
│ ├── app-2.yaml
│ └── kustomization.yaml
└── overlays
├── dev
│ └── kustomization.yaml
└── stage
└── kustomization.yamlDeployment - app-1.yaml: (2nd is almost identical, different name and image)
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-1
spec:
template:
spec:
containers:
- name: example-1
image: example:1.0Below a snippet from overlays/dev/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- patch: |-
- op: replace
path: /spec/replicas
value: 2
target:
group: apps
version: v1
kind: Deployment
name: example-1
- patch: |-
- op: replace
path: /spec/replicas
value: 3
target:
group: apps
version: v1
kind: Deployment
name: example-2Actual result:
$ kubectl kustomize overlays/dev
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-1
spec:
replicas: 2
template:
spec:
containers:
- image: example:1.0
name: example-1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-2
spec:
replicas: 3
template:
spec:
containers:
- image: example:2.0
name: example-2Useful links: