Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selectively apply nameprefix/namesuffix in kustomize

Currently we are using ${HOME}/bin/kustomize edit set nameprefix prefix1

But it is adding nameprefix to all of our resources like deployment.yaml and service.yaml.

We want to apply nameprefix to deployment.yaml only and not apply it to service.yaml

like image 888
coderatcloud9 Avatar asked Oct 06 '20 01:10

coderatcloud9


People also ask

What is a Kustomize transformer?

Transformer Configurations. Kustomize creates new resources by applying a series of transformations to an original set of resources. Kustomize provides the following default transformers: annotations. images.

What is Kustomize overlay?

An overlay is a directory with a kustomization. yaml that refers to other kustomization directories as its bases . A base has no knowledge of an overlay and can be used in multiple overlays. An overlay may have multiple bases and it composes all resources from bases and may also have customization on top of them.

What is Kustomization used for?

Kustomize is a command-line configuration manager for Kubernetes objects. Integrated with kubectl since 1.14, it allows you to make declarative changes to your configurations without touching a template.


1 Answers

Posting for better visibility:

If you are using:

kustomize edit set nameprefix prefix1

This command will set namePrefix inside your current kustomization. As stated in the question - this is the way how it works, namePrefix will be used for all specified resources inside kustomization.yaml.

Please consider the following scenario using the idea of an overlay and base with kustomization.

Tested with:
kustomize/v4.0.1

Base declare resources and settings shared in common and overlay declare additional differences.

.
├── base
│   ├── [deployment.yaml]  Deployment nginx
│   ├── [kustomization.yaml]  Kustomization 
│   └── [service.yaml]  Service nginx
└── prod
    ├── [kustomization.yaml]  Kustomization 
    └── kustomizeconfig
        └── [deploy-prefix-transformer.yaml]  PrefixSuffixTransformer customPrefixer
  • base: common files
#deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      run: nginx

#service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    run: nginx

#kustomization.yaml
resources:
- deployment.yaml
- service.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
  • overlay/prod: kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
nameSuffix: -Suffix1
transformers:
- ./kustomizeconfig/deploy-prefix-transformer.yaml

  • overlay/prod/kustomizeconfig: deploy-prefix-transformer.yaml
apiVersion: builtin
kind: PrefixSuffixTransformer
metadata:
  name: customPrefixer
prefix: "deploymentprefix-"
fieldSpecs:
- kind: Deployment
  path: metadata/name

As you can see, using this structure and builtin plugin PrefixSuffixTransformer you can get the desired effect:

kustomize build overlay/prod/
apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: nginx-Suffix1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploymentprefix-nginx-Suffix1
spec:
  selector:
    matchLabels:
      run: nginx

This configuration (overlay/prod/kustomization.yaml) will apply nameSuffix: -Suffix1 to all resources specified in base directory and using PrefixSuffixTransformer will add in this specific example prefix: "deploymentprefix-" to deployment.metadata.name

apiVersion: builtin
kind: PrefixSuffixTransformer
metadata:
  name: customPrefixer
prefix: "deploymentprefix-"
fieldSpecs:
- kind: Deployment
  path: metadata/name

 /kustomizeconfig/deploy-prefix-transformer.yaml

like image 176
Mark Avatar answered Oct 07 '22 13:10

Mark