It is not uncommon when using kustomize to inherit a large set of resources or components. Perhaps a few of them need to be updated with patches to accommodate your environment. But if there are objects that are completely incompatible, it may be necessary to delete them.
This can be done with a kustomize ‘$delete’ patch. Let’s use a simple kustomization.yaml to define a namespace, deployment, and configmap.
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - myns.yaml - mydeployment.yaml configMapGenerator: - name: myconfigmap namespace: default literals: - foo=bar generatorOptions: disableNameSuffixHash: true
When run, this assembles the definitions in myns.yaml and mydeployment.yaml as well as a generated configmap as shown below.
# run kustomize, $ kubectl kustomize . apiVersion: v1 kind: Namespace metadata: name: myns --- apiVersion: v1 data: foo: bar kind: ConfigMap metadata: name: myconfigmap namespace: default --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: mydeployment name: mydeployment namespace: default spec: foo: bar selector: matchLabels: app: mydeployment template: metadata: labels: app: mydeployment spec: containers: - image: gcr.io/google-samples/hello-app:1.0 name: mydeployment ports: - containerPort: 8080
If you created a delete patch file named delete-deployment.yaml
$patch: delete apiVersion: apps/v1 kind: Deployment metadata: name: mydeployment namespace: default
And reference that delete patch file in kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - myns.yaml - mydeployment.yaml configMapGenerator: - name: myconfigmap namespace: default literals: - foo=bar generatorOptions: disableNameSuffixHash: true # delete patch patches: - delete-deployment.yaml
Notice how the output below is changed, and only the namespace and configmap are rendered (deployment is deleted).
$ kubectl kustomize . apiVersion: v1 kind: Namespace metadata: name: myns --- apiVersion: v1 data: foo: bar kind: ConfigMap metadata: name: myconfigmap namespace: default
An equivalent method is to define the patch inline as shown below.
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - myns.yaml - mydeployment.yaml configMapGenerator: - name: myconfigmap namespace: default literals: - foo=bar generatorOptions: disableNameSuffixHash: true patches: - |- $patch: delete apiVersion: apps/v1 kind: Deployment metadata: name: mydeployment namespace: default
REFERENCES
kubernetes-sig, kustomize inline and $delete patches