Kubectl kustomize: Difference between revisions
(20 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
* https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/ | * https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/ | ||
* https://github.com/kubernetes-sigs/kustomize | * https://github.com/kubernetes-sigs/kustomize/tree/master/docs | ||
=Internal= | =Internal= | ||
Line 10: | Line 10: | ||
=Overview= | =Overview= | ||
The "kustomize" logic reads a series of source API resource [[Kubernetes Manifests#Overview|manifests]], instructions from a kustomization.yaml file and generates syntactically valid and complete API resource [[Kubernetes Manifests#Overview|manifests]] at stdout. The generated content may contain multiple resource representations, separated by ---. | The "kustomize" logic reads a series of source API resource [[Kubernetes Manifests#Overview|manifests]], instructions from a kustomization.yaml file and generates syntactically valid and complete API resource [[Kubernetes Manifests#Overview|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 <tt>kubectl</tt> for deployment to a cluster. | ||
kubectl kustomize <''dirname''> | kubectl kustomize <''dirname''> > ''output.yaml'' | ||
The directory specified as argument must contain <tt>kustomization.yaml</tt>. | The directory specified as argument must contain <tt>kustomization.yaml</tt>. | ||
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 [[Kubernetes Strategic Merge Patch|strategic merge patches]] and [[JSON Patch|JSON patches]]. | |||
=kustomization.yaml Example= | =kustomization.yaml Example= | ||
< | <font color=burlywood># add the specified labels to all resources</font> | ||
commonLabels: | |||
app: hello | |||
<font color=burlywood># add the specified annotations to all resources</font> | |||
commonAnnotations: | |||
namespace: ... | ... | ||
<font color=burlywood># add the specified common prefix to all resource names</font> | |||
- | namePrefix: <font color=teal>blue-</font> | ||
- | <font color=burlywood># ?</font> | ||
namespace: ... | |||
- | <font color=burlywood># ?</font> | ||
</ | images: | ||
- name: <font color=teal>something</font> | |||
newTag: <font color=teal>some-new-tag</font> | |||
<font color=burlywood># ?</font> | |||
patches: | |||
- patch-file-1.yaml | |||
<font color=burlywood># ?</font> | |||
patchesStrategicMerge: | |||
- patch-file-2.yaml | |||
resources: | |||
- deployment-manifest.yaml | |||
- configmap-manifest.yaml | |||
- service-manifest.yaml | |||
=TODO= | |||
<font color=darkgray>It seems to add prefixes to names, update image tags, adds namespace metadata, "yaml-cleans" according to rules that have yet to be elucidated.</font> |
Latest revision as of 18:26, 23 August 2019
External
- https://kubernetes.io/blog/2018/05/29/introducing-kustomize-template-free-configuration-customization-for-kubernetes/
- https://github.com/kubernetes-sigs/kustomize/tree/master/docs
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.