1

I want to change all the dev-app to demo-app using kustomization. In my base deployment.yaml I have the following:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    service: dev-app
  name: dev-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dev-app
  template:
    metadata:
      labels:
        service: dev-app
    spec:
      imagePullSecrets:
      - name: my-docker-secret
      containers:
      - name: dev-app
        image: the-my-app
        imagePullPolicy: Always
        ports:
        - containerPort: 1234
      restartPolicy: Always

In my overlays/demo kustomization.yaml I have the following:

bases:
- ../../base
resources:
- deployment.yaml
namespace: demo-app

images:
- name: the-my-app
  newName: my.docker.registry.com/my-project/my-app
  newTag: test

when I do this:

kubectl apply -k my-kustomization-dir

result look like this:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    service: dev-app
  name: dev-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dev-app
  template:
    metadata:
      labels:
        service: dev-app
    spec:
      imagePullSecrets:
      - name: my-docker-secret
      containers:
      - name: dev-app
        image: my.docker.registry.com/my-project/my-app:test
        imagePullPolicy: Always
        ports:
        - containerPort: 1234
      restartPolicy: Always

I want to change the name in the container to demo-app.

containers:
      - name: dev-app

if possible help me with best possible way to replace all the dev-app name,label,service tag to demo-app

1 Answers1

0

A way to do this is to replicate your deployment file into your overlays folder and change what you need to change, for example:

Path structure:

├── base
│   ├── deployment.yaml
│   └── kustomization.yaml
└── overlays
    ├── dev
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── prod
        ├── deployment.yaml
        └── kustomization.yaml

deployment file of base/ folder:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    service: dev-app
  name: dev-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dev-app
  template:
    metadata:
      labels:
        service: dev-app
    spec:
      imagePullSecrets:
      - name: my-docker-secret
      containers:
        - name: dev-app
          image: the-my-app
          imagePullPolicy: Always
          ports:
            - containerPort: 1234
          resources:
            limits:
              cpu: 1
              memory: 1Gi
            requests:
              cpu: 1
              memory: 500M

deployment file of overlays/prod folder:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    service: demo-app
  name: demo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      labels:
        service: demo-app
    spec:
      imagePullSecrets:
      - name: my-docker-secret
      containers:
        - name: demo-app
          image: the-my-app
          imagePullPolicy: Always
          ports:
            - containerPort: 1234
          resources:
            limits:
              cpu: 1
              memory: 1Gi
            requests:
              cpu: 1
              memory: 500M

Kustomization file of overlays/prod:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: deployment.yaml
  target:
    kind: Deployment
  options:
    allowNameChange: true

namespace: prod-demo-app
 
images:
- name: the-my-app
  newName: my.docker.registry.com/my-project/my-app
  newTag: test

I suggest you use Helm, a much more robust templating engine. You can also use a combination of both Helm and Kustomize, Helm for templating and Kustomize for resource management, patches for a specific configuration, and overlays.