Kubectl kustomize

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

External

Internal

Overview

The "kustomize" logic reads a series of source API resource manifests, instructions from a kustomization.yaml file and generates syntactically valid and complete API resource manifests at stdout. The generated content may contain multiple resource representations, separated by ---. The output can be further processed by other tools or streamed directly into kubectl for deployment to a cluster.

kubectl kustomize <dirname> > output.yaml

The directory specified as argument must contain kustomization.yaml.

kustomize has the concept of overlay and base. Both are represented by kustomization files. The base declares the things that all possible output manifest variants (example development, staging and production) share, which include common customizations and resources, and the overlays declare the differences. The kustomization files are maintained in directories named "base", "overlays", in which each overlay has its own sub-directory.

A patch is a general instruction to modify a resource. More specifically, a patch is a partial resource declaration that once applied, modifies just a subset of the configuration. .kustomize supports strategic merge patches and JSON patches.

kustomization.yaml Example

# add the specified labels to all resources
commonLabels:
  app: hello
# add the specified annotations to all resources
commonAnnotations:
  ...
# add the specified common prefix to all resource names
namePrefix: blue-
# ?
namespace: ...   
# ?
images:
- name: something
  newTag: some-new-tag
# ?
patches:
- patch-file-1.yaml
# ?
patchesStrategicMerge:
- patch-file-2.yaml
resources:
- deployment-manifest.yaml
- configmap-manifest.yaml
- service-manifest.yaml

TODO

It seems to add prefixes to names, update image tags, adds namespace metadata, "yaml-cleans" according to rules that have yet to be elucidated.