mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 12:42:19 +00:00
508 lines
13 KiB
Markdown
508 lines
13 KiB
Markdown
# Kustomization File Fields
|
|
|
|
An explanation of the fields in a [kustomization.yaml](glossary.md#kustomization) file.
|
|
|
|
|
|
## Resources
|
|
|
|
What existing things should be customized.
|
|
|
|
| Field | Type | Explanation |
|
|
|---|---|---|
|
|
|[resources](#resources) | list |Files containing k8s API objects, or directories containing other kustomizations. |
|
|
|[CRDs](#crds)| list |Custom resource definition files, to allow specification of the custom resources in the resources list. |
|
|
|
|
## Generators
|
|
|
|
What things should be created (and optionally subsequently customized)?
|
|
|
|
| Field | Type | Explanation |
|
|
|---|---|---|
|
|
|[configMapGenerator](#configmapgenerator)| list |Each entry in this list results in the creation of one ConfigMap resource (it's a generator of n maps).|
|
|
|[secretGenerator](#secretgenerator)| list |Each entry in this list results in the creation of one Secret resource (it's a generator of n secrets)|
|
|
|[generatorOptions](#generatoroptions)|string|generatorOptions modify behavior of all ConfigMap and Secret generators|
|
|
|[generators](#generators)|list|[plugin](plugins) configuration files|
|
|
|
|
|
|
## Transformers
|
|
|
|
What transformations (customizations) should be applied?
|
|
|
|
| Field | Type | Explanation |
|
|
|---|---|---|
|
|
| [commonLabels](#commonlabels) | string | Adds labels and some corresponding label selectors to all resources. |
|
|
| [commonAnnotations](#commonannotations) | string | Adds annotions (non-identifying metadata) to add all resources. |
|
|
| [images](#images) | list | Images modify the name, tags and/or digest for images without creating patches. |
|
|
| [inventory](#inventory) | struct | Specify an object who's annotations will contain a build result summary. |
|
|
| [namespace](#namespace) | string | Adds namespace to all resources |
|
|
| [namePrefix](#nameprefix) | string | Prepends value to the names of all resources |
|
|
| [nameSuffix](#namesuffix) | string | The value is appended to the names of all resources. |
|
|
| [replicas](#replicas) | list | Replicas modifies the number of replicas of a resource. |
|
|
|[patchesStrategicMerge](#patchesstrategicmerge)| list |Each entry in this list should resolve to a partial or complete resource definition file.|
|
|
|[patchesJson6902](#patchesjson6902)| list |Each entry in this list should resolve to a kubernetes object and a JSON patch that will be applied to the object.|
|
|
|[transformers](#transformers)|list|[plugin](plugins) configuration files|
|
|
|
|
|
|
## Meta
|
|
|
|
[k8s metadata]: https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields
|
|
|
|
|Field|Type|Explanation|
|
|
|---|---|---|
|
|
| [vars](#vars) | string | Vars capture text from one resource's field and insert that text elsewhere. |
|
|
| [apiVersion](#apiversion) | string | [k8s metadata] field. |
|
|
| [kind](#kind) | string | [k8s metadata] field. |
|
|
|
|
----
|
|
|
|
### apiVersion
|
|
|
|
If missing, this field's value defaults to
|
|
```
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
```
|
|
|
|
### bases
|
|
|
|
The `bases` field was deprecated in v2.1.0.
|
|
|
|
Move entries into the [resources](#resources)
|
|
field. This allows bases - which are still a
|
|
[central concept](glossary.md#base) - to be
|
|
ordered relative to other input resources.
|
|
|
|
### commonLabels
|
|
|
|
Adds labels to all resources and selectors
|
|
```
|
|
commonLabels:
|
|
someName: someValue
|
|
owner: alice
|
|
app: bingo
|
|
```
|
|
|
|
### commonAnnotations
|
|
|
|
Adds annotions (non-identifying metadata) to add
|
|
all resources. Like labels, these are key value
|
|
pairs.
|
|
|
|
```
|
|
commonAnnotations:
|
|
oncallPager: 800-555-1212
|
|
```
|
|
|
|
### configMapGenerator
|
|
|
|
Each entry in this list results in the creation of
|
|
one ConfigMap resource (it's a generator of n maps).
|
|
|
|
The example below creates two ConfigMaps. One with the
|
|
names and contents of the given files, the other with
|
|
key/value as data.
|
|
|
|
Each configMapGenerator item accepts a parameter of
|
|
`behavior: [create|replace|merge]`.
|
|
This allows an overlay to modify or
|
|
replace an existing configMap from the parent.
|
|
|
|
```
|
|
configMapGenerator:
|
|
- name: myJavaServerProps
|
|
files:
|
|
- application.properties
|
|
- more.properties
|
|
- name: myJavaServerEnvVars
|
|
literals:
|
|
- JAVA_HOME=/opt/java/jdk
|
|
- JAVA_TOOL_OPTIONS=-agentlib:hprof
|
|
```
|
|
|
|
### crds
|
|
|
|
Each entry in this list should be a relative path to
|
|
a file for custom resource definition (CRD).
|
|
|
|
The presence of this field is to allow kustomize be
|
|
aware of CRDs and apply proper
|
|
transformation for any objects in those types.
|
|
|
|
Typical use case: A CRD object refers to a
|
|
ConfigMap object. In a kustomization, the ConfigMap
|
|
object name may change by adding namePrefix,
|
|
nameSuffix, or hashing. The name reference for this
|
|
ConfigMap object in CRD object need to be updated
|
|
with namePrefix, nameSuffix, or hashing in the
|
|
same way.
|
|
|
|
The annotations can be put into openAPI definitions are:
|
|
- "x-kubernetes-annotation": ""
|
|
- "x-kubernetes-label-selector": ""
|
|
- "x-kubernetes-identity": ""
|
|
- "x-kubernetes-object-ref-api-version": "v1",
|
|
- "x-kubernetes-object-ref-kind": "Secret",
|
|
- "x-kubernetes-object-ref-name-key": "name",
|
|
|
|
|
|
```
|
|
|
|
crds:
|
|
- crds/typeA.yaml
|
|
- crds/typeB.yaml
|
|
```
|
|
|
|
|
|
### generatorOptions
|
|
|
|
Modifies behavior of all [ConfigMap](#configmapgenerator)
|
|
and [Secret](#secretgenerator) generators.
|
|
|
|
```
|
|
generatorOptions:
|
|
# labels to add to all generated resources
|
|
labels:
|
|
kustomize.generated.resources: somevalue
|
|
# annotations to add to all generated resources
|
|
annotations:
|
|
kustomize.generated.resource: somevalue
|
|
# disableNameSuffixHash is true disables the default behavior of adding a
|
|
# suffix to the names of generated resources that is a hash of
|
|
# the resource contents.
|
|
disableNameSuffixHash: true
|
|
```
|
|
|
|
### generators
|
|
|
|
A list of generator [plugin](plugins) configuration files.
|
|
|
|
```
|
|
generators:
|
|
- mySecretGeneratorPlugin.yaml
|
|
- myAppGeneratorPlugin.yaml
|
|
```
|
|
|
|
### images
|
|
|
|
Images modify the name, tags and/or digest for images without creating patches.
|
|
E.g. Given this kubernetes Deployment fragment:
|
|
|
|
```
|
|
containers:
|
|
- name: mypostgresdb
|
|
image: postgres:8
|
|
- name: nginxapp
|
|
image: nginx:1.7.9
|
|
- name: myapp
|
|
image: my-demo-app:latest
|
|
- name: alpine-app
|
|
image: alpine:3.7
|
|
```
|
|
|
|
one can change the `image` in the following ways:
|
|
|
|
- `postgres:8` to `my-registry/my-postgres:v1`,
|
|
- nginx tag `1.7.9` to `1.8.0`,
|
|
- image name `my-demo-app` to `my-app`,
|
|
- alpine's tag `3.7` to a digest value
|
|
|
|
all with the following *kustomization*:
|
|
|
|
```
|
|
images:
|
|
- name: postgres
|
|
newName: my-registry/my-postgres
|
|
newTag: v1
|
|
- name: nginx
|
|
newTag: 1.8.0
|
|
- name: my-demo-app
|
|
newName: my-app
|
|
- name: alpine
|
|
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
|
|
```
|
|
|
|
### inventory
|
|
|
|
See [inventory object](inventory_object.md).
|
|
|
|
### kind
|
|
|
|
If missing, this field's value defaults to
|
|
|
|
```
|
|
kind: Kustomization
|
|
```
|
|
|
|
|
|
### namespace
|
|
|
|
Adds namespace to all resources
|
|
|
|
```
|
|
namespace: my-namespace
|
|
```
|
|
|
|
### namePrefix
|
|
|
|
Prepends value to the names of all resources
|
|
Ex. a deployment named `wordpress` would become `alices-wordpress`
|
|
|
|
```
|
|
namePrefix: alices-
|
|
```
|
|
|
|
### nameSuffix
|
|
|
|
The value is appended to the names of all
|
|
resources. Ex. A deployment named `wordpress`
|
|
would become `wordpress-v2`.
|
|
|
|
The suffix is appended before content has if
|
|
resource type is ConfigMap or Secret.
|
|
|
|
```
|
|
nameSuffix: -v2
|
|
```
|
|
|
|
### patchesStrategicMerge
|
|
|
|
Each entry in this list should be a relative path
|
|
resolving to a partial or complete resource
|
|
definition file.
|
|
|
|
The names in these (possibly partial) resource
|
|
files must match names already loaded via the
|
|
`resources` field. These entries are used to
|
|
_patch_ (modify) the known resources.
|
|
|
|
Small patches that do one thing are best, e.g. modify
|
|
a memory request/limit, change an env var in a
|
|
ConfigMap, etc. Small patches are easy to review and
|
|
easy to mix together in overlays.
|
|
|
|
```
|
|
patchesStrategicMerge:
|
|
- service_port_8888.yaml
|
|
- deployment_increase_replicas.yaml
|
|
- deployment_increase_memory.yaml
|
|
```
|
|
|
|
### patchesJson6902
|
|
|
|
Each entry in this list should resolve to
|
|
a kubernetes object and a JSON patch that will be applied
|
|
to the object.
|
|
The JSON patch is documented at https://tools.ietf.org/html/rfc6902
|
|
|
|
target field points to a kubernetes object within the same kustomization
|
|
by the object's group, version, kind, name and namespace.
|
|
path field is a relative file path of a JSON patch file.
|
|
The content in this patch file can be either in JSON format as
|
|
|
|
```
|
|
[
|
|
{"op": "add", "path": "/some/new/path", "value": "value"},
|
|
{"op": "replace", "path": "/some/existing/path", "value": "new value"}
|
|
]
|
|
```
|
|
|
|
or in YAML format as
|
|
|
|
```
|
|
- op: add
|
|
path: /some/new/path
|
|
value: value
|
|
- op: replace
|
|
path: /some/existing/path
|
|
value: new value
|
|
```
|
|
|
|
```
|
|
patchesJson6902:
|
|
- target:
|
|
version: v1
|
|
kind: Deployment
|
|
name: my-deployment
|
|
path: add_init_container.yaml
|
|
- target:
|
|
version: v1
|
|
kind: Service
|
|
name: my-service
|
|
path: add_service_annotation.yaml
|
|
```
|
|
|
|
### replicas
|
|
|
|
Replicas modified the number of replicas for a resource.
|
|
|
|
E.g. Given this kubernetes Deployment fragment:
|
|
|
|
```
|
|
kind: Deployment
|
|
metadata:
|
|
name: deployment-name
|
|
spec:
|
|
replicas: 3
|
|
```
|
|
|
|
one can change the number of replicas to 5
|
|
by adding the following to your kustomization:
|
|
|
|
```
|
|
replicas:
|
|
- name: deployment-name
|
|
count: 5
|
|
```
|
|
|
|
This field accepts a list, so many resources can
|
|
be modified at the same time.
|
|
|
|
|
|
#### Limitation
|
|
|
|
As this declaration does not take in a `kind:` nor a `group:`
|
|
it will match any `group` and `kind` that has a matching name and
|
|
that is one of:
|
|
- `Deployment`
|
|
- `ReplicationController`
|
|
- `ReplicaSet`
|
|
- `StatefulSet`
|
|
|
|
For more complex use cases, revert to using a patch.
|
|
|
|
|
|
### resources
|
|
|
|
Each entry in this list must be a path to a
|
|
_file_, or a path (or URL) refering to another
|
|
kustomization _directory_, e.g.
|
|
|
|
```
|
|
resource:
|
|
- myNamespace.yaml
|
|
- sub-dir/some-deployment.yaml
|
|
- ../../commonbase
|
|
- github.com/kubernetes-sigs/kustomize//examples/multibases?ref=v1.0.6
|
|
- deployment.yaml
|
|
- github.com/kubernets-sigs/kustomize//examples/helloWorld?ref=test-branch
|
|
```
|
|
|
|
Resources will be read and processed in
|
|
depth-first order.
|
|
|
|
Files should contain k8s resources in YAML form.
|
|
A file may contain multiple resources separated by
|
|
the document marker `---`. File paths should be
|
|
specified _relative_ to the directory holding the
|
|
kustomization file containing the `resources`
|
|
field.
|
|
|
|
[hashicorp URL]: https://github.com/hashicorp/go-getter#url-format
|
|
|
|
Directory specification can be relative, absolute,
|
|
or part of a URL. URL specifications should
|
|
follow the [hashicorp URL] format. The directory
|
|
must contain a `kustomization.yaml` file.
|
|
|
|
|
|
### secretGenerator
|
|
|
|
Each entry in this list results in the creation of
|
|
one Secret resource (it's a generator of n secrets).
|
|
|
|
```
|
|
secretGenerator:
|
|
- name: app-tls
|
|
files:
|
|
- secret/tls.cert
|
|
- secret/tls.key
|
|
type: "kubernetes.io/tls"
|
|
- name: app-tls-namespaced
|
|
# you can define a namespace to generate secret in, defaults to: "default"
|
|
namespace: apps
|
|
files:
|
|
- tls.crt=catsecret/tls.cert
|
|
- tls.key=secret/tls.key
|
|
type: "kubernetes.io/tls"
|
|
- name: env_file_secret
|
|
envs:
|
|
- env.txt
|
|
type: Opaque
|
|
```
|
|
|
|
### vars
|
|
|
|
Vars are used to capture text from one resource's field
|
|
and insert that text elsewhere - a reflection feature.
|
|
|
|
For example, suppose one specifies the name of a k8s Service
|
|
object in a container's command line, and the name of a
|
|
k8s Secret object in a container's environment variable,
|
|
so that the following would work:
|
|
|
|
```
|
|
containers:
|
|
- image: myimage
|
|
command: ["start", "--host", "$(MY_SERVICE_NAME)"]
|
|
env:
|
|
- name: SECRET_TOKEN
|
|
value: $(SOME_SECRET_NAME)
|
|
```
|
|
|
|
To do so, add an entry to `vars:` as follows:
|
|
|
|
```
|
|
vars:
|
|
- name: SOME_SECRET_NAME
|
|
objref:
|
|
kind: Secret
|
|
name: my-secret
|
|
apiVersion: v1
|
|
- name: MY_SERVICE_NAME
|
|
objref:
|
|
kind: Service
|
|
name: my-service
|
|
apiVersion: v1
|
|
fieldref:
|
|
fieldpath: metadata.name
|
|
- name: ANOTHER_DEPLOYMENTS_POD_RESTART_POLICY
|
|
objref:
|
|
kind: Deployment
|
|
name: my-deployment
|
|
apiVersion: apps/v1
|
|
fieldref:
|
|
fieldpath: spec.template.spec.restartPolicy
|
|
```
|
|
|
|
A var is a tuple of variable name, object
|
|
reference and field reference within that object.
|
|
That's where the text is found.
|
|
|
|
The field reference is optional; it defaults to
|
|
`metadata.name`, a normal default, since kustomize
|
|
is used to generate or modify the names of
|
|
resources.
|
|
|
|
At time of writing, only string type fields are
|
|
supported. No ints, bools, arrays etc. It's not
|
|
possible to, say, extract the name of the image in
|
|
container number 2 of some pod template.
|
|
|
|
A variable reference, i.e. the string '$(FOO)',
|
|
can only be placed in particular fields of
|
|
particular objects as specified by kustomize's
|
|
configuration data.
|
|
|
|
The default config data for vars is at
|
|
https://github.com/kubernetes-sigs/kustomize/blob/master/pkg/transformers/config/defaultconfig/varreference.go
|
|
Long story short, the default targets are all
|
|
container command args and env value fields.
|
|
|
|
Vars should _not_ be used for inserting names in
|
|
places where kustomize is already handling that
|
|
job. E.g., a Deployment may reference a ConfigMap
|
|
by name, and if kustomize changes the name of a
|
|
ConfigMap, it knows to change the name reference
|
|
in the Deployment.
|
|
|
|
|