Kubectl kustomize: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
=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=
=Internal=


Line 5: Line 10:
=Overview=
=Overview=


Reads instructions from a kustomization.yaml file and generates syntactically valid and complete API resource [[Kubernetes Manifests#Overview|manifests]].
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=


<syntaxhighlight lang='yaml'>
<font color=burlywood># add the specified labels to all resources</font>
namePrefix:
commonLabels:
images:
  app: hello
- name: something
<font color=burlywood># add the specified annotations to all resources</font>
  newTag: ...
commonAnnotations:
namespace: ...   
  ...
resources:
<font color=burlywood># add the specified common prefix to all resource names</font>
- manifest-1.yaml
namePrefix: <font color=teal>blue-</font>
- manifest-2.yaml
<font color=burlywood># ?</font>
patchesStrategicMerge:
namespace: ...   
- file1.yaml
<font color=burlywood># ?</font>
</syntaxhighlight>
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

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.