diff --git a/docs/api-reference/glossary/index.html b/docs/api-reference/glossary/index.html index 861eeedb1..463591d1c 100644 --- a/docs/api-reference/glossary/index.html +++ b/docs/api-reference/glossary/index.html @@ -702,37 +702,6 @@ - - @@ -769,331 +738,6 @@

Glossary

Glossary of terms
-

Glossary

-

application

-

An application is a group of k8s resources related by -some common purpose, e.g. a load balancer in front of a -webserver backed by a database. -Resource labelling, naming and metadata schemes have -historically served to group resources together for -collective operations like list and remove.

-

This proposal describes a new k8s resource called -application to more formally describe this idea and -provide support for application-level operations and -dashboards.

-

kustomize configures k8s resources, and the proposed -application resource is just another resource.

-

apply

-

The verb apply in the context of k8s refers to a -kubectl command and an in-progress API -endpoint for mutating a -cluster.

-

One applies a statement of what one wants to a -cluster in the form of a complete resource list.

-

The cluster merges this with the previously applied -state and the actual state to arrive at a new desired -state, which the cluster’s reconciliation loop attempts -to create. This is the foundation of level-based state -management in k8s.

-

base

-

A base is a kustomization referred to -by some other kustomization.

-

Any kustomization, including an overlay, can be a base to -another kustomization.

-

A base has no knowledge of the overlays that refer to it.

-

For simple gitops management, a base configuration -could be the sole content of a git repository -dedicated to that purpose. Same with overlays. -Changes in a repo could generate a build, test and -deploy cycle.

-

bespoke configuration

-

A bespoke configuration is a kustomization and some -resources created and maintained internally by some -organization for their own purposes.

-

The workflow associated with a bespoke config is -simpler than the workflow associated with an -off-the-shelf config, because there’s no notion of -periodically capturing someone else’s upgrades to the -off-the-shelf config.

-

custom resource definition

-

One can extend the k8s API by making a -Custom Resource Definition (CRD spec).

-

This defines a custom resource (CD), an entirely -new resource that can be used alongside native -resources like ConfigMaps, Deployments, etc.

-

Kustomize can customize a CD, but to do so -kustomize must also be given the corresponding CRD -so that it can interpret the structure correctly.

-

declarative application management

-

Kustomize aspires to support Declarative Application Management, -a set of best practices around managing k8s clusters.

-

In brief, kustomize should

- -

generator

-

A generator makes resources that can be used as is, -or fed into a transformer.

-

gitops

-

Devops or CICD workflows that use a git repository as a -single source of truth and take action (e.g., build, -test or deploy) when that truth changes.

-

kustomization

-

The term kustomization refers to a -kustomization.yaml file, or more generally to a -directory (the root) containing the -kustomization.yaml file and all the relative file -paths that it immediately references (all the local -data that doesn’t require a URL specification).

-

I.e. if someone gives you a kustomization for use -with kustomize, it could be in the form of

- -

A kustomization file contains fields -falling into four categories:

- -

kustomization root

-

The directory that immediately contains a -kustomization.yaml file.

-

When a kustomization file is processed, it may or may -not be able to access files outside its root.

-

Data files like resource YAML files, or text files -containing name=value pairs intended for a ConfigMap -or Secret, or files representing a patch to be used in -a patch transformation, must live within or below the -root, and as such are specified via relative -paths exclusively.

-

A special flag (in v2.1), --load_restrictions none, -is provided to relax this security feature, to, say, -allow a patch file to be shared by more than one -kustomization.

-

Other kustomizations (other directories containing a -kustomization.yaml file) may be referred to by URL, by -absolute path, or by relative path.

-

If kustomization A depends on kustomization B, then

- -

A may contain B, but in this case it might be -simplest to have A directly depend on B’s -resources and eliminate B’s kustomization.yaml file -(i.e. absorb B into A).

-

Conventionally, B is in a directory that’s sibling -to A, or B is off in a completely independent -git repository, referencable from any kustomization.

-

A common layout is

-
-
├── base
-│   ├── deployment.yaml
-│   ├── kustomization.yaml
-│   └── service.yaml
-└── overlays
-    ├── dev
-    │   ├── kustomization.yaml
-    │   └── patch.yaml
-    ├── prod
-    │   ├── kustomization.yaml
-    │   └── patch.yaml
-    └── staging
-        ├── kustomization.yaml
-        └── patch.yaml
-
-

The three roots dev, prod and staging -(presumably) all refer to the base root. One would -have to inspect the kustomization.yaml files to be -sure.

-

kubernetes

-

Kubernetes is an open-source -system for automating deployment, scaling, and -management of containerized applications.

-

It’s often abbreviated as k8s.

-

kubernetes-style object

-

An object, expressed in a YAML or JSON file, with the -fields required by kubernetes. Basically just a -kind field to identify the type, a metadata/name -field to identify the particular instance, and an -apiVersion field to identify the version (if there’s -more than one version).

-

kustomize

-

kustomize is a command line tool supporting -template-free, structured customization of declarative -configuration targeted to k8s-style objects.

-

Targeted to k8s means that kustomize has some -understanding of API resources, k8s concepts like -names, labels, namespaces, etc. and the semantics of -resource patching.

-

kustomize is an implementation of DAM.

-

off-the-shelf configuration

-

An off-the-shelf configuration is a kustomization and -resources intentionally published somewhere for others -to use.

-

E.g. one might create a github repository like this:

-
-
github.com/username/someapp/
-  kustomization.yaml
-  deployment.yaml
-  configmap.yaml
-  README.md
-
-

Someone could then fork this repo (on github) and -clone their fork to their local disk for -customization.

-

This clone could act as a base for the user’s -own overlays to do further customization.

-

overlay

-

An overlay is a kustomization that depends on -another kustomization.

-

The kustomizations an overlay refers to (via file -path, URI or other method) are called bases.

-

An overlay is unusable without its bases.

-

An overlay may act as a base to another overlay.

-

Overlays make the most sense when there is more than -one, because they create different variants of a -common base - e.g. development, QA, staging and -production environment variants.

-

These variants use the same overall resources, and vary -in relatively simple ways, e.g. the number of replicas -in a deployment, the CPU to a particular pod, the data -source used in a ConfigMap, etc.

-

One configures a cluster like this:

-
-
 kustomize build someapp/overlays/staging |\
-     kubectl apply -f -
-
- kustomize build someapp/overlays/production |\
-     kubectl apply -f -
-
-

Usage of the base is implicit - the overlay’s -kustomization points to the base.

-

See also root.

-

package

-

The word package has no meaning in kustomize, as -kustomize is not to be confused with a package -management tool in the tradition of, say, apt or -rpm.

-

patch

-

General instructions to modify a resource.

-

There are two alternative techniques with similar -power but different notation - the -strategic merge patch -and the JSON patch.

-

patchStrategicMerge

-

A patchStrategicMerge is strategic-merge-style patch (SMP).

-

An SMP looks like an incomplete YAML specification of -a k8s resource. The SMP includes TypeMeta -fields to establish the group/version/kind/name of the -resource to patch, then just enough remaining fields -to step into a nested structure to specify a new field -value, e.g. an image tag.

-

By default, an SMP replaces values. This is -usually desired when the target value is a simple -string, but may not be desired when the target -value is a list.

-

To change this -default behavior, add a directive. Recognized -directives in YAML patches are replace (the default) -and delete (see these notes).

-

Note that for custom resources, SMPs are treated as -json merge patches.

-

Fun fact - any resource file can be used as -an SMP, overwriting matching fields in another -resource with the same group/version/kind/name, -but leaving all other fields as they were.

-

TODO(monopole): add ptr to example.

-

patchJson6902

-

A patchJson6902 refers to a kubernetes resource and -a JSONPatch specifying how to change the resource.

-

A patchJson6902 can do almost everything a -patchStrategicMerge can do, but with a briefer -syntax. See this example.

-

plugin

-

A chunk of code used by kustomize, but not necessarily -compiled into kustomize, to generate and/or transform a -kubernetes resource as part of a kustomization.

-

Details here.

-

resource

-

A resource in the context of a REST-ful API is the -target object of an HTTP operation like GET, PUT or -POST. k8s offers a REST-ful API surface to interact -with clients.

-

A resource, in the context of a kustomization, is a -root relative path to a YAML or JSON file -describing a k8s API object, like a Deployment or a -ConfigMap, or it’s a path to a kustomization, or a URL -that resolves to a kustomization.

-

More generally, a resource can be any correct YAML file -that defines an object -with a kind and a metadata/name field.

-

root

-

See kustomization root.

-

sub-target / sub-application / sub-package

-

A sub-whatever is not a thing. There are only -bases and overlays.

-

target

-

The target is the argument to kustomize build, e.g.:

-
-
 kustomize build $target
-
-

$target must be a path or a url to a kustomization.

-

The target contains, or refers to, all the information -needed to create customized resources to send to the -apply operation.

-

A target can be a base or an overlay.

-

transformer

-

A transformer can modify a resource, or merely -visit it and collect information about it in the -course of a kustomize build.

-

variant

-

A variant is the outcome, in a cluster, of applying -an overlay to a base.

-

E.g., a staging and production overlay both modify -some common base to create distinct variants.

-

The staging variant is the set of resources exposed -to quality assurance testing, or to some external users -who’d like to see what the next version of production -will look like.

-

The production variant is the set of resources -exposed to production traffic, and thus may employ -deployments with a large number of replicas and higher -cpu and memory requests.

@@ -1149,7 +793,7 @@ cpu and memory requests.

-
Last modified November 4, 2020: Redirect kustomize docs to the new unified site. (0834e152) +
Last modified November 11, 2020: Remove duplicate kustomize docs content (71b76388)
diff --git a/docs/api-reference/index.html b/docs/api-reference/index.html index 045ce4bf2..da69f675e 100644 --- a/docs/api-reference/index.html +++ b/docs/api-reference/index.html @@ -728,6 +728,8 @@

API Reference

Reference for Kustomize client-side APIs
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -796,7 +798,7 @@ - diff --git a/docs/api-reference/kustomization/bases/index.html b/docs/api-reference/kustomization/bases/index.html index 59f7a5193..368ec7f44 100644 --- a/docs/api-reference/kustomization/bases/index.html +++ b/docs/api-reference/kustomization/bases/index.html @@ -748,17 +748,7 @@

bases

Add resources from a kustomization dir.
- - -
-

The bases field was deprecated in v2.1.0

- -
- -

Move entries into the resources -field. This allows bases - which are still a -central concept - to be -ordered relative to other input resources.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -814,7 +804,7 @@ ordered relative to other input resources.

- diff --git a/docs/api-reference/kustomization/commonannotations/index.html b/docs/api-reference/kustomization/commonannotations/index.html index c8a42c361..c13228029 100644 --- a/docs/api-reference/kustomization/commonannotations/index.html +++ b/docs/api-reference/kustomization/commonannotations/index.html @@ -702,17 +702,6 @@ - -
@@ -759,41 +748,8 @@

commonAnnotations

Add annotations to all resources.
-

Add annotations to all resources. If the annotation key is already present on the resource, -the value will be overridden.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-commonAnnotations:
-  oncallPager: 800-555-1212
-

Example

-

File Input

-
# kustomization.yaml
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-commonAnnotations:
-  oncallPager: 800-555-1212
-
-resources:
-- deploy.yaml
-
# deploy.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: example
-spec:
-  ...
-

Build Output

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: example
-  annotations:
-    oncallPager: 800-555-1212
-spec:
-  ...
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -848,7 +804,7 @@ the value will be overridden.

- diff --git a/docs/api-reference/kustomization/commonlabels/index.html b/docs/api-reference/kustomization/commonlabels/index.html index c837c7359..e507b4748 100644 --- a/docs/api-reference/kustomization/commonlabels/index.html +++ b/docs/api-reference/kustomization/commonlabels/index.html @@ -702,17 +702,6 @@ - -
@@ -759,84 +748,8 @@

commonLabels

Add labels and selectors to add all resources.
-

Add labels and selectors to all resources. If the label key already is present on the resource, -the value will be overridden.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

- -
-

Selectors for resources such as Deployments and Services shouldn’t be changed once the -resource has been applied to a cluster.

-

Changing commonLabels to live resources could result in failures.

- -
- -
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-commonLabels:
-  someName: someValue
-  owner: alice
-  app: bingo
-

Example

-

File Input

-
# kustomization.yaml
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-commonLabels:
-  someName: someValue
-  owner: alice
-  app: bingo
-
-resources:
-- deploy.yaml
-- service.yaml
-
# deploy.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: example
-
# service.yaml
-apiVersion: v1
-kind: Service
-metadata:
-  name: example
-

Build Output

-
apiVersion: v1
-kind: Service
-metadata:
-  labels:
-    app: bingo
-    owner: alice
-    someName: someValue
-  name: example
-spec:
-  selector:
-    app: bingo
-    owner: alice
-    someName: someValue
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app: bingo
-    owner: alice
-    someName: someValue
-  name: example
-spec:
-  selector:
-    matchLabels:
-      app: bingo
-      owner: alice
-      someName: someValue
-  template:
-    metadata:
-      labels:
-        app: bingo
-        owner: alice
-        someName: someValue
-
@@ -891,7 +804,7 @@ resource has been applied to a cluster.

- diff --git a/docs/api-reference/kustomization/components/index.html b/docs/api-reference/kustomization/components/index.html index 8afeebffe..e11439395 100644 --- a/docs/api-reference/kustomization/components/index.html +++ b/docs/api-reference/kustomization/components/index.html @@ -748,7 +748,7 @@

components

Compose kustomizations.
-

Coming soon

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -804,7 +804,7 @@ - diff --git a/docs/api-reference/kustomization/configmapgenerator/index.html b/docs/api-reference/kustomization/configmapgenerator/index.html index 88c561838..26c2458ea 100644 --- a/docs/api-reference/kustomization/configmapgenerator/index.html +++ b/docs/api-reference/kustomization/configmapgenerator/index.html @@ -748,79 +748,8 @@

configMapGenerator

Generate ConfigMap resources.
-

Each entry in this list results in the creation of -one ConfigMap resource (it’s a generator of n maps).

-

The example below creates four ConfigMaps:

-
    -
  • first, with the names and contents of the given files
  • -
  • second, with key/value as data using key/value pairs from files
  • -
  • third, also with key/value as data, directly specified using literals
  • -
  • and a fourth, which sets an annotation and label via options for that single ConfigMap
  • -
-

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.

-

Also, each entry has an options field, that has the -same subfields as the kustomization file’s generatorOptions field.

-

This options field allows one to add labels and/or -annotations to the generated instance, or to individually -disable the name suffix hash for that instance. -Labels and annotations added here will not be overwritten -by the global options associated with the kustomization -file generatorOptions field. However, due to how -booleans behave, if the global generatorOptions field -specifies disableNameSuffixHash: true, this will -trump any attempt to locally override it.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-# These labels are added to all configmaps and secrets.
-generatorOptions:
-  labels:
-    fruit: apple
-
-configMapGenerator:
-- name: my-java-server-props
-  behavior: merge
-  files:
-  - application.properties
-  - more.properties
-- name: my-java-server-env-file-vars
-  envs:
-  - my-server-env.properties
-  - more-server-props.env
-- name: my-java-server-env-vars
-  literals:
-  - JAVA_HOME=/opt/java/jdk
-  - JAVA_TOOL_OPTIONS=-agentlib:hprof
-  options:
-    disableNameSuffixHash: true
-    labels:
-      pet: dog
-- name: dashboards
-  files:
-  - mydashboard.json
-  options:
-    annotations:
-      dashboard: "1"
-    labels:
-      app.kubernetes.io/name: "app1"
-

It is also possible to -define a key -to set a name different than the filename.

-

The example below creates a ConfigMap -with the name of file as myFileName.ini -while the actual filename from which the -configmap is created is whatever.ini.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-configMapGenerator:
-- name: app-whatever
-  files:
-  - myFileName.ini=whatever.ini
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -875,7 +804,7 @@ configmap is created is whatever.ini.

- diff --git a/docs/api-reference/kustomization/crds/index.html b/docs/api-reference/kustomization/crds/index.html index 21e5b1378..6f58b6188 100644 --- a/docs/api-reference/kustomization/crds/index.html +++ b/docs/api-reference/kustomization/crds/index.html @@ -748,34 +748,8 @@

crds

Adding CRD support
-

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”,
  • -
-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-crds:
-- crds/typeA.yaml
-- crds/typeB.yaml
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -830,7 +804,7 @@ same way.

- diff --git a/docs/api-reference/kustomization/generatoroptions/index.html b/docs/api-reference/kustomization/generatoroptions/index.html index 7c582afe5..0b5729f0f 100644 --- a/docs/api-reference/kustomization/generatoroptions/index.html +++ b/docs/api-reference/kustomization/generatoroptions/index.html @@ -748,24 +748,8 @@

generatorOptions

Control behavior of ConfigMap and Secret generators.
-

Additionally, generatorOptions can be set on a per resource level within each -generator. For details on per-resource generatorOptions usage see -field-name-configMapGenerator and See field-name-secretGenerator.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-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
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -820,7 +804,7 @@ generator. For details on per-resource generatorOptions usage see - diff --git a/docs/api-reference/kustomization/images/index.html b/docs/api-reference/kustomization/images/index.html index a9143edbd..c0891971f 100644 --- a/docs/api-reference/kustomization/images/index.html +++ b/docs/api-reference/kustomization/images/index.html @@ -748,44 +748,8 @@

images

Modify the name, tags and/or digest for images.
-

Images modify the name, tags and/or digest for images without creating patches. E.g. Given this -kubernetes Deployment fragment:

-
kind: Deployment
-...
-spec:
-  template:
-    spec:
-      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:

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: 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
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -840,7 +804,7 @@ kubernetes Deployment fragment:

- diff --git a/docs/api-reference/kustomization/index.html b/docs/api-reference/kustomization/index.html index b53713492..ad3a69aca 100644 --- a/docs/api-reference/kustomization/index.html +++ b/docs/api-reference/kustomization/index.html @@ -738,6 +738,7 @@

kustomization.yaml

kustomization.yaml fields and API
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -919,7 +920,7 @@ - diff --git a/docs/api-reference/kustomization/index.xml b/docs/api-reference/kustomization/index.xml index 52c44d648..297231096 100644 --- a/docs/api-reference/kustomization/index.xml +++ b/docs/api-reference/kustomization/index.xml @@ -23,17 +23,7 @@ <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/bases/" /> - - -<div class="pageinfo pageinfo-warning"> -<p>The <code>bases</code> field was deprecated in v2.1.0</p> - -</div> - -<p>Move entries into the <a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/kustomization/resources">resources</a> -field. This allows bases - which are still a -<a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/glossary#base">central concept</a> - to be -ordered relative to other input resources.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -48,41 +38,8 @@ ordered relative to other input resources.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/commonannotations/" /> -<p>Add annotations to all resources. If the annotation key is already present on the resource, -the value will be overridden.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">commonAnnotations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">oncallPager</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">800-555-1212</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h2 id="example">Example</h2> -<h3 id="file-input">File Input</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># kustomization.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">commonAnnotations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">oncallPager</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">800-555-1212</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deploy.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># deploy.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">example</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">...</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h3 id="build-output">Build Output</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">example</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">annotations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">oncallPager</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">800-555-1212</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">...</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -96,84 +53,8 @@ the value will be overridden.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/commonlabels/" /> -<p>Add labels and selectors to all resources. If the label key already is present on the resource, -the value will be overridden.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> - -<div class="pageinfo pageinfo-warning"> -<p>Selectors for resources such as Deployments and Services shouldn&rsquo;t be changed once the -resource has been applied to a cluster.</p> -<p>Changing commonLabels to live resources could result in failures.</p> - -</div> - -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">commonLabels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h2 id="example">Example</h2> -<h3 id="file-input">File Input</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># kustomization.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">commonLabels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deploy.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">service.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># deploy.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">example</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># service.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Service</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">example</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h3 id="build-output">Build Output</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Service</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">example</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">selector</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#000">---</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">example</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">selector</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">matchLabels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">template</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">bingo</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">owner</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alice</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">someName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">someValue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> @@ -187,7 +68,7 @@ resource has been applied to a cluster.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/components/" /> -<p><em>Coming soon</em></p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -202,79 +83,8 @@ resource has been applied to a cluster.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/configmapgenerator/" /> -<p>Each entry in this list results in the creation of -one ConfigMap resource (it&rsquo;s a generator of n maps).</p> -<p>The example below creates four ConfigMaps:</p> -<ul> -<li>first, with the names and contents of the given files</li> -<li>second, with key/value as data using key/value pairs from files</li> -<li>third, also with key/value as data, directly specified using <code>literals</code></li> -<li>and a fourth, which sets an annotation and label via <code>options</code> for that single ConfigMap</li> -</ul> -<p>Each configMapGenerator item accepts a parameter of -<code>behavior: [create|replace|merge]</code>. -This allows an overlay to modify or -replace an existing configMap from the parent.</p> -<p>Also, each entry has an <code>options</code> field, that has the -same subfields as the kustomization file&rsquo;s <code>generatorOptions</code> field.</p> -<p>This <code>options</code> field allows one to add labels and/or -annotations to the generated instance, or to individually -disable the name suffix hash for that instance. -Labels and annotations added here will not be overwritten -by the global options associated with the kustomization -file <code>generatorOptions</code> field. However, due to how -booleans behave, if the global <code>generatorOptions</code> field -specifies <code>disableNameSuffixHash: true</code>, this will -trump any attempt to locally override it.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#8f5902;font-style:italic"># These labels are added to all configmaps and secrets.</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">generatorOptions</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fruit</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apple</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">configMapGenerator</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-java-server-props</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">behavior</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">merge</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">files</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">application.properties</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">more.properties</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-java-server-env-file-vars</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">envs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">my-server-env.properties</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">more-server-props.env</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-java-server-env-vars</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">literals</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">JAVA_HOME=/opt/java/jdk</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">JAVA_TOOL_OPTIONS=-agentlib:hprof</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">options</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">disableNameSuffixHash</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">pet</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">dog</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">dashboards</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">files</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">mydashboard.json</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">options</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">annotations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">dashboard</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;1&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app.kubernetes.io/name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;app1&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>It is also possible to -<a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-the-key-to-use-when-creating-a-configmap-from-a-file">define a key</a> -to set a name different than the filename.</p> -<p>The example below creates a ConfigMap -with the name of file as <code>myFileName.ini</code> -while the <em>actual</em> filename from which the -configmap is created is <code>whatever.ini</code>.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">configMapGenerator</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">app-whatever</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">files</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">myFileName.ini=whatever.ini</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -288,34 +98,8 @@ configmap is created is <code>whatever.ini</code>.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/crds/" /> -<p>Each entry in this list should be a relative path to -a file for custom resource definition (CRD).</p> -<p>The presence of this field is to allow kustomize be -aware of CRDs and apply proper -transformation for any objects in those types.</p> -<p>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.</p> -<p>The annotations can be put into openAPI definitions are:</p> -<ul> -<li>&ldquo;x-kubernetes-annotation&rdquo;: &quot;&quot;</li> -<li>&ldquo;x-kubernetes-label-selector&rdquo;: &quot;&quot;</li> -<li>&ldquo;x-kubernetes-identity&rdquo;: &quot;&quot;</li> -<li>&ldquo;x-kubernetes-object-ref-api-version&rdquo;: &ldquo;v1&rdquo;,</li> -<li>&ldquo;x-kubernetes-object-ref-kind&rdquo;: &ldquo;Secret&rdquo;,</li> -<li>&ldquo;x-kubernetes-object-ref-name-key&rdquo;: &ldquo;name&rdquo;,</li> -</ul> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">crds</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">crds/typeA.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">crds/typeB.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -329,24 +113,8 @@ same way.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/generatoroptions/" /> -<p>Additionally, generatorOptions can be set on a per resource level within each -generator. For details on per-resource generatorOptions usage see -<a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/kustomization/configmapgenerator">field-name-configMapGenerator</a> and See <a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/kustomization/secretgenerator">field-name-secretGenerator</a>.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">generatorOptions</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># labels to add to all generated resources</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kustomize.generated.resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">somevalue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># annotations to add to all generated resources</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">annotations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kustomize.generated.resource</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">somevalue</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># disableNameSuffixHash is true disables the default behavior of adding a</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># suffix to the names of generated resources that is a hash of</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the resource contents.</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">disableNameSuffixHash</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">true</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -360,44 +128,8 @@ generator. For details on per-resource generatorOptions usage see <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/images/" /> -<p>Images modify the name, tags and/or digest for images without creating patches. E.g. Given this -kubernetes Deployment fragment:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#000">...</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">template</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">containers</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">mypostgresdb</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">postgres:8</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">nginxapp</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">nginx:1.7.9</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">myapp</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-demo-app:latest</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alpine-app</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alpine:3.7</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>one can change the <code>image</code> in the following ways:</p> -<ul> -<li><code>postgres:8</code> to <code>my-registry/my-postgres:v1</code>,</li> -<li>nginx tag <code>1.7.9</code> to <code>1.8.0</code>,</li> -<li>image name <code>my-demo-app</code> to <code>my-app</code>,</li> -<li>alpine&rsquo;s tag <code>3.7</code> to a digest value</li> -</ul> -<p>all with the following <em>kustomization</em>:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">images</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">postgres</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">newName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-registry/my-postgres</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">newTag</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">nginx</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">newTag</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">1.8.0</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-demo-app</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">newName</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-app</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alpine</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">digest</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -411,11 +143,7 @@ kubernetes Deployment fragment:</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/nameprefix/" /> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">namePrefix</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">alices-</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>A deployment named <code>wordpress</code> would become <code>alices-wordpress</code>.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -430,12 +158,7 @@ kubernetes Deployment fragment:</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/namespace/" /> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">namespace</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-namespace</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>Will override the existing namespace if it is set on a resource, or add it -if it is not set on a resource.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -450,12 +173,7 @@ if it is not set on a resource.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/namesuffix/" /> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">nameSuffix</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span>-<span style="color:#000">v2</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>A deployment named <code>wordpress</code> would become <code>wordpress-v2</code>.</p> -<p><strong>Note:</strong> The suffix is appended before the content hash if the resource type is ConfigMap or Secret.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -470,114 +188,8 @@ if it is not set on a resource.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/patches/" /> -<p>Patches (also call overlays) add or override fields on resources. They are provided using the -<code>patches</code> Kustomization field.</p> -<p>The <code>patches</code> field contains a list of patches to be applied in the order they are specified.</p> -<p>Each patch may:</p> -<ul> -<li>be either a <a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/glossary#patchstrategicmerge">strategic merge</a> patch, or a <a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/glossary#patchjson6902">JSON</a> patch</li> -<li>be either a file, or an inline string</li> -<li>target a single resource or multiple resources</li> -</ul> -<p>The patch target selects resources by group, version, kind, name, namespace, labelSelector and -annotationSelector. Any resource which matches all the <strong>specified</strong> fields has the patch applied -to it (regular expressions).</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">patch.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">target</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">group</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">deploy.*</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labelSelector</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;env=dev&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">annotationSelector</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;zone=west&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">patch</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">|-</span><span style="color:#8f5902;font-style:italic"> -</span><span style="color:#8f5902;font-style:italic"> - op: replace -</span><span style="color:#8f5902;font-style:italic"> path: /some/existing/path -</span><span style="color:#8f5902;font-style:italic"> value: new value</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">target</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">MyKind</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labelSelector</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;env=dev&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>The <code>name</code> and <code>namespace</code> fields of the patch target selector are -automatically anchored regular expressions. This means that the value <code>myapp</code> -is equivalent to <code>^myapp$</code>.</p> -<p>Consider the following <code>deployment.yaml</code> common for both the examples:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">replicas</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">5</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">template</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">containers</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-container</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">registry/conatiner:latest</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h2 id="example-i">Example I</h2> -<h3 id="intent">Intent</h3> -<p>To Make the container image point to a specific version and not to the latest container in the -registry.</p> -<h3 id="file-input">File Input</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># kustomization.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deployment.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">patch.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># patch.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">template</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">containers</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-container</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">registry/conatiner:1.0.0</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h3 id="build-output">Build Output</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">replicas</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">5</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">template</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">containers</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">registry/conatiner:1.0.0</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-container</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h2 id="example-ii">Example II</h2> -<h3 id="intent-1">Intent</h3> -<p>To Make the container image point to a specific version and not to the latest container in the -registry.</p> -<h3 id="file-input-1">File Input</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># kustomization.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deployment.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">target</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">patch.json</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># patch.json</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#000;font-weight:bold">[</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>{<span style="color:#204a87;font-weight:bold">&#34;op&#34;: &#34;replace&#34;, &#34;path&#34;: &#34;/spec/template/containers/0/image&#34;, &#34;value&#34;: </span><span style="color:#4e9a06">&#34;registry/conatiner:1.0.0&#34;</span>}<span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><h3 id="build-output-1">Build Output</h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">spec</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">replicas</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#0000cf;font-weight:bold">5</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">template</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">containers</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">registry/container:1.0.0</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">the-container</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -591,55 +203,8 @@ registry.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/patchesjson6902/" /> -<p>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 <a href="https://tools.ietf.org/html/rfc6902">https://tools.ietf.org/html/rfc6902</a></p> -<p>target field points to a kubernetes object within the same kustomization -by the object&rsquo;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</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-json" data-lang="json"> <span style="color:#000;font-weight:bold">[</span> - <span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">&#34;op&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;add&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#204a87;font-weight:bold">&#34;path&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;/some/new/path&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#204a87;font-weight:bold">&#34;value&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;value&#34;</span><span style="color:#000;font-weight:bold">},</span> - <span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">&#34;op&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;replace&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#204a87;font-weight:bold">&#34;path&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;/some/existing/path&#34;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#204a87;font-weight:bold">&#34;value&#34;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#34;new value&#34;</span><span style="color:#000;font-weight:bold">}</span> - <span style="color:#000;font-weight:bold">]</span> -</code></pre></div><p>or in YAML format as</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml">- <span style="color:#204a87;font-weight:bold">op</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">add</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">/some/new/path</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">value</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">value</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">op</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">replace</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">/some/existing/path</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">value</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">new value</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patchesJson6902</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">target</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">add_init_container.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">target</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Service</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-service</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">add_service_annotation.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>The patch content can be an inline string as well:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patchesJson6902</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">target</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">patch</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">|-</span><span style="color:#8f5902;font-style:italic"> -</span><span style="color:#8f5902;font-style:italic"> - op: add -</span><span style="color:#8f5902;font-style:italic"> path: /some/new/path -</span><span style="color:#8f5902;font-style:italic"> value: value -</span><span style="color:#8f5902;font-style:italic"> - op: replace -</span><span style="color:#8f5902;font-style:italic"> path: /some/existing/path -</span><span style="color:#8f5902;font-style:italic"> value: &#34;new value&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -653,45 +218,7 @@ The content in this patch file can be either in JSON format as</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/patchesstrategicmerge/" /> -<p>Each entry in this list should be either a relative -file path or an inline content -resolving to a partial or complete resource -definition.</p> -<p>The names in these (possibly partial) resource -files must match names already loaded via the -<code>resources</code> field. These entries are used to -<em>patch</em> (modify) the known resources.</p> -<p>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.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patchesStrategicMerge</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">service_port_8888.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deployment_increase_replicas.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deployment_increase_memory.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>The patch content can be a inline string as well.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">patchesStrategicMerge</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000;font-weight:bold">|-</span><span style="color:#8f5902;font-style:italic"> -</span><span style="color:#8f5902;font-style:italic"> apiVersion: apps/v1 -</span><span style="color:#8f5902;font-style:italic"> kind: Deployment -</span><span style="color:#8f5902;font-style:italic"> metadata: -</span><span style="color:#8f5902;font-style:italic"> name: nginx -</span><span style="color:#8f5902;font-style:italic"> spec: -</span><span style="color:#8f5902;font-style:italic"> template: -</span><span style="color:#8f5902;font-style:italic"> spec: -</span><span style="color:#8f5902;font-style:italic"> containers: -</span><span style="color:#8f5902;font-style:italic"> - name: nginx -</span><span style="color:#8f5902;font-style:italic"> image: nignx:latest</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>Note that kustomize does not support more than one patch -for the same object that contain a <em>delete</em> directive. To remove -several fields / slice elements from an object create a single -patch that performs all the needed deletions.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -706,33 +233,7 @@ patch that performs all the needed deletions.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/replicas/" /> -<p>Given this kubernetes Deployment fragment:</p> -<pre><code># deployment.yaml -kind: Deployment -metadata: - name: deployment-name -spec: - replicas: 3 -</code></pre><p>one can change the number of replicas to 5 -by adding the following to your kustomization:</p> -<pre><code>apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -replicas: -- name: deployment-name - count: 5 -</code></pre><p>This field accepts a list, so many resources can -be modified at the same time.</p> -<p>As this declaration does not take in a <code>kind:</code> nor a <code>group:</code> -it will match any <code>group</code> and <code>kind</code> that has a matching name and -that is one of:</p> -<ul> -<li><code>Deployment</code></li> -<li><code>ReplicationController</code></li> -<li><code>ReplicaSet</code></li> -<li><code>StatefulSet</code></li> -</ul> -<p>For more complex use cases, revert to using a patch.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -747,24 +248,7 @@ that is one of:</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/resources/" /> -<p>Each entry in this list must be a path to a <em>file</em>, or a path (or URL) referring to another -kustomization <em>directory</em>, e.g.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">myNamespace.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">sub-dir/some-deployment.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">../../commonbase</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">github.com/kubernetes-sigs/kustomize/examples/multibases?ref=v1.0.6</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">deployment.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#000">github.com/kubernets-sigs/kustomize/examples/helloWorld?ref=test-branch</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>Resources will be read and processed in depth-first order.</p> -<p>Files should contain k8s resources in YAML form. A file may contain multiple resources separated by -the document marker <code>---</code>. File paths should be specified <em>relative</em> to the directory holding the -kustomization file containing the <code>resources</code> field.</p> -<p>Directory specification can be relative, absolute, or part of a URL. URL specifications should -follow the <a href="https://github.com/hashicorp/go-getter#url-format">hashicorp URL</a> format. The directory must contain a <code>kustomization.yaml</code> file.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -779,39 +263,8 @@ follow the <a href="https://github.com/hashicorp/go-getter#url-format" <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/secretegenerator/" /> -<p>Each entry in the argument list results in the creation of one Secret resource (it&rsquo;s a generator of N secrets).</p> -<p>This works like the <a href="https://kubernetes-sigs.github.io/kustomize/kustomize/api-reference/kustomization/configmapgenerator">configMapGenerator</a>.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">secretGenerator</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">app-tls</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">files</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">secret/tls.cert</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">secret/tls.key</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;kubernetes.io/tls&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">app-tls-namespaced</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># you can define a namespace to generate</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># a secret in, defaults to: &#34;default&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">namespace</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">files</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">tls.crt=catsecret/tls.cert</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">tls.key=secret/tls.key</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;kubernetes.io/tls&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">env_file_secret</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">envs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">env.txt</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Opaque</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">secret-with-annotation</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">files</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">app-config.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Opaque</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">options</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">annotations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app_config</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;true&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">labels</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">app.kubernetes.io/name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;app2&#34;</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> + @@ -825,96 +278,7 @@ follow the <a href="https://github.com/hashicorp/go-getter#url-format" <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/references/kustomize/vars/" /> -<p>Vars are used to capture text from one resource&rsquo;s field -and insert that text elsewhere - a reflection feature.</p> -<p>For example, suppose one specifies the name of a k8s Service -object in a container&rsquo;s command line, and the name of a -k8s Secret object in a container&rsquo;s environment variable, -so that the following would work:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># consider it is a deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">containers</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">image</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">myimage</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">command</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;start&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;--host&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;$(MY_SERVICE_NAME)&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">env</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">SECRET_TOKEN</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">value</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">$(SOME_SECRET_NAME)</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">livenessProbe</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">httpGet</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">/healthz</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># it enables the parser to lookup this field</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">port</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">$(APP_PORT)</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>To do so, add an entry to <code>vars:</code> as follows:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">kustomize.config.k8s.io/v1beta1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Kustomization</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">configMapGenerator</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-config</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">literals</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">MY_PORT=8080</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">vars</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">SOME_SECRET_NAME</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">objref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Secret</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-secret</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">MY_SERVICE_NAME</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">objref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Service</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-service</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fieldref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fieldpath</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">metadata.name</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ANOTHER_DEPLOYMENTS_POD_RESTART_POLICY</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">objref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">apps/v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fieldref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fieldpath</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">spec.template.spec.restartPolicy</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#8f5902;font-style:italic"># it exports a value as `APP_PORT` </span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#8f5902;font-style:italic"># from `ConfigMap` named `my-config`</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#8f5902;font-style:italic"># in `data.MY_PORT`</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">APP_PORT</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">objref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ConfigMap</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">my-config</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">v1</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fieldref</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">fieldpath</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">data.MY_PORT</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">configurations</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">lookup.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>Define the consuming resource(s) and the field(s) inside need to lookup.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#8f5902;font-style:italic"># lookup.yaml</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">varReference</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># the path of field that you want the parser to lookups and replace.</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">path</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">spec/template/spec/containers/livenessProbe/httpGet/port</span><span style="color:#f8f8f8;text-decoration:underline"> -</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Deployment</span><span style="color:#f8f8f8;text-decoration:underline"> -</span></code></pre></div><p>A var is a tuple of variable name, object -reference and field reference within that object. -That&rsquo;s where the text is found.</p> -<p>The field reference is optional; it defaults to -<code>metadata.name</code>, a normal default, since kustomize -is used to generate or modify the names of -resources.</p> -<p>At time of writing, only string type fields are -supported. No ints, bools, arrays etc. It&rsquo;s not -possible to, say, extract the name of the image in -container number 2 of some pod template.</p> -<p>A variable reference, i.e. the string &lsquo;$(FOO)&rsquo;, -can only be placed in particular fields of -particular objects as specified by kustomize&rsquo;s -configuration data.</p> -<p>The default config data for vars is at <a href="https://github.com/kubernetes-sigs/kustomize/blob/master/api/konfig/builtinpluginconsts/varreference.go">/api/konfig/builtinpluginconsts/varreference.go</a> -Long story short, the default targets are all -container command args and env value fields.</p> -<p>Vars should <em>not</em> 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.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> diff --git a/docs/api-reference/kustomization/nameprefix/index.html b/docs/api-reference/kustomization/nameprefix/index.html index 46c396141..3bbc04262 100644 --- a/docs/api-reference/kustomization/nameprefix/index.html +++ b/docs/api-reference/kustomization/nameprefix/index.html @@ -748,11 +748,7 @@

namePrefix

Prepends the value to the names of all resources and references.
-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-namePrefix: alices-
-

A deployment named wordpress would become alices-wordpress.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -808,7 +804,7 @@ - diff --git a/docs/api-reference/kustomization/namespace/index.html b/docs/api-reference/kustomization/namespace/index.html index 2521da0f6..4362e1e68 100644 --- a/docs/api-reference/kustomization/namespace/index.html +++ b/docs/api-reference/kustomization/namespace/index.html @@ -748,12 +748,7 @@

namespace

Adds namespace to all resources.
-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-namespace: my-namespace
-

Will override the existing namespace if it is set on a resource, or add it -if it is not set on a resource.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -809,7 +804,7 @@ if it is not set on a resource.

- diff --git a/docs/api-reference/kustomization/namesuffix/index.html b/docs/api-reference/kustomization/namesuffix/index.html index 371595d6e..d04df9000 100644 --- a/docs/api-reference/kustomization/namesuffix/index.html +++ b/docs/api-reference/kustomization/namesuffix/index.html @@ -748,12 +748,7 @@

nameSuffix

Appends the value to the names of all resources and references.
-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-nameSuffix: -v2
-

A deployment named wordpress would become wordpress-v2.

-

Note: The suffix is appended before the content hash if the resource type is ConfigMap or Secret.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -809,7 +804,7 @@ - diff --git a/docs/api-reference/kustomization/patches/index.html b/docs/api-reference/kustomization/patches/index.html index 68993b801..b6eaec918 100644 --- a/docs/api-reference/kustomization/patches/index.html +++ b/docs/api-reference/kustomization/patches/index.html @@ -702,25 +702,6 @@ - -
@@ -767,114 +748,8 @@

patches

Patch resources
-

Patches (also call overlays) add or override fields on resources. They are provided using the -patches Kustomization field.

-

The patches field contains a list of patches to be applied in the order they are specified.

-

Each patch may:

-
    -
  • be either a strategic merge patch, or a JSON patch
  • -
  • be either a file, or an inline string
  • -
  • target a single resource or multiple resources
  • -
-

The patch target selects resources by group, version, kind, name, namespace, labelSelector and -annotationSelector. Any resource which matches all the specified fields has the patch applied -to it (regular expressions).

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-patches:
-- path: patch.yaml
-  target:
-    group: apps
-    version: v1
-    kind: Deployment
-    name: deploy.*
-    labelSelector: "env=dev"
-    annotationSelector: "zone=west"
-- patch: |-
-    - op: replace
-      path: /some/existing/path
-      value: new value    
-  target:
-    kind: MyKind
-    labelSelector: "env=dev"
-

The name and namespace fields of the patch target selector are -automatically anchored regular expressions. This means that the value myapp -is equivalent to ^myapp$.

-

Consider the following deployment.yaml common for both the examples:

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: the-deployment
-spec:
-  replicas: 5
-  template:
-    containers:
-      - name: the-container
-        image: registry/conatiner:latest
-

Example I

-

Intent

-

To Make the container image point to a specific version and not to the latest container in the -registry.

-

File Input

-
# kustomization.yaml
-resources:
-- deployment.yaml
-
-patches:
-- path: patch.yaml
-
# patch.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: the-deployment
-spec:
-  template:
-    containers:
-      - name: the-container
-        image: registry/conatiner:1.0.0
-

Build Output

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: the-deployment
-spec:
-  replicas: 5
-  template:
-    containers:
-    - image: registry/conatiner:1.0.0
-      name: the-container
-

Example II

-

Intent

-

To Make the container image point to a specific version and not to the latest container in the -registry.

-

File Input

-
# kustomization.yaml
-resources:
-- deployment.yaml
-
-patches:
-- target:
-    kind: Deployment
-    name: the-deployment
-  path: patch.json
-
# patch.json
-[
-   {"op": "replace", "path": "/spec/template/containers/0/image", "value": "registry/conatiner:1.0.0"}
-]
-
-

Build Output

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: the-deployment
-spec:
-  replicas: 5
-  template:
-    containers:
-    - image: registry/container:1.0.0
-      name: the-container
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -929,7 +804,7 @@ registry.

- diff --git a/docs/api-reference/kustomization/patchesjson6902/index.html b/docs/api-reference/kustomization/patchesjson6902/index.html index 52a511bbb..62cd9ad31 100644 --- a/docs/api-reference/kustomization/patchesjson6902/index.html +++ b/docs/api-reference/kustomization/patchesjson6902/index.html @@ -748,55 +748,8 @@

patchesJson6902

Patch resources using the json 6902 standard
-

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
-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-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
-

The patch content can be an inline string as well:

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-patchesJson6902:
-- target:
-    version: v1
-    kind: Deployment
-    name: my-deployment
-  patch: |-
-    - op: add
-      path: /some/new/path
-      value: value
-    - op: replace
-      path: /some/existing/path
-      value: "new value"    
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -851,7 +804,7 @@ The content in this patch file can be either in JSON format as

- diff --git a/docs/api-reference/kustomization/patchesstrategicmerge/index.html b/docs/api-reference/kustomization/patchesstrategicmerge/index.html index 57bd341eb..c1b2c7a3e 100644 --- a/docs/api-reference/kustomization/patchesstrategicmerge/index.html +++ b/docs/api-reference/kustomization/patchesstrategicmerge/index.html @@ -748,45 +748,7 @@

patchesStrategicMerge

Patch resources using the strategic merge patch standard.
-

Each entry in this list should be either a relative -file path or an inline content -resolving to a partial or complete resource -definition.

-

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.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-patchesStrategicMerge:
-- service_port_8888.yaml
-- deployment_increase_replicas.yaml
-- deployment_increase_memory.yaml
-

The patch content can be a inline string as well.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-patchesStrategicMerge:
-- |-
-  apiVersion: apps/v1
-  kind: Deployment
-  metadata:
-    name: nginx
-  spec:
-    template:
-      spec:
-        containers:
-          - name: nginx
-            image: nignx:latest  
-

Note that kustomize does not support more than one patch -for the same object that contain a delete directive. To remove -several fields / slice elements from an object create a single -patch that performs all the needed deletions.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -842,7 +804,7 @@ patch that performs all the needed deletions.

- diff --git a/docs/api-reference/kustomization/replicas/index.html b/docs/api-reference/kustomization/replicas/index.html index e69225b84..da1d6d8cf 100644 --- a/docs/api-reference/kustomization/replicas/index.html +++ b/docs/api-reference/kustomization/replicas/index.html @@ -748,33 +748,7 @@

replicas

Change the number of replicas for a resource.
-

Given this kubernetes Deployment fragment:

-
# deployment.yaml
-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:

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-replicas:
-- name: deployment-name
-  count: 5
-

This field accepts a list, so many resources can -be modified at the same time.

-

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.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -830,7 +804,7 @@ that is one of:

- diff --git a/docs/api-reference/kustomization/resources/index.html b/docs/api-reference/kustomization/resources/index.html index b62e5323f..a34a12be5 100644 --- a/docs/api-reference/kustomization/resources/index.html +++ b/docs/api-reference/kustomization/resources/index.html @@ -748,24 +748,7 @@

resources

Resources to include.
-

Each entry in this list must be a path to a file, or a path (or URL) referring to another -kustomization directory, e.g.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-resources:
-- 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.

-

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.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -821,7 +804,7 @@ follow the hashicorp - diff --git a/docs/api-reference/kustomization/secretegenerator/index.html b/docs/api-reference/kustomization/secretegenerator/index.html index 92f3925dd..03d8c0396 100644 --- a/docs/api-reference/kustomization/secretegenerator/index.html +++ b/docs/api-reference/kustomization/secretegenerator/index.html @@ -748,39 +748,8 @@

secretGenerator

Generate Secret resources.
-

Each entry in the argument list results in the creation of one Secret resource (it’s a generator of N secrets).

-

This works like the configMapGenerator.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-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
-  # a 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
-- name: secret-with-annotation
-  files:
-  - app-config.yaml
-  type: Opaque
-  options:
-    annotations:
-      app_config: "true"
-    labels:
-      app.kubernetes.io/name: "app2"
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -835,7 +804,7 @@ - diff --git a/docs/api-reference/kustomization/vars/index.html b/docs/api-reference/kustomization/vars/index.html index 0fec88626..0f1a12ddb 100644 --- a/docs/api-reference/kustomization/vars/index.html +++ b/docs/api-reference/kustomization/vars/index.html @@ -748,96 +748,7 @@

vars

Substitute name references.
-

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:

-
# consider it is a deployment
-containers:
-  - image: myimage
-    command: ["start", "--host", "$(MY_SERVICE_NAME)"]
-    env:
-    - name: SECRET_TOKEN
-      value: $(SOME_SECRET_NAME)
-    livenessProbe:
-       httpGet:
-         path: /healthz
-         # it enables the parser to lookup this field
-         port: $(APP_PORT)
-

To do so, add an entry to vars: as follows:

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-configMapGenerator:
-- name: my-config
-  literals:
-  - MY_PORT=8080
-
-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
-# it exports a value as `APP_PORT` 
-# from `ConfigMap` named `my-config`
-# in `data.MY_PORT`
-- name: APP_PORT
-  objref:
-    kind: ConfigMap
-    name: my-config
-    apiVersion: v1
-  fieldref:
-    fieldpath: data.MY_PORT
-    
-configurations:
-  - lookup.yaml
-

Define the consuming resource(s) and the field(s) inside need to lookup.

-
# lookup.yaml
-varReference:
-  # the path of field that you want the parser to lookups and replace.
-  - path: spec/template/spec/containers/livenessProbe/httpGet/port
-    kind: Deployment
-

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 /api/konfig/builtinpluginconsts/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.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -893,7 +804,7 @@ in the Deployment.

- diff --git a/docs/contributing/bugs/index.html b/docs/contributing/bugs/index.html index 930df4226..c08782e83 100644 --- a/docs/contributing/bugs/index.html +++ b/docs/contributing/bugs/index.html @@ -439,39 +439,7 @@

Filing Bugs

How to file bugs and fix Kustomize bugs
-

File issues as desired, but if you’ve found a problem -with how kustomize build works, please report

-
    -
  • the output of kustomize version,
  • -
  • the input (the content of kustomization.yaml -and any files it refers to),
  • -
  • the expected YAML output.
  • -
-

If you have go installed

-

kustomize has a simple test harness in the krusty -package for specifying a kustomization’s input and the -expected output.

-

Copy one of those tests, e.g. this reusable custom -transformer test, to a new test file in the -krusty package.

-

Insert the inputs you want to use, and run it as -you’d run the reusable custom transformer test:

-
(cd api; go test -run TestReusableCustomTransformers ./krusty)
-

The output will demonstrate the bug or missing feature.

-

Record this output in the test file in a call to -AssertActualEqualsExpected, per all the other tests -in the krusty package. This makes the test pass, -albeit with output demonstrating behavior you -presumably want to change.

-

Send the new test in a PR, along with commentary (in -the test) on what you’d prefer to see.

-

The person who fixes the bug then has a clear bug -reproduction and a test to modify when the bug is -fixed.

-

Any bug fix first requires a test demonstrating the bug -(so we have permanent regression coverage), so if the -bug reporter does this, it saves time and avoids -misunderstandings.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -501,7 +469,7 @@ misunderstandings.

- diff --git a/docs/contributing/community/index.html b/docs/contributing/community/index.html index 9aeb39bc9..a89a396f9 100644 --- a/docs/contributing/community/index.html +++ b/docs/contributing/community/index.html @@ -439,14 +439,7 @@

Community Engagment

Joining SIG-CLI and the Kubernetes community
-

Kustomize is a sub project of the Kubernetes CLI special interest group and follows the Kubernetes -project contributor roles.

-

If you are interested in contributing towards Kustomize or getting more involved with the community:

- +

Moved to https://github.com/kubernetes-sigs/cli-experimental

diff --git a/docs/contributing/docs/index.html b/docs/contributing/docs/index.html index 30adf8c91..ff8d4519e 100644 --- a/docs/contributing/docs/index.html +++ b/docs/contributing/docs/index.html @@ -403,20 +403,6 @@ - -
@@ -453,71 +439,7 @@

Writing Docs

How to make Kustomize docs contributions
-

Kustomize uses Docsy for the site, and was -forked from the docsy-example

-

Prerequisites

-
    -
  • Install hugo
  • -
  • Clone kustomize -
      -
    • git clone git@github.com:kubernetes-sigs/kustomize && cd kustomize/
    • -
    -
  • -
-

Development

-

The doc input files are in the site directory. The site can be hosted locally using -hugo serve.

-
cd site/
-hugo serve
-
...
-Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
-Web Server is available at http://localhost:1313/kustomize/ (bind address 127.0.0.1)
-

Publishing

-

Hugo compiles the files under site Hugo into html which it puts in the docs folder:

-
cd site/
-hugo
-
                   | EN  
--------------------+-----
-  Pages            | 99  
-  Paginator pages  |  0  
-  Non-page files   |  0  
-  Static files     | 47  
-  Processed images |  0  
-  Aliases          |  2  
-  Sitemaps         |  1  
-  Cleaned          |  0  
-

Add the site/ and docs/ folders to a commit, then create a PR.

-

Publishing docs to your kustomize fork

-

It is possible to have the kustomize docs published to your forks github pages.

-

Setup GitHub Pages for the fork

-
    -
  1. Go to the forked repo’s Settings tab - -
  2. -
  3. Go to the GitHub Pages section
  4. -
  5. Set the source to master branch /docs folder
  6. -
-

Publish to the fork’s GitHub Pages

- - -
-

Changes must be pushed to the fork’s master branch to be served as the fork’s GitHub Page.

- -
- -
    -
  1. Make a change to a file under site/content
  2. -
  3. Run hugo from the site/ directory
  4. -
  5. Add the site and docs directories to the master branch
  6. -
  7. Commit and push the changes to the remote fork’s master branch
  8. -
  9. After a few minutes, the docs should be served from the fork’s GitHub Page - -
  10. -
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -547,7 +469,7 @@ hugo - diff --git a/docs/contributing/features/index.html b/docs/contributing/features/index.html index 70d579f39..72313cd67 100644 --- a/docs/contributing/features/index.html +++ b/docs/contributing/features/index.html @@ -439,39 +439,7 @@

Contributing Features

How to contribute features
-

Following is the process for proposing a new Kustomize feature:

-
    -
  1. Check the eschewed feature list to see if the feature has already been proposed
  2. -
  3. File an issue describing the desired feature -
      -
    • label it kind/feature
    • -
    • the motivation for the feature
    • -
    • example of how you would accomplish the motivating task without the feature
    • -
    • example of how you would accomplish the motivating task with the feature
    • -
    -
  4. -
  5. Email the sig-cli mailing list with the issue
  6. -
  7. Present the issue at sig-cli bi-weekly meeting on Zoom -
      -
    • add it to the meeting agenda doc
    • -
    • be present to discuss the feature
    • -
    • response may be – move forward with a PoC, not to move forward, defer and come back later, -or more information is needed.
    • -
    -
  8. -
  9. Address the feedback on the issue -
      -
    • Possibly write a KEP for tracking the feature
    • -
    -
  10. -
  11. Implement the feature and send a PR -
      -
    • Add table-driven tests
    • -
    • Expect comments on the PR within 2 weeks
    • -
    -
  12. -
  13. Kustomize team will release the kustomize api and kustomize modules
  14. -
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -501,7 +469,7 @@ or more information is needed. - diff --git a/docs/contributing/howitworks/index.html b/docs/contributing/howitworks/index.html index 81678b12d..c010728c4 100644 --- a/docs/contributing/howitworks/index.html +++ b/docs/contributing/howitworks/index.html @@ -439,100 +439,7 @@

Writing Code

How to modify Kustomize
- - -
-

To build kustomize using the locally modified modules, replace statements must be added to -the kustomize/go.mod.

-

e.g. if code in api was modified, a replace statement would need to be added for the -kustomize/api module.

- -
- -

Call stack when running kustomize build, with links to code.

-

Run build

- -

Make resource map

- +

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -562,7 +469,7 @@ the kustomize/go.mod.

- diff --git a/docs/contributing/mac/index.html b/docs/contributing/mac/index.html index d94363298..60e256f2d 100644 --- a/docs/contributing/mac/index.html +++ b/docs/contributing/mac/index.html @@ -403,19 +403,6 @@ - -
@@ -452,22 +439,7 @@

MacOS Dev Guide

How to develop on MacOS
-

First install the tools to build and run tests

-

Install go 1.13

-

Instructions

-

Add go to your PATH

-

Install kubeval

-

Instructions

-
go get github.com/instrumenta/kubeval
-

Add kubeval to your PATH

-

Install gnu tools

-

Instructions

-
brew install coreutils wget gnu-sed tree
-

Add the new tools to your PATH

-

Make everything

-

Verify your install by running make:

-
make
-

Be default, this runs all tests needed to qualify a pull request.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -497,7 +469,7 @@ - diff --git a/docs/contributing/windows/index.html b/docs/contributing/windows/index.html index 20c789724..94ad771d2 100644 --- a/docs/contributing/windows/index.html +++ b/docs/contributing/windows/index.html @@ -403,16 +403,6 @@ - -
@@ -449,83 +439,7 @@

Windows Dev Guide

How to develop on Windows
-

This is the PowerShell script to run all go tests for Kustomize on a windows based platform which mimics /build/pre-commit.sh

-

Pre-Reqs

-
    -
  • PowerShell installed -
      -
    • PowerShell Core is supported
    • -
    -
  • -
  • go installed
  • -
  • golangci-lint installed
  • -
  • mdrip installed
  • -
-

This script should output to the current console and return an exit code if all tests are successful(0) or any failed(1).

-

If you are tryin to run these tests locally you can follow these instructions

-

Assume:

-
    -
  • Running a stock Windows 10 system
  • -
  • Local Admin rights.
  • -
  • You can open PowerShell as administrator
  • -
  • You should be knowledgeable enough to pull source for packages into your GO src directory -
      -
    • Yes, this means you also need to know a bit about git usually
    • -
    -
  • -
-

Step 1 - Install Go

-
    -
  • Install Go - please use the msi -
      -
    • If you use chocolatey - it’s using the zip not msi and assumptions on where go is located are made for you.
    • -
    -
  • -
-

Step 2 - Install Go Packages

-
    -
  • Open new PowerShell Administrative window -
      -
    • Install golangci-lint -
        -
      • go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
      • -
      -
    • -
    • Install mdrip -
        -
      • go get github.com/monopole/mdrip
      • -
      -
    • -
    -
  • -
-

You should now be able to issue these commands and see comparable responses

-
C:\...> golangci-lint --help
-Smart, fast linters runner. Run it in cloud for every GitHub pull request on https://golangci.com
-...
-
-C:\...> mdrip --help
-Usage:  C:\_go\bin\mdrip.exe {fileName}...
-...
-

Step 3 - Get Source and Test

-
    -
  • In your GoRoot src -
      -
    • Example: C:\_go\src
    • -
    -
  • -
  • Navigate to the Kustomize travis directory -
      -
    • Example: C:\_go\src\sigs.k8s.io\kustomize\scripts
    • -
    -
  • -
  • Now Execute: -
      -
    • .\Invoke-PreCommit.ps1
    • -
    -
  • -
-

This should run all pre-commit tests thus defined in the script.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -555,7 +469,7 @@ Usage: C:\_go\bin\mdrip.exe {fileName}... - diff --git a/docs/en/sitemap.xml b/docs/en/sitemap.xml index c86199fad..a949e15ea 100644 --- a/docs/en/sitemap.xml +++ b/docs/en/sitemap.xml @@ -4,7 +4,7 @@ https://kubernetes-sigs.github.io/kustomize/guides/bespoke/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/installation/source/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/guides/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/guides/offtheshelf/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/installation/binaries/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/installation/homebrew/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/installation/chocolatey/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/bugs/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/community/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/installation/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/blog/releases/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/features/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/docs/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/howitworks/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/mac/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/contributing/windows/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/guides/plugins/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/faq/eschewedfeatures/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/glossary/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/faq/versioningpolicy/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/bases/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/blog/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/build/ - 2020-09-05T11:36:49-04:00 - - https://kubernetes-sigs.github.io/kustomize/guides/plugins/builtins/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/cfg/ - 2020-09-05T11:36:49-04:00 - - - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/ - 2020-09-05T11:36:49-04:00 - - https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/commonannotations/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/commonlabels/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/components/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/configmapgenerator/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/crds/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/create/ - 2020-09-05T11:36:49-04:00 - - - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/edit/ - 2020-09-05T11:36:49-04:00 - - https://kubernetes-sigs.github.io/kustomize/guides/plugins/execpluginguidedexample/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/faq/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/fn/ - 2020-09-05T11:36:49-04:00 - - https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/generatoroptions/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/guides/plugins/goplugincaveats/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/guides/plugins/gopluginguidedexample/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/help/ - 2020-09-05T11:36:49-04:00 - - https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/images/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/install-completion/ - 2020-09-05T11:36:49-04:00 - - https://kubernetes-sigs.github.io/kustomize/ 2020-07-16T12:57:18-07:00 @@ -749,17 +709,12 @@ https://kubernetes-sigs.github.io/kustomize/guides/components/ - 2020-11-04T11:15:40-08:00 - - - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/live/ - 2020-09-05T11:36:49-04:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/nameprefix/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/namespace/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/namesuffix/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/patches/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/patchesjson6902/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/patchesstrategicmerge/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/replicas/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/resources/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/secretegenerator/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 https://kubernetes-sigs.github.io/kustomize/api-reference/kustomization/vars/ - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00 - - https://kubernetes-sigs.github.io/kustomize/guides/cmd/version/ - 2020-09-05T11:36:49-04:00 - - diff --git a/docs/faq/eschewedfeatures/index.html b/docs/faq/eschewedfeatures/index.html index 3eeadb829..2fb5ad0d8 100644 --- a/docs/faq/eschewedfeatures/index.html +++ b/docs/faq/eschewedfeatures/index.html @@ -271,15 +271,6 @@ - -
@@ -316,117 +307,7 @@

Eschewed Features

Eschewed Features
-

The maintainers established this list to -place bounds on the kustomize feature -set. The bounds can be changed with -a consensus on the risks.

-

For a bigger picture about why kustomize -does some things and not others, see the -glossary entry for DAM.

-

Removal directives

-

kustomize supports configurations that can be reasoned about as -compositions or mixins - concepts that are widely accepted as -a best practice in various programming languages.

-

To this end, kustomize offers various addition directives. -One may add labels, annotations, patches, resources, bases, etc. -Corresponding removal directives are not offered.

-

Removal semantics would introduce many possibilities for -inconsistency, and the need to add code to detect, report and -reject it. It would also allow, and possibly encourage, -unnecessarily complex configuration layouts.

-

When faced with a situation where removal is desirable, it’s -always possible to remove things from a base like labels and -annotations, and/or split multi-resource manifests into individual -resource files - then add things back as desired via the -kustomization.

-

If the underlying base is outside of one’s control, an OTS -workflow is the recommended best practice. Fork the base, remove -what you don’t want and commit it to your private fork, then use -kustomize on your fork. As often as desired, use git rebase to -capture improvements from the upstream base.

-

Unstructured edits

-

Structured edits are changes controlled by -knowledge of the k8s API, and YAML or JSON syntax.

-

Most edits performed by kustomize can be expressed as -JSON patches or SMP patches. -Those can be verbose, so common patches, -like adding labels or annotatations, get dedicated -transformer plugins - LabelTransformer, -AnnotationsTransformer, etc. -These accept relatively simple YAML configuration -allowing easy targeting of any number of resources.

-

Another class of edits take data from one specific -object’s field and use it in another (e.g. a service -object’s name found and copied into a container’s -command line). These reflection-style edits -are called replacements.

-

The above edits create valid output given valid input, -and can provide syntactically and semantically -informed error messages if inputs are invalid.

-

Unstructured edits, edits that don’t limit -themselves to a syntax or object structure, -come in many forms. A common one in the -configuration domain is the template or -parameterization approach.

-

In this technique, the source -material is sprinkled with strings of the -form ${VAR}. A scanner replaces them -with a value taken from a map using VAR -as the map key. It’s trivial to implement.

-

kustomize eschews parameterization, because

-
    -
  • The source yaml gets polluted with $VARs -and can no longed be applied as is -to the cluster (it must be processed).
  • -
  • The source material is no longer structured, -making it unusable with any YAML processor. -It’s no longer data, it’s now logic that -must be compiled.
  • -
  • Errors in the output are disconnected from -the edit that caused it.
  • -
  • The input becomes unintelligible as the project -scales in any number of dimensions (resource -count, cluster count, environment count, etc.)
  • -
-

Kustomizations are meant to be sharable and stackable. -Imagine tracing down a problem rooted in a -clever set of stacked regexp replacements -performed by various overlays on some remote base. -We’ve used such systems, and never want to again.

-

Other tools (sed, jinja, erb, envsubst, kafka, helm, ksonnet, -etc.) provide varying degrees of unstructured editting -and/or embedded languages, and can be used instead -of, or in a pipe with, kustomize. If you want to -go all-in on configuration as a language, consider cue.

-

kustomize is going to stick to YAML in / YAML out.

-

Build-time side effects from CLI args or env variables

-

kustomize supports the best practice of storing one’s -entire configuration in a version control system.

-

Changing kustomize build configuration output as a result -of additional arguments or flags to build, or by -consulting shell environment variable values in build -code, would frustrate that goal.

-

kustomize insteads offers kustomization file edit -commands. Like any shell command, they can accept -environment variable arguments.

-

For example, to set the tag used on an image to match an -environment variable, run

-
kustomize edit set image nginx:$MY_NGINX_VERSION
-

as part of some encapsulating work flow executed before -kustomize build.

-

Globs in kustomization files

-

kustomize supports the best practice of storing one’s -entire configuration in a version control system.

-

Globbing the local file system for files not explicitly -declared in the kustomization file at kustomize build time -would violate that goal.

-

Allowing globbing in a kustomization file would also introduce -the same problems as allowing globbing in java import -declarations or BUILD/Makefile dependency rules.

-

kustomize will instead provide kustomization file editting -commands that accept globbed arguments, expand them at edit -time relative to the local file system, and store the resulting -explicit names into the kustomization file.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -446,7 +327,7 @@ explicit names into the kustomization file.

- diff --git a/docs/faq/index.html b/docs/faq/index.html index 76cf3361a..f7f489f35 100644 --- a/docs/faq/index.html +++ b/docs/faq/index.html @@ -268,14 +268,6 @@ - -
@@ -302,59 +294,7 @@

FAQ

-

kubectl doesn’t have the latest kustomize, when will it be updated?

-

TLDR: This is blocked on either moving kubectl into its own repo, or changing its dependencies. ETA k8s ~1.20.

-

The adoption of go modules in the kubernetes/kubernetes repo broke the update process for kustomize. -This is due to the kustomize libraries depending on the kubernetes apimachinery libraries, which are -published out of the kubernetes staging directory.

-

2 pieces of work are underway which will allow kustomize to be updated in kubectl:

-
    -
  • migrating kubectl out of kubernetes/kubernetes (expected Kubernetes ~1.20)
  • -
  • migrating kustomize off of the apimachinery libraries (expected Kuberntes ~1.20) - -
  • -
-

Once either of these issues is resolved we will then update kubectl with the latest kustomize version.

-

security: file ‘foo’ is not in or below ‘bar’

-

v2.0 added a security check that prevents -kustomizations from reading files outside their own -directory root.

-

This was meant to help protect the person inclined to -download kustomization directories from the web and use -them without inspection to control their production -cluster -(see #693, -#700, -#995 and -#998)

-

Resources (including configmap and secret generators) -can still be shared via the recommended best practice -of placing them in a directory with their own -kustomization file, and referring to this directory as a -base from any kustomization that -wants to use it. This encourages modularity and -relocatability.

-

To disable this, use v3, and the load_restrictor flag:

-
kustomize build --load_restrictor none $target
-

Some field is not transformed by kustomize

-

Example: #1319, #1322, #1347 and etc.

-

The fields transformed by kustomize is configured explicitly in defaultconfig. The configuration itself can be customized by including configurations in kustomization.yaml, e.g.

-
apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-configurations:
-- kustomizeconfig.yaml
-

The configuration directive allows customization of the following transformers:

-
commonAnnotations: []
-commonLabels: []
-nameprefix: []
-namespace: []
-varreference: []
-namereference: []
-images: []
-replicas: []
-

To persist the changes to default configuration, submit a PR like #1338, #1348 and etc.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -388,7 +328,7 @@ relocatability.

- diff --git a/docs/faq/versioningpolicy/index.html b/docs/faq/versioningpolicy/index.html index e5d23fafb..9efbc8847 100644 --- a/docs/faq/versioningpolicy/index.html +++ b/docs/faq/versioningpolicy/index.html @@ -21,27 +21,21 @@ Versioning Policy | Kustomize - + - + - - - + + + - + @@ -279,35 +273,6 @@ - -
@@ -344,213 +309,11 @@

Versioning Policy

-

Running kustomize means one is running a -particular version of a program (a CLI), using a -particular version of underlying packages (a Go -API), and reading a particular version of a -kustomization file.

-
-

If you’re having trouble with go get, please -read Go API Versioning -and be patient.

-
-

CLI Program Versioning

-

The command kustomize version prints a three -field version tag (e.g. v3.0.0) that aspires to -semantic versioning.

-

This notion of semver applies only to the CLI; -the command names, their arguments and their flags.

-

The major version changes when some backward -incompatibility appears in how the commands -behave.

-

Installation

-

See the installation docs.

-

Go API Versioning

-

The public methods in the public packages -of module sigs.k8s.io/kustomize/api constitute -the kustomize Go API.

-

Version sigs.k8s.io/kustomize/v3 and earlier

-

In kustomize/v3 (and preceding major versions), the -kustomize program and the API live the same Go -module at sigs.k8s.io/kustomize, at import path -sigs.k8s.io/kustomize/v3.

-

This has been fine for the CLI, but it presents a -problem for the Go API.

-

The process around Go modules, in particular the -notion of minimal version selection, demands -that the module respect semver.

-

Almost all the code in module -sigs.k8s.io/kustomize/v3 is exposed (not in a -directory named internal). Even a minor -refactor changing a method name or argument type -in some deeply buried (but still public) method is -a backward incompatible change. As a result, Go -API semver hasn’t been followed. This was a mistake.

-

Some options are

-
    -
  • -

    continue to ignore Go API semver and stick to -CLI semver (eliminating the usefullness of -minimal version selection),

    -
  • -
  • -

    obey semver, and increment the module’s major -version number with every release (drastically -reducing the usefullness of minimal version -selection - since virtually all releases will -be major),

    -
  • -
  • -

    slow down change in the huge API in favor of -stability, yet somehow continue to deliver -features,

    -
  • -
  • -

    drastically reduce the API surface, stabilize on -semver there, and refactor as needed inside -internal.

    -
  • -
-

The last option seems the most appealing.

-

The first stable API version is coming

-

The first stable API version will launch -as the Go module

-
sigs.k8s.io/kustomize/api
-

The kustomize program itself (main.go -and CLI specific code) will have moved out of -sigs.k8s.io/kustomize and into the new module -sigs.k8s.io/kustomize/kustomize. This is a -submodule in the same repo, and it will retain its -current notion of semver (e.g. a backward -incompatible change in command behavior will -trigger a major version bump). This module will -not export packages; it’s just home to a main -package.

-

The sigs.k8s.io/kustomize/api module will -obey semver with a sustainable public -surface, informed by current usage. Clients -should import packages from this module, i.e. -from import paths prefixed by -sigs.k8s.io/kustomize/api/ at first, -and later by sigs.k8s.io/kustomize/api/v2/. -The kustomize binary -itself is an API client requiring this module.

-

The clients and API will evolve independently.

-

Kustomization File Versioning

-

The kustomization file is a struct that is part of -the kustomize Go API (the sigs.k8s.io/kustomize -module), but it also evolves as a k8s API object - -it has an apiVersion field containing its -own version number.

-

Field Change Policy

-
    -
  • A field’s meaning cannot be changed.
  • -
  • A field may be deprecated, then removed.
  • -
  • Deprecation means triggering a minor (semver) -version bump in the kustomize Go API, and -defining a migration path in a non-fatal error -message.
  • -
  • Removal means triggering a major (semver) -version bump in the kustomize Go API, and fatal -error if field encountered (as with any unknown -field). Likewise a change in apiVersion.
  • -
-

The edit fix Command

-

This kustomize command reads a Kustomization -file, converts deprecated fields to new -fields, and writes it out again in the latest -format.

-

This is a type version upgrade mechanism that -works within major API revisions. There is no -downgrade capability, as there’s no use case for -it (see discussion below).

-

Examples

-

With the 2.0.0 release, there were three field -removals:

-
    -
  • imageTag was deprecated when images was -introduced, because the latter offers more -general features for image data manipulation. -imageTag was removed in v2.0.0.
  • -
  • patches was deprecated and replaced by -patchesStrategicMerge when patchesJson6902 -was introduced, to make a clearer -distinction between patch specification formats. -patches was removed in v2.0.0.
  • -
  • secretGenerator/commands was removed -due to security concerns in v2.0.0 -with no deprecation period.
  • -
-

The edit fix command in a v2.0.x binary -will no longer recognize these fields.

-

Relationship to the k8s API

-

Review of k8s API versioning

-

The k8s API has specific conventions and a -process for making changes.

-

The presence of an apiVersion field in a k8s -native type signals:

-
    -
  • its reliability level (alpha vs beta vs -generally available),
  • -
  • the existence of code to provide default values -to fields not present in a serialization,
  • -
  • the existence of code to provide both forward -and backward conversion between different -versions of types.
  • -
-

The k8s API promises a lossless conversion -between versions over a specific range. This -means that a recent client can write an object -bearing the newest possible value for its version, -the server will accept it and store it in -“versionless” JSON form in storage, and can -convert it to a range of older versions should -an older client request data.

-

For native k8s types, this all requires writing Go -code in the kubernetes core repo, to provide -defaulting and conversions.

-

For CRDs, there’s a proposal on how to manage -versioning (e.g. a remote service can offer type -defaulting and conversions).

-

Differences

-
    -
  • A k8s API server is able to go forward and -backward in versioning, to work with older -clients, over some range.
  • -
  • The kustomize edit fix command only moves -forward within a major API -version.
  • -
-

At the time of writing, the YAML in a -kustomization file does not represent a k8s API -object, and the kustomize command and associated -library is neither a server of, nor a client to, -the k8s API.

-

Additional Kustomization file rules

-

In addition to the field change policy described -above, kustomization files conform to -the following rules.

-

Eschew classic k8s fields

-

Field names with dedicated meaning in k8s -(metadata, spec, status, etc.) aren’t used. -This is enforced via code review.

-

Default values for k8s kind and apiVersion

-

In v3 or below, the two special k8s -resource fields kind and apiVersion may -be omitted from the kustomization file.

-

If either field is present, they both must be. -If present, the value of kind must be:

-
-
kind: Kustomization
-
-

If missing, the value of apiVersion defaults to

-
-
apiVersion: kustomize.config.k8s.io/v1beta1
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

- diff --git a/docs/guides/bespoke/index.html b/docs/guides/bespoke/index.html index f13f60df1..960043947 100644 --- a/docs/guides/bespoke/index.html +++ b/docs/guides/bespoke/index.html @@ -305,236 +305,6 @@ -
    -
  • - -
  • -
      -
    • - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - -
    • -
    -
- - - - - - - - - - -
  • @@ -624,44 +394,7 @@

    Bespoke Application

    Workflow for bespoke applications
    -

    In this workflow, all configuration (resource YAML) files are owned by the user. -No content is incorporated from version control repositories owned by others.

    -

    bespoke config workflow image

    -

    1) create a directory in version control

    -

    Speculate some overall cluster application called ldap; -we want to keep its configuration in its own repo.

    -
    -
    git init ~/ldap
    -
    -

    2) create a base

    -
    -
    mkdir -p ~/ldap/base
    -
    -

    In this directory, create and commit a kustomization -file and a set of resources.

    -

    3) create overlays

    -
    -
    mkdir -p ~/ldap/overlays/staging
    -mkdir -p ~/ldap/overlays/production
    -
    -

    Each of these directories needs a kustomization -file and one or more patches.

    -

    The staging directory might get a patch -that turns on an experiment flag in a configmap.

    -

    The production directory might get a patch -that increases the replica count in a deployment -specified in the base.

    -

    4) bring up variants

    -

    Run kustomize, and pipe the output to apply.

    -
    -
    kustomize build ~/ldap/overlays/staging | kubectl apply -f -
    -kustomize build ~/ldap/overlays/production | kubectl apply -f -
    -
    -

    You can also use kubectl-v1.14.0 to apply your variants.

    -
    -
    kubectl apply -k ~/ldap/overlays/staging
    -kubectl apply -k ~/ldap/overlays/production
    -
    +

    Moved to https://github.com/kubernetes-sigs/cli-experimental

    @@ -688,32 +421,12 @@ kubectl apply -k ~/ldap/overlays/production - - - - - - - - - - - - - - - - - - - -
    - diff --git a/docs/guides/components/index.html b/docs/guides/components/index.html index 4ec79f581..e8534a585 100644 --- a/docs/guides/components/index.html +++ b/docs/guides/components/index.html @@ -305,236 +305,6 @@ -
      -
    • - -
    • -
        -
      • - - - - - - - - - - - -
          -
        • - -
        • -
            -
          • - - - -
          • -
          -
        - - - - - - - - - - - -
          -
        • - -
        • -
            -
          • - - - -
          • -
          -
        - - - - - - - - - - - - - - - - - - - - - - - -
          -
        • - -
        • -
            -
          • - - - -
          • -
          -
        - - - - - - - - - - - -
          -
        • - -
        • -
            -
          • - - - -
          • -
          -
        - - - - - - - - - - - -
          -
        • - -
        • -
            -
          • - - - -
          • -
          -
        - - - - - - - - - - - - - - - - - - - - - - - -
          -
        • - -
        • -
            -
          • - - - -
          • -
          -
        - - - - - - - - - - - - - - - -
      • -
      -
    - - - - - - - - - - -
    • Kustomize Components @@ -624,340 +394,8 @@

      Kustomize Components

      Kustomize components guide
      -

      As of v3.7.0 Kustomize supports a special type of kustomization that allows -one to define reusable pieces of configuration logic that can be included from -multiple overlays.

      -

      Components come in handy when dealing with applications that support multiple -optional features and you wish to enable only a subset of them in different -overlays, i.e., different features for different environments or audiences.

      -

      For more details regarding this feature you can read the -Kustomize Components KEP.

      -

      Use case

      -

      Suppose you’ve written a very simple Web application:

      -
      apiVersion: apps/v1
      -kind: Deployment
      -metadata:
      -  name: example
      -spec:
      -  template:
      -    spec:
      -      containers:
      -      - name: example
      -        image: example:1.0
      -

      You want to deploy a community edition of this application as SaaS, so you -add support for persistence (e.g. an external database), and bot detection -(e.g. Google reCAPTCHA).

      -

      You’ve now attracted enterprise customers who want to deploy it -on-premises, so you add LDAP support, and disable Google reCAPTCHA. At the same -time, the devs need to be able to test parts of the application, so they -want to deploy it with some features enabled and others not.

      -

      Here’s a matrix with the deployments of this application and the features -enabled for each one:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      External DBLDAPreCAPTCHA
      Community✔️✔️
      Enterprise✔️✔️
      Dev
      -

      (✔️ enabled, ✅: optional)

      -

      So, you want to make it easy to deploy your application in any of the above -three environments. Here’s how you can do this with Kustomize components: each -opt-in feature gets packaged as a component, so that it can be referred to from -multiple higher-level overlays.

      -

      First, define a place to work:

      -
      DEMO_HOME=$(mktemp -d)
      -

      Define a common base that has a Deployment and a simple ConfigMap, that -is mounted on the application’s container.

      -
      BASE=$DEMO_HOME/base
      -mkdir $BASE
      +

      Moved to https://github.com/kubernetes-sigs/cli-experimental

      -cat <<EOF >$BASE/kustomization.yaml -resources: -- deployment.yaml - -configMapGenerator: -- name: conf - literals: - - main.conf=| - color=cornflower_blue - log_level=info -EOF - -cat <<EOF >$BASE/deployment.yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: example -spec: - template: - spec: - containers: - - name: example - image: example:1.0 - volumeMounts: - - name: conf - mountPath: /etc/config - volumes: - - name: conf - configMap: - name: conf -EOF -

      Define an external_db component, using kind: Component, that creates a -Secret for the DB password and a new entry in the ConfigMap:

      -
      EXT_DB=$DEMO_HOME/components/external_db
      -mkdir -p $EXT_DB
      -
      -cat <<EOF >$EXT_DB/kustomization.yaml
      -apiVersion: kustomize.config.k8s.io/v1alpha1  # <-- Component notation
      -kind: Component
      -
      -secretGenerator:
      -- name: dbpass
      -  files:
      -    - dbpass.txt
      -
      -patchesStrategicMerge:
      -  - configmap.yaml
      -
      -patchesJson6902:
      -- target:
      -    group: apps
      -    version: v1
      -    kind: Deployment
      -    name: example
      -  path: deployment.yaml
      -EOF
      -
      -cat <<EOF >$EXT_DB/deployment.yaml
      -- op: add
      -  path: /spec/template/spec/volumes/0
      -  value:
      -    name: dbpass
      -    secret:
      -      secretName: dbpass
      -- op: add
      -  path: /spec/template/spec/containers/0/volumeMounts/0
      -  value:
      -    mountPath: /var/run/secrets/db/
      -    name: dbpass
      -EOF
      -
      -cat <<EOF >$EXT_DB/configmap.yaml
      -apiVersion: v1
      -kind: ConfigMap
      -metadata:
      -  name: conf
      -data:
      -  db.conf: |
      -    endpoint=127.0.0.1:1234
      -    name=app
      -    user=admin
      -    pass=/var/run/secrets/db/dbpass.txt
      -EOF
      -

      Define an ldap component, that creates a Secret for the LDAP password -and a new entry in the ConfigMap:

      -
      LDAP=$DEMO_HOME/components/ldap
      -mkdir -p $LDAP
      -
      -cat <<EOF >$LDAP/kustomization.yaml
      -apiVersion: kustomize.config.k8s.io/v1alpha1
      -kind: Component
      -
      -secretGenerator:
      -- name: ldappass
      -  files:
      -    - ldappass.txt
      -
      -patchesStrategicMerge:
      -  - configmap.yaml
      -
      -patchesJson6902:
      -- target:
      -    group: apps
      -    version: v1
      -    kind: Deployment
      -    name: example
      -  path: deployment.yaml
      -EOF
      -
      -cat <<EOF >$LDAP/deployment.yaml
      -- op: add
      -  path: /spec/template/spec/volumes/0
      -  value:
      -    name: ldappass
      -    secret:
      -      secretName: ldappass
      -- op: add
      -  path: /spec/template/spec/containers/0/volumeMounts/0
      -  value:
      -    mountPath: /var/run/secrets/ldap/
      -    name: ldappass
      -EOF
      -
      -cat <<EOF >$LDAP/configmap.yaml
      -apiVersion: v1
      -kind: ConfigMap
      -metadata:
      -  name: conf
      -data:
      -  ldap.conf: |
      -    endpoint=ldap://ldap.example.com
      -    bindDN=cn=admin,dc=example,dc=com
      -    pass=/var/run/secrets/ldap/ldappass.txt
      -EOF
      -

      Define a recaptcha component, that creates a Secret for the reCAPTCHA -site/secret keys and a new entry in the ConfigMap:

      -
      RECAPTCHA=$DEMO_HOME/components/recaptcha
      -mkdir -p $RECAPTCHA
      -
      -cat <<EOF >$RECAPTCHA/kustomization.yaml
      -apiVersion: kustomize.config.k8s.io/v1alpha1
      -kind: Component
      -
      -secretGenerator:
      -- name: recaptcha
      -  files:
      -    - site_key.txt
      -    - secret_key.txt
      -
      -# Updating the ConfigMap works with generators as well.
      -configMapGenerator:
      -- name: conf
      -  behavior: merge
      -  literals:
      -    - recaptcha.conf=|
      -        enabled=true
      -        site_key=/var/run/secrets/recaptcha/site_key.txt
      -        secret_key=/var/run/secrets/recaptcha/secret_key.txt
      -
      -patchesJson6902:
      -- target:
      -    group: apps
      -    version: v1
      -    kind: Deployment
      -    name: example
      -  path: deployment.yaml
      -EOF
      -
      -cat <<EOF >$RECAPTCHA/deployment.yaml
      -- op: add
      -  path: /spec/template/spec/volumes/0
      -  value:
      -    name: recaptcha
      -    secret:
      -      secretName: recaptcha
      -- op: add
      -  path: /spec/template/spec/containers/0/volumeMounts/0
      -  value:
      -    mountPath: /var/run/secrets/recaptcha/
      -    name: recaptcha
      -EOF
      -

      Define a community variant, that bundles the external DB and reCAPTCHA -components:

      -
      COMMUNITY=$DEMO_HOME/overlays/community
      -mkdir -p $COMMUNITY
      -
      -cat <<EOF >$COMMUNITY/kustomization.yaml
      -apiVersion: kustomize.config.k8s.io/v1beta1
      -kind: Kustomization
      -
      -resources:
      -  - ../../base
      -
      -components:
      -  - ../../components/external_db
      -  - ../../components/recaptcha
      -EOF
      -

      Define an enterprise overlay, that bundles the external DB and LDAP -components:

      -
      ENTERPRISE=$DEMO_HOME/overlays/enterprise
      -mkdir -p $ENTERPRISE
      -
      -cat <<EOF >$ENTERPRISE/kustomization.yaml
      -apiVersion: kustomize.config.k8s.io/v1beta1
      -kind: Kustomization
      -
      -resources:
      -  - ../../base
      -
      -components:
      -  - ../../components/external_db
      -  - ../../components/ldap
      -EOF
      -

      Define a dev overlay, that points to all the components and has LDAP -disabled:

      -
      DEV=$DEMO_HOME/overlays/dev
      -mkdir -p $DEV
      -
      -cat <<EOF >$DEV/kustomization.yaml
      -apiVersion: kustomize.config.k8s.io/v1beta1
      -kind: Kustomization
      -
      -resources:
      -  - ../../base
      -
      -components:
      -  - ../../components/external_db
      -  #- ../../components/ldap
      -  - ../../components/recaptcha
      -EOF
      -

      Now, the workspace has the following directories:

      -
      ├── base
      -│   ├── deployment.yaml
      -│   └── kustomization.yaml
      -├── components
      -│   ├── external_db
      -│   │   ├── configmap.yaml
      -│   │   ├── dbpass.txt
      -│   │   ├── deployment.yaml
      -│   │   └── kustomization.yaml
      -│   ├── ldap
      -│   │   ├── configmap.yaml
      -│   │   ├── deployment.yaml
      -│   │   ├── kustomization.yaml
      -│   │   └── ldappass.txt
      -│   └── recaptcha
      -│       ├── deployment.yaml
      -│       ├── kustomization.yaml
      -│       ├── secret_key.txt
      -│       └── site_key.txt
      -└── overlays
      -    ├── community
      -    │   └── kustomization.yaml
      -    ├── dev
      -    │   └── kustomization.yaml
      -    └── enterprise
      -        └── kustomization.yaml
      -

      With this structure, you can generate the YAML manifests for each deployment -using kustomize build:

      -
      kustomize build overlays/community
      -kustomize build overlays/enterprise
      -kustomize build overlays/dev
      -
      @@ -983,32 +421,12 @@ kustomize build overlays/dev - - - - - - - - - - - - - - - - - - - -
      - diff --git a/docs/guides/index.html b/docs/guides/index.html index bfa1a8004..6818fafcc 100644 --- a/docs/guides/index.html +++ b/docs/guides/index.html @@ -305,236 +305,6 @@ -
        -
      • - Command Line Options -
      • -
          -
        • - - - - - - - - - - - -
            -
          • - build -
          • -
              -
            • - - - -
            • -
            -
          - - - - - - - - - - - -
            -
          • - cfg -
          • -
              -
            • - - - -
            • -
            -
          - - - - - - - - - - - - - - - - - - - - - - - -
            -
          • - edit -
          • -
              -
            • - - - -
            • -
            -
          - - - - - - - - - - - -
            -
          • - fn -
          • -
              -
            • - - - -
            • -
            -
          - - - - - - - - - - - -
            -
          • - help -
          • -
              -
            • - - - -
            • -
            -
          - - - - - - - - - - - - - - - - - - - - - - - -
            -
          • - live -
          • -
              -
            • - - - -
            • -
            -
          - - - - - - - - - - - - - - - -
        • -
        -
      - - - - - - - - - - -
@@ -716,604 +409,11 @@

Builtin Plugins

Builtin Plugins
-

Builtin Plugins

-

A list of kustomize’s builtin plugins - both -generators and transformers.

-

For each plugin, an example is given for

-
    -
  • -

    implicitly triggering -the plugin via a dedicated kustomization -file field (e.g. the AnnotationsTransformer is -triggered by the commonAnnotations field).

    -
  • -
  • -

    explicitly triggering the plugin -via the generators or transformers field -(by providing a config file specifying the -plugin).

    -
  • -
-

The former method is convenient but limited in -power as most of the plugins arguments must -be defaulted. The latter method allows for -complete plugin argument specification.

-

AnnotationTransformer

-

Usage via kustomization.yaml

-

field name: commonAnnotations

-

Adds annotions (non-identifying metadata) to add -all resources. Like labels, these are key value -pairs.

-
commonAnnotations:
-  oncallPager: 800-555-1212
-

Usage via plugin

-

Arguments

-
-

Annotations map[string]string

-

FieldSpecs []config.FieldSpec

-
-

Example

-
-
apiVersion: builtin
-kind: AnnotationsTransformer
-metadata:
-  name: not-important-to-example
-annotations:
-  app: myApp
-  greeting/morning: a string with blanks
-fieldSpecs:
-- path: metadata/annotations
-  create: true
-
-

ConfigMapGenerator

-

Usage via kustomization.yaml

-

field name: 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 three ConfigMaps. One with the names and contents of -the given files, one with key/value as data, and a third which sets an -annotation and label via options for that single ConfigMap.

-

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.

-

Also, each entry has an options field, that has the -same subfields as the kustomization file’s generatorOptions field.

-

This options field allows one to add labels and/or -annotations to the generated instance, or to individually -disable the name suffix hash for that instance. -Labels and annotations added here will not be overwritten -by the global options associated with the kustomization -file generatorOptions field. However, due to how -booleans behave, if the global generatorOptions field -specifies disableNameSuffixHash: true, this will -trump any attempt to locally override it.

-
# These labels are added to all configmaps and secrets.
-generatorOptions:
-  labels:
-    fruit: apple
-
-configMapGenerator:
-- name: my-java-server-props
-  behavior: merge
-  files:
-  - application.properties
-  - more.properties
-- name: my-java-server-env-vars
-  literals:
-  - JAVA_HOME=/opt/java/jdk
-  - JAVA_TOOL_OPTIONS=-agentlib:hprof
-  options:
-    disableNameSuffixHash: true
-    labels:
-      pet: dog
-- name: dashboards
-  files:
-  - mydashboard.json
-  options:
-    annotations:
-      dashboard: "1"
-    labels:
-      app.kubernetes.io/name: "app1"
-

It is also possible to -define a key -to set a name different than the filename.

-

The example below creates a ConfigMap -with the name of file as myFileName.ini -while the actual filename from which the -configmap is created is whatever.ini.

-
configMapGenerator:
-- name: app-whatever
-  files:
-  - myFileName.ini=whatever.ini
-

Usage via plugin

-

Arguments

-
-

types.ConfigMapArgs

-
-

Example

-
-
apiVersion: builtin
-kind: ConfigMapGenerator
-metadata:
-  name: mymap
-envs:
-- devops.env
-- uxteam.env
-literals:
-- FRUIT=apple
-- VEGETABLE=carrot
-
-

ImageTagTransformer

-

Usage via kustomization.yaml

-

field name: 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
-

Usage via plugin

-

Arguments

-
-

ImageTag image.Image

-

FieldSpecs []config.FieldSpec

-
-

Example

-
-
apiVersion: builtin
-kind: ImageTagTransformer
-metadata:
-  name: not-important-to-example
-imageTag:
-  name: nginx
-  newTag: v2
-
-

LabelTransformer

-

Usage via kustomization.yaml

-

field name: commonLabels

-

Adds labels to all resources and selectors

-
commonLabels:
-  someName: someValue
-  owner: alice
-  app: bingo
-

Usage via plugin

-

Arguments

-
-

Labels map[string]string

-

FieldSpecs []config.FieldSpec

-
-

Example

-
-
apiVersion: builtin
-kind: LabelTransformer
-metadata:
-  name: not-important-to-example
-labels:
-  app: myApp
-  env: production
-fieldSpecs:
-- path: metadata/labels
-  create: true
-
-

NamespaceTransformer

-

Usage via kustomization.yaml

-

field name: namespace

-

Adds namespace to all resources

-
namespace: my-namespace
-

Usage via plugin

-

Arguments

-
-

types.ObjectMeta

-

FieldSpecs []config.FieldSpec

-
-

Example

-
-
apiVersion: builtin
- kind: NamespaceTransformer
- metadata:
-   name: not-important-to-example
-   namespace: test
- fieldSpecs:
- - path: metadata/namespace
-   create: true
- - path: subjects
-   kind: RoleBinding
-   group: rbac.authorization.k8s.io
- - path: subjects
-   kind: ClusterRoleBinding
-   group: rbac.authorization.k8s.io
-
-

PatchesJson6902

-

Usage via kustomization.yaml

-

field name: 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
-

The patch content can be an inline string as well:

-
patchesJson6902:
-- target:
-    version: v1
-    kind: Deployment
-    name: my-deployment
-  patch: |-
-    - op: add
-      path: /some/new/path
-      value: value
-    - op: replace
-      path: /some/existing/path
-      value: "new value"
-

Usage via plugin

-

Arguments

-
-

Target types.PatchTarget

-

Path string

-

JsonOp string

-
-

Example

-
-
apiVersion: builtin
-kind: PatchJson6902Transformer
-metadata:
-  name: not-important-to-example
-target:
-  group: apps
-  version: v1
-  kind: Deployment
-  name: my-deploy
-path: jsonpatch.json
-
-

PatchesStrategicMerge

-

Usage via kustomization.yaml

-

field name: patchesStrategicMerge

-

Each entry in this list should be either a relative -file path or an inline content -resolving to a partial or complete resource -definition.

-

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
-

The patch content can be a inline string as well.

-
patchesStrategicMerge:
-- |-
-  apiVersion: apps/v1
-  kind: Deployment
-  metadata:
-    name: nginx
-  spec:
-    template:
-      spec:
-        containers:
-          - name: nginx
-            image: nignx:latest
-

Note that kustomize does not support more than one patch -for the same object that contain a delete directive. To remove -several fields / slice elements from an object create a single -patch that performs all the needed deletions.

-

Usage via plugin

-

Arguments

-
-

Paths []types.PatchStrategicMerge

-

Patches string

-
-

Example

-
-
apiVersion: builtin
-kind: PatchStrategicMergeTransformer
-metadata:
-  name: not-important-to-example
-paths:
-- patch.yaml
-
-

PatchTransformer

-

Usage via kustomization.yaml

-

field name: patches

-

Each entry in this list should resolve to an Patch -object, which includes a patch and a target selector. -The patch can be either a strategic merge patch or a -JSON patch. it can be either a patch file or an inline -string. The target selects -resources by group, version, kind, name, namespace, -labelSelector and annotationSelector. A resource -which matches all the specified fields is selected -to apply the patch.

-
patches:
-- path: patch.yaml
-  target:
-    group: apps
-    version: v1
-    kind: Deployment
-    name: deploy.*
-    labelSelector: "env=dev"
-    annotationSelector: "zone=west"
-- patch: |-
-    - op: replace
-      path: /some/existing/path
-      value: new value
-  target:
-    kind: MyKind
-    labelSelector: "env=dev"
-

The name and namespace fields of the patch target selector are -automatically anchored regular expressions. This means that the value myapp -is equivalent to ^myapp$.

-

Usage via plugin

-

Arguments

-
-

Path string

-

Patch string

-

Target *types.Selector

-
-

Example

-
-
apiVersion: builtin
-kind: PatchTransformer
-metadata:
-  name: not-important-to-example
-patch: '[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value": "nginx:latest"}]'
-target:
-  name: .*Deploy
-  kind: Deployment
-
-

PrefixSuffixTransformer

-

Usage via kustomization.yaml

-

field names: namePrefix, nameSuffix

-

Prepends or postfixes the value to the names -of all resources.

-

E.g. a deployment named wordpress could -become alices-wordpress or wordpress-v2 -or alices-wordpress-v2.

-
namePrefix: alices-
-nameSuffix: -v2
-

The suffix is appended before the content hash if -the resource type is ConfigMap or Secret.

-

Usage via plugin

-

Arguments

-
-

Prefix string

-

Suffix string

-

FieldSpecs []config.FieldSpec

-
-

Example

-
-
apiVersion: builtin
-kind: PrefixSuffixTransformer
-metadata:
-  name: not-important-to-example
-prefix: baked-
-suffix: -pie
-fieldSpecs:
-  - path: metadata/name
-
-

ReplicaCountTransformer

-

Usage via kustomization.yaml

-

field name: 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.

-

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.

-

Usage via plugin

-

Arguments

-
-

Replica types.Replica

-

FieldSpecs []config.FieldSpec

-
-

Example

-
-
apiVersion: builtin
-kind: ReplicaCountTransformer
-metadata:
-  name: not-important-to-example
-replica:
-  name: myapp
-  count: 23
-fieldSpecs:
-- path: spec/replicas
-  create: true
-  kind: Deployment
-- path: spec/replicas
-  create: true
-  kind: ReplicationController
-
-

SecretGenerator

-

Usage via kustomization.yaml

-

field name: secretGenerator

-

Each entry in the argument list -results in the creation of -one Secret resource -(it’s a generator of n secrets).

-

This works like the configMapGenerator field -described above.

-
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
-  # a 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
-- name: secret-with-annotation
-  files:
-  - app-config.yaml
-  type: Opaque
-  options:
-    annotations:
-      app_config: "true"
-    labels:
-      app.kubernetes.io/name: "app2"
-

Usage via plugin

-

Arguments

-
-

types.ObjectMeta

-

types.SecretArgs

-
-

Example

-
-
apiVersion: builtin
-kind: SecretGenerator
-metadata:
-  name: my-secret
-  namespace: whatever
-behavior: merge
-envs:
-- a.env
-- b.env
-files:
-- obscure=longsecret.txt
-literals:
-- FRUIT=apple
-- VEGETABLE=carrot
-
-

HelmChartInflationGenerator

-

Usage via kustomization.yaml

-

field name: helmChartInflationGenerator

-

Each entry in the argument list results in the pulling -and rendering of a helm chart.

-

Each entry can have following fields:

-
    -
  • chartName: The name of the chart that you want to use.
  • -
  • chartRepoUrl: [Optional] The URL of the repository which contains the chart. If -this is provided, the plugin will try to fetch remote charts. Otherwise it will -try to load local chart in chartHome.
  • -
  • chartVersion: [Optional] Version of the chart. Will use latest version -if this is omitted.
  • -
  • chartHome: [Optional] Provide the path to the parent directory for local chart.
  • -
  • chartRelease: [Optional] The name of the repo where to find the chart.
  • -
  • values: [Optional] A path to the values file.
  • -
  • releaseName: [Optional] The release name that will be set in the chart.
  • -
  • releaseNamespace: [Optional] The namespace which will be used by --namespace -flag in helm template command.
  • -
  • helmBin: [Optional] Path to helm binary. Default is helm.
  • -
  • helmHome: [Optional] Path to helm home directory.
  • -
-
helmChartInflationGenerator:
-- chartName: minecraft
-  chartRepoUrl: https://kubernetes-charts.storage.googleapis.com
-  chartVersion: v1.2.0
-  releaseName: test
-  releaseNamespace: testNamespace
-

Usage via plugin

-

Arguments

-
-

ChartName string

-

ChartVersion string

-

ChartRepoURL string

-

ChartHome string

-

ChartRepoName string

-

HelmBin string

-

HelmHome string

-

Values string

-

ReleaseName string

-

ReleaseNamespace string

-
-

Example

-
-
apiVersion: builtin
-kind: HelmChartInflationGenerator
-metadata:
-  name: myMap
-chartName: minecraft
-chartRepoUrl: https://kubernetes-charts.storage.googleapis.com
-chartVersion: v1.2.0
-helmBin: /usr/bin/helm
-helmHome: /tmp/helmHome
-releaseName: test
-releaseNamespace: testNamespace
-values: values.yaml
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

- diff --git a/docs/guides/plugins/execpluginguidedexample/index.html b/docs/guides/plugins/execpluginguidedexample/index.html index 378b950a7..edad9ce20 100644 --- a/docs/guides/plugins/execpluginguidedexample/index.html +++ b/docs/guides/plugins/execpluginguidedexample/index.html @@ -25,12 +25,12 @@ " /> - + - - + + @@ -310,236 +310,6 @@ -
    -
  • - -
  • -
      -
    • - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - -
    • -
    -
- - - - - - - - - - -
@@ -656,164 +409,11 @@

Exec plugin on linux

Exec plugin on linux in 60 seconds
-

This is a (no reading allowed!) 60 second copy/paste guided -example. Full plugin docs here.

-

This demo writes and uses a somewhat ridiculous -exec plugin (written in bash) that generates a -ConfigMap.

-

This is a guide to try it without damaging your -current setup.

-

requirements

-
    -
  • linux, git, curl, Go 1.13
  • -
-

Make a place to work

-
DEMO=$(mktemp -d)
-

Create a kustomization

-

Make a kustomization directory to -hold all your config:

-
MYAPP=$DEMO/myapp
-mkdir -p $MYAPP
-

Make a deployment config:

-
cat <<'EOF' >$MYAPP/deployment.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: the-deployment
-spec:
-  replicas: 3
-  template:
-    spec:
-      containers:
-      - name: the-container
-        image: monopole/hello:1
-        command: ["/hello",
-                  "--port=8080",
-                  "--date=$(THE_DATE)",
-                  "--enableRiskyFeature=$(ENABLE_RISKY)"]
-        ports:
-        - containerPort: 8080
-        env:
-        - name: THE_DATE
-          valueFrom:
-            configMapKeyRef:
-              name: the-map
-              key: today
-        - name: ALT_GREETING
-          valueFrom:
-            configMapKeyRef:
-              name: the-map
-              key: altGreeting
-        - name: ENABLE_RISKY
-          valueFrom:
-            configMapKeyRef:
-              name: the-map
-              key: enableRisky
-EOF
-

Make a service config:

-
cat <<EOF >$MYAPP/service.yaml
-kind: Service
-apiVersion: v1
-metadata:
-  name: the-service
-spec:
-  type: LoadBalancer
-  ports:
-  - protocol: TCP
-    port: 8666
-    targetPort: 8080
-EOF
-

Now make a config file for the plugin -you’re about to write.

-

This config file is just another k8s resource -object. The values of its apiVersion and kind -fields are used to find the plugin code on your -filesystem (more on this later).

-
cat <<'EOF' >$MYAPP/cmGenerator.yaml
-apiVersion: myDevOpsTeam
-kind: SillyConfigMapGenerator
-metadata:
-  name: whatever
-argsOneLiner: Bienvenue true
-EOF
-

Finally, make a kustomization file -referencing all of the above:

-
cat <<EOF >$MYAPP/kustomization.yaml
-commonLabels:
-  app: hello
-resources:
-- deployment.yaml
-- service.yaml
-generators:
-- cmGenerator.yaml
-EOF
-

Review the files

-
ls -C1 $MYAPP
-

Make a home for plugins

-

Plugins must live in a particular place for -kustomize to find them.

-

This demo will use the ephemeral directory:

-
PLUGIN_ROOT=$DEMO/kustomize/plugin
-

The plugin config defined above in -$MYAPP/cmGenerator.yaml specifies:

-
-
apiVersion: myDevOpsTeam
-kind: SillyConfigMapGenerator
-
-

This means the plugin must live in a directory -named:

-
MY_PLUGIN_DIR=$PLUGIN_ROOT/myDevOpsTeam/sillyconfigmapgenerator
-
-mkdir -p $MY_PLUGIN_DIR
-

The directory name is the plugin config’s -apiVersion followed by its lower-cased kind.

-

A plugin gets its own directory to hold itself, -its tests and any supplemental data files it -might need.

-

Create the plugin

-

There are two kinds of plugins, exec and Go.

-

Make an exec plugin, installing it to the -correct directory and file name. The file name -must match the plugin’s kind (in this case, -SillyConfigMapGenerator):

-
cat <<'EOF' >$MY_PLUGIN_DIR/SillyConfigMapGenerator
-#!/bin/bash
-# Skip the config file name argument.
-shift
-today=`date +%F`
-echo "
-kind: ConfigMap
-apiVersion: v1
-metadata:
-  name: the-map
-data:
-  today: $today
-  altGreeting: "$1"
-  enableRisky: "$2"
-"
-EOF
-

By definition, an exec plugin must be executable:

-
chmod a+x $MY_PLUGIN_DIR/SillyConfigMapGenerator
-

Install kustomize

-

Per the instructions:

-
curl -s "https://raw.githubusercontent.com/\
-kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
-mkdir -p $DEMO/bin
-mv kustomize $DEMO/bin
-

Review the layout

-
tree $DEMO
-

Build your app, using the plugin

-
XDG_CONFIG_HOME=$DEMO $DEMO/bin/kustomize build --enable_alpha_plugins $MYAPP
-

Above, if you had set

-
-
PLUGIN_ROOT=$HOME/.config/kustomize/plugin
-
-

there would be no need to use XDG_CONFIG_HOME in the -kustomize command above.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

- diff --git a/docs/guides/plugins/goplugincaveats/index.html b/docs/guides/plugins/goplugincaveats/index.html index 7a29a615d..2fca9bcc7 100644 --- a/docs/guides/plugins/goplugincaveats/index.html +++ b/docs/guides/plugins/goplugincaveats/index.html @@ -25,12 +25,12 @@ " /> - + - - + + @@ -310,236 +310,6 @@ -
    -
  • - -
  • -
      -
    • - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - -
    • -
    -
- - - - - - - - - - -
@@ -653,94 +409,11 @@

Go plugin Caveats

Go plugin Caveats
-

A Go plugin is a compilation artifact described -by the Go plugin package. It is built with -special flags and cannot run on its own. -It must be loaded into a running Go program.

-
-

A normal program written in Go might be usable -as exec plugin, but is not a Go plugin.

-
-

Go plugins allow kustomize extensions that run -without the cost marshalling/unmarshalling all -resource data to/from a subprocess for each plugin -run. The Go plugin API assures a certain level of -consistency to avoid confusing downstream -transformers.

-

Go plugins work as described in the plugin -package, but fall short of common notions -associated with the word plugin.

-

The skew problem

-

Go plugin compilation creates an ELF formatted -.so file, which by definition has no information -about the provenance of the object code.

-

Skew between the compilation conditions (versions -of package dependencies, GOOS, GOARCH) of the -main program ELF and the plugin ELF will cause -plugin load failure, with non-helpful error -messages.

-

Exec plugins also lack provenance, but won’t fail -due to compilation skew.

-

In either case, the only sensible way to share a -plugin is as some kind of bundle (a git repo -URL, a git archive file, a tar file, etc.) -containing source code, tests and associated data, -unpackable under -$XDG_CONFIG_HOME/kustomize/plugin.

-

In the case of a Go plugin, an end user -accepting a shared plugin must compile both -kustomize and the plugin.

-

This means a one-time run of

-
# Or whatever is appropriate at time of reading
-GOPATH=${whatever} GO111MODULE=on go get sigs.k8s.io/kustomize/api
-

and then a normal development cycle using

-
go build -buildmode plugin \
-    -o ${wherever}/${kind}.so ${wherever}/${kind}.go
-

with paths and the release version tag (e.g. v3.0.0) -adjusted as needed.

-

For comparison, consider what one -must do to write a tensorflow plugin.

-

Why support Go plugins

-

Safety

-

The Go plugin developer sees the same API offered -to native kustomize operations, assuring certain -semantics, invariants, checks, etc. An exec -plugin sub-process dealing with this via -stdin/stdout will have an easier time screwing -things up for downstream transformers and -consumers.

-

Minor point: if the plugin reads files via -the kustomize-provided file Loader interface, it -will be constrained by kustomize file loading -restrictions. Of course, nothing but a code audit -prevents a Go plugin from importing the io package -and doing whatever it wants.

-

Debugging

-

A Go plugin developer can debug the plugin in -situ, setting breakpoints inside the plugin and -elsewhere while running a plugin in feature tests.

-

To get the best of both worlds (shareability and safety), -a developer can write an .go program that functions -as an exec plugin, but can be processed by go generate -to emit a Go plugin (or vice versa).

-

Unit of contribution

-

All the builtin generators and transformers -are themselves Go plugins. This means that -the kustomize maintainers can promote a contributed -plugin to a builtin without needing code changes -(beyond those mandated by normal code review).

-

Ecosystems grow through use

-

Tooling could ease Go plugin sharing, but this -requires some critical mass of Go plugin -authoring, which in turn is hampered by -confusion around sharing. Go modules, once they -are more widely adopted, will solve the -biggest plugin sharing difficulty: ambiguous -plugin vs host dependencies.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

- diff --git a/docs/guides/plugins/gopluginguidedexample/index.html b/docs/guides/plugins/gopluginguidedexample/index.html index acd5c825f..9c83d6e81 100644 --- a/docs/guides/plugins/gopluginguidedexample/index.html +++ b/docs/guides/plugins/gopluginguidedexample/index.html @@ -25,12 +25,12 @@ " /> - + - - + + @@ -310,236 +310,6 @@ -
    -
  • - -
  • -
      -
    • - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - -
    • -
    -
- - - - - - - - - - -
@@ -667,240 +409,11 @@

Go plugin example

Go plugin example
-

Go Plugin Guided Example for Linux

-

This is a (no reading allowed!) 60 second copy/paste guided -example.

-

Full plugin docs here. -Be sure to read the Go plugin caveats.

-

This demo uses a Go plugin, SopsEncodedSecrets, -that lives in the sopsencodedsecrets repository. -This is an inprocess Go plugin, not an -sub-process exec plugin that happens to be written -in Go (which is another option for Go authors).

-

This is a guide to try it without damaging your -current setup.

-

requirements

-
    -
  • linux, git, curl, Go 1.13
  • -
-

For encryption

-
    -
  • gpg
  • -
-

Or

-
    -
  • Google cloud (gcloud) install
  • -
  • a Google account with KMS permission
  • -
-

Make a place to work

-
# Keeping these separate to avoid cluttering the DEMO dir.
-DEMO=$(mktemp -d)
-tmpGoPath=$(mktemp -d)
-

Install kustomize

-

Need v3.0.0 for what follows, and you must compile -it (not download the binary from the release page):

-
GOPATH=$tmpGoPath go install sigs.k8s.io/kustomize/kustomize
-

Make a home for plugins

-

A kustomize plugin is fully determined by -its configuration file and source code.

-

Kustomize plugin configuration files are formatted -as kubernetes resource objects, meaning -apiVersion, kind and metadata are required -fields in these config files.

-

The kustomize program reads the config file -(because the config file name appears in the -generators or transformers field in the -kustomization file), then locates the Go plugin’s -object code at the following location:

-
-
$XDG_CONFIG_HOME/kustomize/plugin/$apiVersion/$lKind/$kind.so
-
-

where lKind holds the lowercased kind. The -plugin is then loaded and fed its config, and the -plugin’s output becomes part of the overall -kustomize build process.

-

The same plugin might be used multiple times in -one kustomize build, but with different config -files. Also, kustomize might customize config -data before sending it to the plugin, for whatever -reason. For these reasons, kustomize owns the -mapping between plugins and config data; it’s not -left to plugins to find their own config.

-

This demo will house the plugin it uses at the -ephemeral directory

-
PLUGIN_ROOT=$DEMO/kustomize/plugin
-

and ephemerally set XDG_CONFIG_HOME on a command -line below.

-

What apiVersion and kind

-

At this stage in the development of kustomize -plugins, plugin code doesn’t know or care what -apiVersion or kind appears in the config file -sent to it.

-

The plugin could check these fields, but it’s the -remaining fields that provide actual configuration -data, and at this point the successful parsing of -these other fields are the only thing that matters -to a plugin.

-

This demo uses a plugin called SopsEncodedSecrets, -and it lives in the SopsEncodedSecrets repository.

-

Somewhat arbitrarily, we’ll chose to install -this plugin with

-
apiVersion=mygenerators
-kind=SopsEncodedSecrets
-

Define the plugin’s home dir

-

By convention, the ultimate home of the plugin -code and supplemental data, tests, documentation, -etc. is the lowercase form of its kind.

-
lKind=$(echo $kind | awk '{print tolower($0)}')
-

Download the SopsEncodedSecrets plugin

-

In this case, the repo name matches the lowercase -kind already, so we just clone the repo and get -the proper directory name automatically:

-
mkdir -p $PLUGIN_ROOT/${apiVersion}
-cd $PLUGIN_ROOT/${apiVersion}
-git clone git@github.com:monopole/sopsencodedsecrets.git
-

Remember this directory:

-
MY_PLUGIN_DIR=$PLUGIN_ROOT/${apiVersion}/${lKind}
-

Try the plugin’s own test

-

Plugins may come with their own tests. -This one does, and it hopefully passes:

-
cd $MY_PLUGIN_DIR
-go test SopsEncodedSecrets_test.go
-

Build the object code for use by kustomize:

-
cd $MY_PLUGIN_DIR
-GOPATH=$tmpGoPath go build -buildmode plugin -o ${kind}.so ${kind}.go
-

This step may succeed, but kustomize might -ultimately fail to load the plugin because of -dependency skew.

-

On load failure

-
    -
  • -

    be sure to build the plugin with the same -version of Go (go1.13) on the same $GOOS -(linux) and $GOARCH (amd64) used to build -the kustomize being used in this demo.

    -
  • -
  • -

    change the plugin’s dependencies in its go.mod -to match the versions used by kustomize (check -kustomize’s go.mod used in its tagged commit).

    -
  • -
-

Lacking tools and metadata to allow this to be -automated, there won’t be a Go plugin ecosystem.

-

Kustomize has adopted a Go plugin architecture as -to ease accept new generators and transformers -(just write a plugin), and to be sure that native -operations (also constructed and tested as -plugins) are compartmentalized, orderable and -reusable instead of bizarrely woven throughout the -code as a individual special cases.

-

Create a kustomization

-

Make a kustomization directory to -hold all your config:

-
MYAPP=$DEMO/myapp
-mkdir -p $MYAPP
-

Make a config file for the SopsEncodedSecrets plugin.

-

Its apiVersion and kind allow the plugin to be -found:

-
cat <<EOF >$MYAPP/secGenerator.yaml
-apiVersion: ${apiVersion}
-kind: ${kind}
-metadata:
-  name: mySecretGenerator
-name: forbiddenValues
-namespace: production
-file: myEncryptedData.yaml
-keys:
-- ROCKET
-- CAR
-EOF
-

This plugin expects to find more data in -myEncryptedData.yaml; we’ll get to that shortly.

-

Make a kustomization file referencing the plugin -config:

-
cat <<EOF >$MYAPP/kustomization.yaml
-commonLabels:
-  app: hello
-generators:
-- secGenerator.yaml
-EOF
-

Now generate the real encrypted data.

-

Assure you have an encryption tool installed

-

We’re going to use sops to encode a file. Choose either GPG or Google Cloud KMS as the secret provider to continue.

-

GPG

-

Try this:

-
gpg --list-keys
-

If it returns a list, presumably you’ve already created keys. If not, try import test keys from sops for dev.

-
curl https://raw.githubusercontent.com/mozilla/sops/master/pgp/sops_functional_tests_key.asc | gpg --import
-SOPS_PGP_FP="1022470DE3F0BC54BC6AB62DE05550BC07FB1A0A"
-

Google Cloude KMS

-

Try this:

-
gcloud kms keys list --location global --keyring sops
-

If it succeeds, presumably you’ve already created keys and placed them in a keyring called sops. If not, do this:

-
gcloud kms keyrings create sops --location global
-gcloud kms keys create sops-key --location global \
-    --keyring sops --purpose encryption
-

Extract your keyLocation for use below:

-
keyLocation=$(\
-    gcloud kms keys list --location global --keyring sops |\
-    grep GOOGLE | cut -d " " -f1)
-echo $keyLocation
-

Install sops

-
GOPATH=$tmpGoPath go install go.mozilla.org/sops/cmd/sops
-

Create data encrypted with your private key

-

Create raw data to encrypt:

-
cat <<EOF >$MYAPP/myClearData.yaml
-VEGETABLE: carrot
-ROCKET: saturn-v
-FRUIT: apple
-CAR: dymaxion
-EOF
-

Encrypt the data into file the plugin wants to read:

-

With PGP

-
$tmpGoPath/bin/sops --encrypt \
-  --pgp $SOPS_PGP_FP \
-  $MYAPP/myClearData.yaml >$MYAPP/myEncryptedData.yaml
-

Or GCP KMS

-
$tmpGoPath/bin/sops --encrypt \
-  --gcp-kms $keyLocation \
-  $MYAPP/myClearData.yaml >$MYAPP/myEncryptedData.yaml
-

Review the files

-
tree $DEMO
-

This should look something like:

-
-
/tmp/tmp.0kIE9VclPt
-├── kustomize
-│   └── plugin
-│       └── mygenerators
-│           └── sopsencodedsecrets
-│               ├── go.mod
-│               ├── go.sum
-│               ├── LICENSE
-│               ├── README.md
-│               ├── SopsEncodedSecrets.go
-│               ├── SopsEncodedSecrets.so
-│               └── SopsEncodedSecrets_test.go
-└── myapp
-    ├── kustomization.yaml
-    ├── myClearData.yaml
-    ├── myEncryptedData.yaml
-    └── secGenerator.yaml
-
-

Build your app, using the plugin

-
XDG_CONFIG_HOME=$DEMO $tmpGoPath/bin/kustomize build --enable_alpha_plugins $MYAPP
-

This should emit a kubernetes secret, with -encrypted data for the names ROCKET and CAR.

-

Above, if you had set

-
-
PLUGIN_ROOT=$HOME/.config/kustomize/plugin
-
-

there would be no need to use XDG_CONFIG_HOME in the -kustomize command above.

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

- diff --git a/docs/guides/plugins/index.html b/docs/guides/plugins/index.html index fc3996bf8..b33fd8bfb 100644 --- a/docs/guides/plugins/index.html +++ b/docs/guides/plugins/index.html @@ -305,236 +305,6 @@ -
    -
  • - -
  • -
      -
    • - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - - - - - - - - - -
        -
      • - -
      • -
          -
        • - - - -
        • -
        -
      - - - - - - - - - - - - - - - -
    • -
    -
- - - - - - - - - - -
@@ -643,274 +394,8 @@

Kustomize Plugins

Kustomize plugins guide
-

Kustomize offers a plugin framework allowing people to write their own resource generators -and transformers.

-

Write a plugin when changing generator options -or transformer configs doesn’t meet your needs.

-
    -
  • -

    A generator plugin could be a helm chart -inflator, or a plugin that emits all the -components (deployment, service, scaler, -ingress, etc.) needed by someone’s 12-factor -application, based on a smaller number of free -variables.

    -
  • -
  • -

    A transformer plugin might perform special -container command line edits, or any other -transformation beyond those provided by the -builtin (namePrefix, commonLabels, etc.) -transformers.

    -
  • -
-

Specification in kustomization.yaml

-

Start by adding a generators and/or transformers -field to your kustomization.

-

Each field accepts a string list:

-
-
generators:
-- relative/path/to/some/file.yaml
-- relative/path/to/some/kustomization
-- /absolute/path/to/some/kustomization
-- https://github.com/org/repo/some/kustomization
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

-transformers: -- {as above} -
-

The value of each entry in a generators or -transformers list must be a relative path to a -YAML file, or a path or URL to a kustomization. -This is the same format as demanded by the -resources field.

-

YAML files are read from disk directly. Paths or -URLs leading to kustomizations trigger an -in-process kustomization run. Each of the -resulting objects is now further interpreted by -kustomize as a plugin configuration object.

-

Configuration

-

A kustomization file could have the following lines:

-
generators:
-- chartInflator.yaml
-

Given this, the kustomization process would expect -to find a file called chartInflator.yaml in the -kustomization root.

-

This is the plugin’s configuration file; -it contains a YAML configuration object.

-

The file chartInflator.yaml could contain:

-
apiVersion: someteam.example.com/v1
-kind: ChartInflator
-metadata:
-  name: notImportantHere
-chartName: minecraft
-

The apiVersion and kind fields are -used to locate the plugin.

-

Thus, these fields are required. They are also -required because a kustomize plugin configuration -object is also a k8s object.

-

To get the plugin ready to generate or transform, -it is given the entire contents of the -configuration file.

-

For more examples of plugin configuration YAML, -browse the unit tests below the plugins root, -e.g. the tests for ChartInflator or -NameTransformer.

-

Placement

-

Each plugin gets its own dedicated directory named

-
$XDG_CONFIG_HOME/kustomize/plugin
-    /${apiVersion}/LOWERCASE(${kind})
-

The default value of XDG_CONFIG_HOME is -$HOME/.config.

-

The one-plugin-per-directory requirement eases -creation of a plugin bundle (source, tests, plugin -data files, etc.) for sharing.

-

In the case of a Go plugin, it also -allows one to provide a go.mod file for the -single plugin, easing resolution of package -version dependency skew.

-

When loading, kustomize will first look for an -executable file called

-
$XDG_CONFIG_HOME/kustomize/plugin
-    /${apiVersion}/LOWERCASE(${kind})/${kind}
-

If this file is not found or is not executable, -kustomize will look for a file called ${kind}.so -in the same directory and attempt to load it as a -Go plugin.

-

If both checks fail, the plugin load fails the overall -kustomize build.

-

Execution

-

Plugins are only used during a run of the -kustomize build command.

-

Generator plugins are run after processing the -resources field (which itself can be viewed as a -generator, simply reading objects from disk).

-

The full set of resources is then passed into the -transformation pipeline, wherein builtin -transformations like namePrefix and -commonLabel are applied (if they were specified -in the kustomization file), followed by the -user-specified transformers in the transformers -field.

-

The order specified in the transformers field is -respected, as transformers cannot be expected to -be commutative.

-

No Security

-

Kustomize plugins do not run in any kind of -kustomize-provided sandbox. There’s no notion -of “plugin security”.

-

A kustomize build that tries to use plugins but -omits the flag

-
-

--enable_alpha_plugins

-
-

will not load plugins and will fail with a -warning about plugin use.

-

The use of this flag is an opt-in acknowledging -the unstable (alpha) plugin API, the absence of -plugin provenance, and the fact that a plugin -is not part of kustomize.

-

To be clear, some kustomize plugin downloaded -from the internet might wonderfully transform -k8s config in a desired manner, while also -quietly doing anything the user could do to the -system running kustomize build.

-

Authoring

-

There are two kinds of plugins, exec and Go.

-

Exec plugins

-

A exec plugin is any executable that accepts a -single argument on its command line - the name of -a YAML file containing its configuration (the file name -provided in the kustomization file).

-
-

TODO: restrictions on plugin to allow the same exec -plugin to be targeted by both the -generators and transformers fields.

-
    -
  • first arg could be the fixed string -generate or transform, -(the name of the configuration file moves to -the 2nd arg), or
  • -
  • or by default an exec plugin behaves as a tranformer -unless a flag -g is provided, switching the -exec plugin to behave as a generator.
  • -
-
-

Examples

- -

A generator plugin accepts nothing on stdin, but emits -generated resources to stdout.

-

A transformer plugin accepts resource YAML on stdin, -and emits those resources, presumably transformed, to -stdout.

-

kustomize uses an exec plugin adapter to provide -marshalled resources on stdin and capture -stdout for further processing.

-

Generator Options

-

A generator exec plugin can adjust the generator options for the resources it emits by setting one of the following internal annotations.

-
-

NOTE: These annotations are local to kustomize and will not be included in the final output.

-
-

kustomize.config.k8s.io/needs-hash

-

Resources can be marked as needing to be processed by the internal hash transformer by including the needs-hash annotation. When set valid values for the annotation are "true" and "false" which respectively enable or disable hash suffixing for the resource. Omitting the annotation is equivalent to setting the value "false".

-

Hashes are determined as follows:

-
    -
  • For ConfigMap resources, hashes are based on the values of the name, data, and binaryData fields.
  • -
  • For Secret resources, hashes are based on the values of the name, type, data, and stringData fields.
  • -
  • For any other object type, hashes are based on the entire object content (i.e. all fields).
  • -
-

Example:

-
apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: cm-test
-  annotations:
-    kustomize.config.k8s.io/needs-hash: "true"
-data:
-  foo: bar
-

kustomize.config.k8s.io/behavior

-

The behavior annotation will influence how conflicts are handled for resources emitted by the plugin. Valid values include “create”, “merge”, and “replace” with “create” being the default.

-

Example:

-
apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: cm-test
-  annotations:
-    kustomize.config.k8s.io/behavior: "merge"
-data:
-  foo: bar
-

Go plugins

-

Be sure to read Go plugin caveats.

-

A .go file can be a Go plugin if it declares -‘main’ as it’s package, and exports a symbol to -which useful functions are attached.

-

It can further be used as a kustomize plugin if -the symbol is named ‘KustomizePlugin’ and the -attached functions implement the Configurable, -Generator and Transformer interfaces.

-

A Go plugin for kustomize looks like this:

-
-
package main
-
-import (
-"sigs.k8s.io/kustomize/api/resmap"
-  ...
-)
-
-type plugin struct {...}
-
-var KustomizePlugin plugin
-
-func (p *plugin) Config(
-   h *resmap.PluginHelpers,
-   c []byte) error {...}
-
-func (p *plugin) Generate() (resmap.ResMap, error) {...}
-
-func (p *plugin) Transform(m resmap.ResMap) error {...}
-
-

Use of the identifiers plugin, KustomizePlugin -and implementation of the method signature -Config is required.

-

Implementing the Generator or Transformer -method allows (respectively) the plugin’s config -file to be added to the generators or -transformers field in the kustomization file. -Do one or the other or both as desired.

-

Examples

-
    -
  • service generator - generate a service from a name and port argument.
  • -
  • string prefixer - uses the value in metadata/name as the prefix. -This particular example exists to show how a plugin can -transform the behavior of a plugin. See the -TestTransformedTransformers test in the target package.
  • -
  • date prefixer - prefix the current date to resource names, a simple -example used to modify the string prefixer plugin just mentioned.
  • -
  • secret generator - generate secrets from a toy database.
  • -
  • sops encoded secrets - a more complex secret generator that converts SOPS files into Kubernetes Secrets
  • -
  • SOPSGenerator - another generator that decrypts SOPS files into Secrets
  • -
  • All the builtin plugins. -User authored plugins are -on the same footing as builtin operations.
  • -
-

A Go plugin can be both a generator and a -transformer. The Generate method will run along -with all the other generators before the -Transform method runs.

-

Here’s a build command that sensibly assumes the -plugin source code sits in the directory where -kustomize expects to find .so files:

-
d=$XDG_CONFIG_HOME/kustomize/plugin\
-/${apiVersion}/LOWERCASE(${kind})
-
-go build -buildmode plugin \
-   -o $d/${kind}.so $d/${kind}.go
-
@@ -927,8 +412,6 @@ go build -buildmode plugin \ - -
Builtin Plugins @@ -938,14 +421,6 @@ go build -buildmode plugin \ - - - - - - - -
Exec plugin on linux @@ -955,8 +430,6 @@ go build -buildmode plugin \ - -
Go plugin Caveats @@ -976,20 +449,12 @@ go build -buildmode plugin \ - - - - - - - -
- diff --git a/docs/guides/plugins/index.xml b/docs/guides/plugins/index.xml index e26f36d87..af5fcc2df 100644 --- a/docs/guides/plugins/index.xml +++ b/docs/guides/plugins/index.xml @@ -23,600 +23,7 @@ <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/guides/extending_kustomize/builtins" /> -<h1 id="builtin-plugins">Builtin Plugins</h1> -<p>A list of kustomize&rsquo;s builtin plugins - both -generators and transformers.</p> -<p>For each plugin, an example is given for</p> -<ul> -<li> -<p>implicitly triggering -the plugin via a dedicated kustomization -file field (e.g. the <code>AnnotationsTransformer</code> is -triggered by the <code>commonAnnotations</code> field).</p> -</li> -<li> -<p>explicitly triggering the plugin -via the <code>generators</code> or <code>transformers</code> field -(by providing a config file specifying the -plugin).</p> -</li> -</ul> -<p>The former method is convenient but limited in -power as most of the plugins arguments must -be defaulted. The latter method allows for -complete plugin argument specification.</p> -<h2 id="_annotationtransformer_"><em>AnnotationTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-commonannotations">field name: <code>commonAnnotations</code></h4> -<p>Adds annotions (non-identifying metadata) to add -all resources. Like labels, these are key value -pairs.</p> -<pre><code>commonAnnotations: - oncallPager: 800-555-1212 -</code></pre><h3 id="usage-via-plugin">Usage via plugin</h3> -<h4 id="arguments">Arguments</h4> -<blockquote> -<p>Annotations map[string]string</p> -<p>FieldSpecs []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/fieldspec.go">config.FieldSpec</a></p> -</blockquote> -<h4 id="example">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: AnnotationsTransformer -metadata: - name: not-important-to-example -annotations: - app: myApp - greeting/morning: a string with blanks -fieldSpecs: -- path: metadata/annotations - create: true -</code></pre></blockquote> -<h2 id="_configmapgenerator_"><em>ConfigMapGenerator</em></h2> -<h3 id="usage-via-kustomizationyaml-1">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-configmapgenerator">field name: <code>configMapGenerator</code></h4> -<p>Each entry in this list results in the creation of -one ConfigMap resource (it&rsquo;s a generator of n maps).</p> -<p>The example below creates three ConfigMaps. One with the names and contents of -the given files, one with key/value as data, and a third which sets an -annotation and label via <code>options</code> for that single ConfigMap.</p> -<p>Each configMapGenerator item accepts a parameter of -<code>behavior: [create|replace|merge]</code>. -This allows an overlay to modify or -replace an existing configMap from the parent.</p> -<p>Also, each entry has an <code>options</code> field, that has the -same subfields as the kustomization file&rsquo;s <code>generatorOptions</code> field.</p> -<p>This <code>options</code> field allows one to add labels and/or -annotations to the generated instance, or to individually -disable the name suffix hash for that instance. -Labels and annotations added here will not be overwritten -by the global options associated with the kustomization -file <code>generatorOptions</code> field. However, due to how -booleans behave, if the global <code>generatorOptions</code> field -specifies <code>disableNameSuffixHash: true</code>, this will -trump any attempt to locally override it.</p> -<pre><code># These labels are added to all configmaps and secrets. -generatorOptions: - labels: - fruit: apple - -configMapGenerator: -- name: my-java-server-props - behavior: merge - files: - - application.properties - - more.properties -- name: my-java-server-env-vars - literals: - - JAVA_HOME=/opt/java/jdk - - JAVA_TOOL_OPTIONS=-agentlib:hprof - options: - disableNameSuffixHash: true - labels: - pet: dog -- name: dashboards - files: - - mydashboard.json - options: - annotations: - dashboard: &quot;1&quot; - labels: - app.kubernetes.io/name: &quot;app1&quot; -</code></pre><p>It is also possible to -<a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-the-key-to-use-when-creating-a-configmap-from-a-file">define a key</a> -to set a name different than the filename.</p> -<p>The example below creates a ConfigMap -with the name of file as <code>myFileName.ini</code> -while the <em>actual</em> filename from which the -configmap is created is <code>whatever.ini</code>.</p> -<pre><code>configMapGenerator: -- name: app-whatever - files: - - myFileName.ini=whatever.ini -</code></pre><h3 id="usage-via-plugin-1">Usage via plugin</h3> -<h4 id="arguments-1">Arguments</h4> -<blockquote> -<p><a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/configmapargs.go">types.ConfigMapArgs</a></p> -</blockquote> -<h4 id="example-1">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: ConfigMapGenerator -metadata: - name: mymap -envs: -- devops.env -- uxteam.env -literals: -- FRUIT=apple -- VEGETABLE=carrot -</code></pre></blockquote> -<h2 id="_imagetagtransformer_"><em>ImageTagTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml-2">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-images">field name: <code>images</code></h4> -<p>Images modify the name, tags and/or digest for images -without creating patches. E.g. Given this -kubernetes Deployment fragment:</p> -<pre><code>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 -</code></pre><p>one can change the <code>image</code> in the following ways:</p> -<ul> -<li><code>postgres:8</code> to <code>my-registry/my-postgres:v1</code>,</li> -<li>nginx tag <code>1.7.9</code> to <code>1.8.0</code>,</li> -<li>image name <code>my-demo-app</code> to <code>my-app</code>,</li> -<li>alpine&rsquo;s tag <code>3.7</code> to a digest value</li> -</ul> -<p>all with the following <em>kustomization</em>:</p> -<pre><code>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 -</code></pre><h3 id="usage-via-plugin-2">Usage via plugin</h3> -<h4 id="arguments-2">Arguments</h4> -<blockquote> -<p>ImageTag <a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/image.go">image.Image</a></p> -<p>FieldSpecs []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/fieldspec.go">config.FieldSpec</a></p> -</blockquote> -<h4 id="example-2">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: ImageTagTransformer -metadata: - name: not-important-to-example -imageTag: - name: nginx - newTag: v2 -</code></pre></blockquote> -<h2 id="_labeltransformer_"><em>LabelTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml-3">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-commonlabels">field name: <code>commonLabels</code></h4> -<p>Adds labels to all resources and selectors</p> -<pre><code>commonLabels: - someName: someValue - owner: alice - app: bingo -</code></pre><h3 id="usage-via-plugin-3">Usage via plugin</h3> -<h4 id="arguments-3">Arguments</h4> -<blockquote> -<p>Labels map[string]string</p> -<p>FieldSpecs []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/fieldspec.go">config.FieldSpec</a></p> -</blockquote> -<h4 id="example-3">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: LabelTransformer -metadata: - name: not-important-to-example -labels: - app: myApp - env: production -fieldSpecs: -- path: metadata/labels - create: true -</code></pre></blockquote> -<h2 id="_namespacetransformer_"><em>NamespaceTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml-4">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-namespace">field name: <code>namespace</code></h4> -<p>Adds namespace to all resources</p> -<pre><code>namespace: my-namespace -</code></pre><h3 id="usage-via-plugin-4">Usage via plugin</h3> -<h4 id="arguments-4">Arguments</h4> -<blockquote> -<p><a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/objectmeta.go">types.ObjectMeta</a></p> -<p>FieldSpecs []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/fieldspec.go">config.FieldSpec</a></p> -</blockquote> -<h4 id="example-4">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin - kind: NamespaceTransformer - metadata: - name: not-important-to-example - namespace: test - fieldSpecs: - - path: metadata/namespace - create: true - - path: subjects - kind: RoleBinding - group: rbac.authorization.k8s.io - - path: subjects - kind: ClusterRoleBinding - group: rbac.authorization.k8s.io -</code></pre></blockquote> -<h2 id="_patchesjson6902_"><em>PatchesJson6902</em></h2> -<h3 id="usage-via-kustomizationyaml-5">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-patchesjson6902">field name: <code>patchesJson6902</code></h4> -<p>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 <a href="https://tools.ietf.org/html/rfc6902">https://tools.ietf.org/html/rfc6902</a></p> -<p>target field points to a kubernetes object within the same kustomization -by the object&rsquo;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</p> -<pre><code> [ - {&quot;op&quot;: &quot;add&quot;, &quot;path&quot;: &quot;/some/new/path&quot;, &quot;value&quot;: &quot;value&quot;}, - {&quot;op&quot;: &quot;replace&quot;, &quot;path&quot;: &quot;/some/existing/path&quot;, &quot;value&quot;: &quot;new value&quot;} - ] -</code></pre><p>or in YAML format as</p> -<pre><code>- op: add - path: /some/new/path - value: value -- op: replace - path: /some/existing/path - value: new value -</code></pre><pre><code>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 -</code></pre><p>The patch content can be an inline string as well:</p> -<pre><code>patchesJson6902: -- target: - version: v1 - kind: Deployment - name: my-deployment - patch: |- - - op: add - path: /some/new/path - value: value - - op: replace - path: /some/existing/path - value: &quot;new value&quot; -</code></pre><h3 id="usage-via-plugin-5">Usage via plugin</h3> -<h4 id="arguments-5">Arguments</h4> -<blockquote> -<p>Target <a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/patchtarget.go">types.PatchTarget</a></p> -<p>Path string</p> -<p>JsonOp string</p> -</blockquote> -<h4 id="example-5">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: PatchJson6902Transformer -metadata: - name: not-important-to-example -target: - group: apps - version: v1 - kind: Deployment - name: my-deploy -path: jsonpatch.json -</code></pre></blockquote> -<h2 id="_patchesstrategicmerge_"><em>PatchesStrategicMerge</em></h2> -<h3 id="usage-via-kustomizationyaml-6">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-patchesstrategicmerge">field name: <code>patchesStrategicMerge</code></h4> -<p>Each entry in this list should be either a relative -file path or an inline content -resolving to a partial or complete resource -definition.</p> -<p>The names in these (possibly partial) resource -files must match names already loaded via the -<code>resources</code> field. These entries are used to -<em>patch</em> (modify) the known resources.</p> -<p>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.</p> -<pre><code>patchesStrategicMerge: -- service_port_8888.yaml -- deployment_increase_replicas.yaml -- deployment_increase_memory.yaml -</code></pre><p>The patch content can be a inline string as well.</p> -<pre><code>patchesStrategicMerge: -- |- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: nginx - spec: - template: - spec: - containers: - - name: nginx - image: nignx:latest -</code></pre><p>Note that kustomize does not support more than one patch -for the same object that contain a <em>delete</em> directive. To remove -several fields / slice elements from an object create a single -patch that performs all the needed deletions.</p> -<h3 id="usage-via-plugin-6">Usage via plugin</h3> -<h4 id="arguments-6">Arguments</h4> -<blockquote> -<p>Paths []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/patchstrategicmerge.go">types.PatchStrategicMerge</a></p> -<p>Patches string</p> -</blockquote> -<h4 id="example-6">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: PatchStrategicMergeTransformer -metadata: - name: not-important-to-example -paths: -- patch.yaml -</code></pre></blockquote> -<h2 id="_patchtransformer_"><em>PatchTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml-7">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-patches">field name: <code>patches</code></h4> -<p>Each entry in this list should resolve to an Patch -object, which includes a patch and a target selector. -The patch can be either a strategic merge patch or a -JSON patch. it can be either a patch file or an inline -string. The target selects -resources by group, version, kind, name, namespace, -labelSelector and annotationSelector. A resource -which matches all the specified fields is selected -to apply the patch.</p> -<pre><code>patches: -- path: patch.yaml - target: - group: apps - version: v1 - kind: Deployment - name: deploy.* - labelSelector: &quot;env=dev&quot; - annotationSelector: &quot;zone=west&quot; -- patch: |- - - op: replace - path: /some/existing/path - value: new value - target: - kind: MyKind - labelSelector: &quot;env=dev&quot; -</code></pre><p>The <code>name</code> and <code>namespace</code> fields of the patch target selector are -automatically anchored regular expressions. This means that the value <code>myapp</code> -is equivalent to <code>^myapp$</code>.</p> -<h3 id="usage-via-plugin-7">Usage via plugin</h3> -<h4 id="arguments-7">Arguments</h4> -<blockquote> -<p>Path string</p> -<p>Patch string</p> -<p>Target *<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/selector.go">types.Selector</a></p> -</blockquote> -<h4 id="example-7">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: PatchTransformer -metadata: - name: not-important-to-example -patch: '[{&quot;op&quot;: &quot;replace&quot;, &quot;path&quot;: &quot;/spec/template/spec/containers/0/image&quot;, &quot;value&quot;: &quot;nginx:latest&quot;}]' -target: - name: .*Deploy - kind: Deployment -</code></pre></blockquote> -<h2 id="_prefixsuffixtransformer_"><em>PrefixSuffixTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml-8">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-names-nameprefix-namesuffix">field names: <code>namePrefix</code>, <code>nameSuffix</code></h4> -<p>Prepends or postfixes the value to the names -of all resources.</p> -<p>E.g. a deployment named <code>wordpress</code> could -become <code>alices-wordpress</code> or <code>wordpress-v2</code> -or <code>alices-wordpress-v2</code>.</p> -<pre><code>namePrefix: alices- -nameSuffix: -v2 -</code></pre><p>The suffix is appended before the content hash if -the resource type is ConfigMap or Secret.</p> -<h3 id="usage-via-plugin-8">Usage via plugin</h3> -<h4 id="arguments-8">Arguments</h4> -<blockquote> -<p>Prefix string</p> -<p>Suffix string</p> -<p>FieldSpecs []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/fieldspec.go">config.FieldSpec</a></p> -</blockquote> -<h4 id="example-8">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: PrefixSuffixTransformer -metadata: - name: not-important-to-example -prefix: baked- -suffix: -pie -fieldSpecs: - - path: metadata/name -</code></pre></blockquote> -<h2 id="_replicacounttransformer_"><em>ReplicaCountTransformer</em></h2> -<h3 id="usage-via-kustomizationyaml-9">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-replicas">field name: <code>replicas</code></h4> -<p>Replicas modified the number of replicas for a resource.</p> -<p>E.g. Given this kubernetes Deployment fragment:</p> -<pre><code>kind: Deployment -metadata: - name: deployment-name -spec: - replicas: 3 -</code></pre><p>one can change the number of replicas to 5 -by adding the following to your kustomization:</p> -<pre><code>replicas: -- name: deployment-name - count: 5 -</code></pre><p>This field accepts a list, so many resources can -be modified at the same time.</p> -<p>As this declaration does not take in a <code>kind:</code> nor a <code>group:</code> -it will match any <code>group</code> and <code>kind</code> that has a matching name and -that is one of:</p> -<ul> -<li><code>Deployment</code></li> -<li><code>ReplicationController</code></li> -<li><code>ReplicaSet</code></li> -<li><code>StatefulSet</code></li> -</ul> -<p>For more complex use cases, revert to using a patch.</p> -<h3 id="usage-via-plugin-9">Usage via plugin</h3> -<h4 id="arguments-9">Arguments</h4> -<blockquote> -<p>Replica <a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/replica.go">types.Replica</a></p> -<p>FieldSpecs []<a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/fieldspec.go">config.FieldSpec</a></p> -</blockquote> -<h4 id="example-9">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: ReplicaCountTransformer -metadata: - name: not-important-to-example -replica: - name: myapp - count: 23 -fieldSpecs: -- path: spec/replicas - create: true - kind: Deployment -- path: spec/replicas - create: true - kind: ReplicationController -</code></pre></blockquote> -<h2 id="_secretgenerator_"><em>SecretGenerator</em></h2> -<h3 id="usage-via-kustomizationyaml-10">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-secretgenerator">field name: <code>secretGenerator</code></h4> -<p>Each entry in the argument list -results in the creation of -one Secret resource -(it&rsquo;s a generator of n secrets).</p> -<p>This works like the <code>configMapGenerator</code> field -described above.</p> -<pre><code>secretGenerator: -- name: app-tls - files: - - secret/tls.cert - - secret/tls.key - type: &quot;kubernetes.io/tls&quot; -- name: app-tls-namespaced - # you can define a namespace to generate - # a secret in, defaults to: &quot;default&quot; - namespace: apps - files: - - tls.crt=catsecret/tls.cert - - tls.key=secret/tls.key - type: &quot;kubernetes.io/tls&quot; -- name: env_file_secret - envs: - - env.txt - type: Opaque -- name: secret-with-annotation - files: - - app-config.yaml - type: Opaque - options: - annotations: - app_config: &quot;true&quot; - labels: - app.kubernetes.io/name: &quot;app2&quot; -</code></pre><h3 id="usage-via-plugin-10">Usage via plugin</h3> -<h4 id="arguments-10">Arguments</h4> -<blockquote> -<p><a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/objectmeta.go">types.ObjectMeta</a></p> -<p><a href="https://github.com/kubernetes-sigs/kustomize/tree/master/api/types/secretargs.go">types.SecretArgs</a></p> -</blockquote> -<h4 id="example-10">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: SecretGenerator -metadata: - name: my-secret - namespace: whatever -behavior: merge -envs: -- a.env -- b.env -files: -- obscure=longsecret.txt -literals: -- FRUIT=apple -- VEGETABLE=carrot -</code></pre></blockquote> -<h2 id="_helmchartinflationgenerator_"><em>HelmChartInflationGenerator</em></h2> -<h3 id="usage-via-kustomizationyaml-11">Usage via <code>kustomization.yaml</code></h3> -<h4 id="field-name-helmchartinflationgenerator">field name: <code>helmChartInflationGenerator</code></h4> -<p>Each entry in the argument list results in the pulling -and rendering of a helm chart.</p> -<p>Each entry can have following fields:</p> -<ul> -<li><code>chartName</code>: The name of the chart that you want to use.</li> -<li><code>chartRepoUrl</code>: [Optional] The URL of the repository which contains the chart. If -this is provided, the plugin will try to fetch remote charts. Otherwise it will -try to load local chart in <code>chartHome</code>.</li> -<li><code>chartVersion</code>: [Optional] Version of the chart. Will use latest version -if this is omitted.</li> -<li><code>chartHome</code>: [Optional] Provide the path to the parent directory for local chart.</li> -<li><code>chartRelease</code>: [Optional] The name of the repo where to find the chart.</li> -<li><code>values</code>: [Optional] A path to the values file.</li> -<li><code>releaseName</code>: [Optional] The release name that will be set in the chart.</li> -<li><code>releaseNamespace</code>: [Optional] The namespace which will be used by <code>--namespace</code> -flag in <code>helm template</code> command.</li> -<li><code>helmBin</code>: [Optional] Path to helm binary. Default is <code>helm</code>.</li> -<li><code>helmHome</code>: [Optional] Path to helm home directory.</li> -</ul> -<pre><code>helmChartInflationGenerator: -- chartName: minecraft - chartRepoUrl: https://kubernetes-charts.storage.googleapis.com - chartVersion: v1.2.0 - releaseName: test - releaseNamespace: testNamespace -</code></pre><h3 id="usage-via-plugin-11">Usage via plugin</h3> -<h4 id="arguments-11">Arguments</h4> -<blockquote> -<p>ChartName string</p> -<p>ChartVersion string</p> -<p>ChartRepoURL string</p> -<p>ChartHome string</p> -<p>ChartRepoName string</p> -<p>HelmBin string</p> -<p>HelmHome string</p> -<p>Values string</p> -<p>ReleaseName string</p> -<p>ReleaseNamespace string</p> -</blockquote> -<h4 id="example-11">Example</h4> -<blockquote> -<pre><code>apiVersion: builtin -kind: HelmChartInflationGenerator -metadata: - name: myMap -chartName: minecraft -chartRepoUrl: https://kubernetes-charts.storage.googleapis.com -chartVersion: v1.2.0 -helmBin: /usr/bin/helm -helmHome: /tmp/helmHome -releaseName: test -releaseNamespace: testNamespace -values: values.yaml -</code></pre></blockquote> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -631,160 +38,7 @@ values: values.yaml <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/guides/extending_kustomize/execpluginguidedexample" /> -<p>This is a (no reading allowed!) 60 second copy/paste guided -example. Full plugin docs <a href="..">here</a>.</p> -<p>This demo writes and uses a somewhat ridiculous -<em>exec</em> plugin (written in bash) that generates a -<code>ConfigMap</code>.</p> -<p>This is a guide to try it without damaging your -current setup.</p> -<h4 id="requirements">requirements</h4> -<ul> -<li>linux, git, curl, Go 1.13</li> -</ul> -<h2 id="make-a-place-to-work">Make a place to work</h2> -<pre><code>DEMO=$(mktemp -d) -</code></pre><h2 id="create-a-kustomization">Create a kustomization</h2> -<p>Make a kustomization directory to -hold all your config:</p> -<pre><code>MYAPP=$DEMO/myapp -mkdir -p $MYAPP -</code></pre><p>Make a deployment config:</p> -<pre><code>cat &lt;&lt;'EOF' &gt;$MYAPP/deployment.yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: the-deployment -spec: - replicas: 3 - template: - spec: - containers: - - name: the-container - image: monopole/hello:1 - command: [&quot;/hello&quot;, - &quot;--port=8080&quot;, - &quot;--date=$(THE_DATE)&quot;, - &quot;--enableRiskyFeature=$(ENABLE_RISKY)&quot;] - ports: - - containerPort: 8080 - env: - - name: THE_DATE - valueFrom: - configMapKeyRef: - name: the-map - key: today - - name: ALT_GREETING - valueFrom: - configMapKeyRef: - name: the-map - key: altGreeting - - name: ENABLE_RISKY - valueFrom: - configMapKeyRef: - name: the-map - key: enableRisky -EOF -</code></pre><p>Make a service config:</p> -<pre><code>cat &lt;&lt;EOF &gt;$MYAPP/service.yaml -kind: Service -apiVersion: v1 -metadata: - name: the-service -spec: - type: LoadBalancer - ports: - - protocol: TCP - port: 8666 - targetPort: 8080 -EOF -</code></pre><p>Now make a config file for the plugin -you&rsquo;re about to write.</p> -<p>This config file is just another k8s resource -object. The values of its <code>apiVersion</code> and <code>kind</code> -fields are used to <em>find</em> the plugin code on your -filesystem (more on this later).</p> -<pre><code>cat &lt;&lt;'EOF' &gt;$MYAPP/cmGenerator.yaml -apiVersion: myDevOpsTeam -kind: SillyConfigMapGenerator -metadata: - name: whatever -argsOneLiner: Bienvenue true -EOF -</code></pre><p>Finally, make a kustomization file -referencing all of the above:</p> -<pre><code>cat &lt;&lt;EOF &gt;$MYAPP/kustomization.yaml -commonLabels: - app: hello -resources: -- deployment.yaml -- service.yaml -generators: -- cmGenerator.yaml -EOF -</code></pre><p>Review the files</p> -<pre><code>ls -C1 $MYAPP -</code></pre><h2 id="make-a-home-for-plugins">Make a home for plugins</h2> -<p>Plugins must live in a particular place for -kustomize to find them.</p> -<p>This demo will use the ephemeral directory:</p> -<pre><code>PLUGIN_ROOT=$DEMO/kustomize/plugin -</code></pre><p>The plugin config defined above in -<code>$MYAPP/cmGenerator.yaml</code> specifies:</p> -<blockquote> -<pre><code>apiVersion: myDevOpsTeam -kind: SillyConfigMapGenerator -</code></pre></blockquote> -<p>This means the plugin must live in a directory -named:</p> -<pre><code>MY_PLUGIN_DIR=$PLUGIN_ROOT/myDevOpsTeam/sillyconfigmapgenerator - -mkdir -p $MY_PLUGIN_DIR -</code></pre><p>The directory name is the plugin config&rsquo;s -<em>apiVersion</em> followed by its lower-cased <em>kind</em>.</p> -<p>A plugin gets its own directory to hold itself, -its tests and any supplemental data files it -might need.</p> -<h2 id="create-the-plugin">Create the plugin</h2> -<p>There are two kinds of plugins, <em>exec</em> and <em>Go</em>.</p> -<p>Make an <em>exec</em> plugin, installing it to the -correct directory and file name. The file name -must match the plugin&rsquo;s <em>kind</em> (in this case, -<code>SillyConfigMapGenerator</code>):</p> -<pre><code>cat &lt;&lt;'EOF' &gt;$MY_PLUGIN_DIR/SillyConfigMapGenerator -#!/bin/bash -# Skip the config file name argument. -shift -today=`date +%F` -echo &quot; -kind: ConfigMap -apiVersion: v1 -metadata: - name: the-map -data: - today: $today - altGreeting: &quot;$1&quot; - enableRisky: &quot;$2&quot; -&quot; -EOF -</code></pre><p>By definition, an <em>exec</em> plugin must be executable:</p> -<pre><code>chmod a+x $MY_PLUGIN_DIR/SillyConfigMapGenerator -</code></pre><h2 id="install-kustomize">Install kustomize</h2> -<p>Per the <a href="https://kubernetes-sigs.github.io/kustomize/kustomize/installation">instructions</a>:</p> -<pre><code>curl -s &quot;https://raw.githubusercontent.com/\ -kubernetes-sigs/kustomize/master/hack/install_kustomize.sh&quot; | bash -mkdir -p $DEMO/bin -mv kustomize $DEMO/bin -</code></pre><h2 id="review-the-layout">Review the layout</h2> -<pre><code>tree $DEMO -</code></pre><h2 id="build-your-app-using-the-plugin">Build your app, using the plugin</h2> -<pre><code>XDG_CONFIG_HOME=$DEMO $DEMO/bin/kustomize build --enable_alpha_plugins $MYAPP -</code></pre><p>Above, if you had set</p> -<blockquote> -<pre><code>PLUGIN_ROOT=$HOME/.config/kustomize/plugin -</code></pre></blockquote> -<p>there would be no need to use <code>XDG_CONFIG_HOME</code> in the -<em>kustomize</em> command above.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -799,90 +53,7 @@ mv kustomize $DEMO/bin <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/guides/extending_kustomize/goplugincaveats" /> -<p>A <em>Go plugin</em> is a compilation artifact described -by the Go <a href="https://golang.org/pkg/plugin">plugin package</a>. It is built with -special flags and cannot run on its own. -It must be loaded into a running Go program.</p> -<blockquote> -<p>A normal program written in Go might be usable -as <em>exec plugin</em>, but is not a <em>Go plugin</em>.</p> -</blockquote> -<p>Go plugins allow kustomize extensions that run -without the cost marshalling/unmarshalling all -resource data to/from a subprocess for each plugin -run. The Go plugin API assures a certain level of -consistency to avoid confusing downstream -transformers.</p> -<p>Go plugins work as described in the <a href="https://golang.org/pkg/plugin">plugin -package</a>, but fall short of common notions -associated with the word <em>plugin</em>.</p> -<h2 id="the-skew-problem">The skew problem</h2> -<p>Go plugin compilation creates an <a href="https://en.wikipedia.org/wiki/Executable_and_Linkable_Format">ELF</a> formatted -<code>.so</code> file, which by definition has no information -about the provenance of the object code.</p> -<p>Skew between the compilation conditions (versions -of package dependencies, <code>GOOS</code>, <code>GOARCH</code>) of the -main program ELF and the plugin ELF will cause -plugin load failure, with non-helpful error -messages.</p> -<p>Exec plugins also lack provenance, but won&rsquo;t fail -due to compilation skew.</p> -<p>In either case, the only sensible way to share a -plugin is as some kind of <em>bundle</em> (a git repo -URL, a git archive file, a tar file, etc.) -containing source code, tests and associated data, -unpackable under -<code>$XDG_CONFIG_HOME/kustomize/plugin</code>.</p> -<p>In the case of a Go plugin, an <em>end user</em> -accepting a shared plugin <em>must compile both -kustomize and the plugin</em>.</p> -<p>This means a one-time run of</p> -<pre><code># Or whatever is appropriate at time of reading -GOPATH=${whatever} GO111MODULE=on go get sigs.k8s.io/kustomize/api -</code></pre><p>and then a normal development cycle using</p> -<pre><code>go build -buildmode plugin \ - -o ${wherever}/${kind}.so ${wherever}/${kind}.go -</code></pre><p>with paths and the release version tag (e.g. <code>v3.0.0</code>) -adjusted as needed.</p> -<p>For comparison, consider what one -must do to write a <a href="https://www.tensorflow.org/guide/extend/op">tensorflow plugin</a>.</p> -<h2 id="why-support-go-plugins">Why support Go plugins</h2> -<h3 id="safety">Safety</h3> -<p>The Go plugin developer sees the same API offered -to native kustomize operations, assuring certain -semantics, invariants, checks, etc. An exec -plugin sub-process dealing with this via -stdin/stdout will have an easier time screwing -things up for downstream transformers and -consumers.</p> -<p>Minor point: if the plugin reads files via -the kustomize-provided file <code>Loader</code> interface, it -will be constrained by kustomize file loading -restrictions. Of course, nothing but a code audit -prevents a Go plugin from importing the <code>io</code> package -and doing whatever it wants.</p> -<h3 id="debugging">Debugging</h3> -<p>A Go plugin developer can debug the plugin <em>in -situ</em>, setting breakpoints inside the plugin and -elsewhere while running a plugin in feature tests.</p> -<p>To get the best of both worlds (shareability and safety), -a developer can write an <code>.go</code> program that functions -as an <em>exec plugin</em>, but can be processed by <code>go generate</code> -to emit a <em>Go plugin</em> (or vice versa).</p> -<h3 id="unit-of-contribution">Unit of contribution</h3> -<p>All the builtin generators and transformers -are themselves Go plugins. This means that -the kustomize maintainers can promote a contributed -plugin to a builtin without needing code changes -(beyond those mandated by normal code review).</p> -<h3 id="ecosystems-grow-through-use">Ecosystems grow through use</h3> -<p>Tooling could ease Go plugin <em>sharing</em>, but this -requires some critical mass of Go plugin -<em>authoring</em>, which in turn is hampered by -confusion around sharing. <a href="https://github.com/golang/go/wiki/Modules">Go modules</a>, once they -are more widely adopted, will solve the -biggest plugin sharing difficulty: ambiguous -plugin vs host dependencies.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> @@ -897,236 +68,7 @@ plugin vs host dependencies.</p> <meta http-equiv="refresh" content="0; url=https://kubectl.docs.kubernetes.io/guides/extending_kustomize/gopluginguidedexample" /> -<h1 id="go-plugin-guided-example-for-linux">Go Plugin Guided Example for Linux</h1> -<p>This is a (no reading allowed!) 60 second copy/paste guided -example.</p> -<p>Full plugin docs <a href="README.md">here</a>. -Be sure to read the <a href="goPluginCaveats.md">Go plugin caveats</a>.</p> -<p>This demo uses a Go plugin, <code>SopsEncodedSecrets</code>, -that lives in the <a href="https://github.com/monopole/sopsencodedsecrets">sopsencodedsecrets repository</a>. -This is an inprocess <a href="https://golang.org/pkg/plugin">Go plugin</a>, not an -sub-process exec plugin that happens to be written -in Go (which is another option for Go authors).</p> -<p>This is a guide to try it without damaging your -current setup.</p> -<h4 id="requirements">requirements</h4> -<ul> -<li>linux, git, curl, Go 1.13</li> -</ul> -<p>For encryption</p> -<ul> -<li>gpg</li> -</ul> -<p>Or</p> -<ul> -<li>Google cloud (gcloud) install</li> -<li>a Google account with KMS permission</li> -</ul> -<h2 id="make-a-place-to-work">Make a place to work</h2> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#8f5902;font-style:italic"># Keeping these separate to avoid cluttering the DEMO dir.</span> -<span style="color:#000">DEMO</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>mktemp -d<span style="color:#204a87;font-weight:bold">)</span> -<span style="color:#000">tmpGoPath</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span>mktemp -d<span style="color:#204a87;font-weight:bold">)</span> -</code></pre></div><h2 id="install-kustomize">Install kustomize</h2> -<p>Need v3.0.0 for what follows, and you must <em>compile</em> -it (not download the binary from the release page):</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">GOPATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$tmpGoPath</span> go install sigs.k8s.io/kustomize/kustomize -</code></pre></div><h2 id="make-a-home-for-plugins">Make a home for plugins</h2> -<p>A kustomize plugin is fully determined by -its configuration file and source code.</p> -<p>Kustomize plugin configuration files are formatted -as kubernetes resource objects, meaning -<code>apiVersion</code>, <code>kind</code> and <code>metadata</code> are <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields">required -fields</a> in these config files.</p> -<p>The kustomize program reads the config file -(because the config file name appears in the -<code>generators</code> or <code>transformers</code> field in the -kustomization file), then locates the Go plugin&rsquo;s -object code at the following location:</p> -<blockquote> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">$XDG_CONFIG_HOME</span>/kustomize/plugin/<span style="color:#000">$apiVersion</span>/<span style="color:#000">$lKind</span>/<span style="color:#000">$kind</span>.so -</code></pre></div></blockquote> -<p>where <code>lKind</code> holds the lowercased kind. The -plugin is then loaded and fed its config, and the -plugin&rsquo;s output becomes part of the overall -<code>kustomize build</code> process.</p> -<p>The same plugin might be used multiple times in -one kustomize build, but with different config -files. Also, kustomize might customize config -data before sending it to the plugin, for whatever -reason. For these reasons, kustomize owns the -mapping between plugins and config data; it&rsquo;s not -left to plugins to find their own config.</p> -<p>This demo will house the plugin it uses at the -ephemeral directory</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">PLUGIN_ROOT</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$DEMO</span>/kustomize/plugin -</code></pre></div><p>and ephemerally set <code>XDG_CONFIG_HOME</code> on a command -line below.</p> -<h3 id="what-apiversion-and-kind">What apiVersion and kind</h3> -<p>At this stage in the development of kustomize -plugins, plugin code doesn&rsquo;t know or care what -<code>apiVersion</code> or <code>kind</code> appears in the config file -sent to it.</p> -<p>The plugin could check these fields, but it&rsquo;s the -remaining fields that provide actual configuration -data, and at this point the successful parsing of -these other fields are the only thing that matters -to a plugin.</p> -<p>This demo uses a plugin called <em>SopsEncodedSecrets</em>, -and it lives in the <a href="https://github.com/monopole/sopsencodedsecrets">SopsEncodedSecrets repository</a>.</p> -<p>Somewhat arbitrarily, we&rsquo;ll chose to install -this plugin with</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">apiVersion</span><span style="color:#ce5c00;font-weight:bold">=</span>mygenerators -<span style="color:#000">kind</span><span style="color:#ce5c00;font-weight:bold">=</span>SopsEncodedSecrets -</code></pre></div><h3 id="define-the-plugins-home-dir">Define the plugin&rsquo;s home dir</h3> -<p>By convention, the ultimate home of the plugin -code and supplemental data, tests, documentation, -etc. is the lowercase form of its kind.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">lKind</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span><span style="color:#204a87">echo</span> <span style="color:#000">$kind</span> <span style="color:#000;font-weight:bold">|</span> awk <span style="color:#4e9a06">&#39;{print tolower($0)}&#39;</span><span style="color:#204a87;font-weight:bold">)</span> -</code></pre></div><h3 id="download-the-sopsencodedsecrets-plugin">Download the SopsEncodedSecrets plugin</h3> -<p>In this case, the repo name matches the lowercase -kind already, so we just clone the repo and get -the proper directory name automatically:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir -p <span style="color:#000">$PLUGIN_ROOT</span>/<span style="color:#4e9a06">${</span><span style="color:#000">apiVersion</span><span style="color:#4e9a06">}</span> -<span style="color:#204a87">cd</span> <span style="color:#000">$PLUGIN_ROOT</span>/<span style="color:#4e9a06">${</span><span style="color:#000">apiVersion</span><span style="color:#4e9a06">}</span> -git clone git@github.com:monopole/sopsencodedsecrets.git -</code></pre></div><p>Remember this directory:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">MY_PLUGIN_DIR</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$PLUGIN_ROOT</span>/<span style="color:#4e9a06">${</span><span style="color:#000">apiVersion</span><span style="color:#4e9a06">}</span>/<span style="color:#4e9a06">${</span><span style="color:#000">lKind</span><span style="color:#4e9a06">}</span> -</code></pre></div><h3 id="try-the-plugins-own-test">Try the plugin&rsquo;s own test</h3> -<p>Plugins may come with their own tests. -This one does, and it hopefully passes:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#204a87">cd</span> <span style="color:#000">$MY_PLUGIN_DIR</span> -go <span style="color:#204a87">test</span> SopsEncodedSecrets_test.go -</code></pre></div><p>Build the object code for use by kustomize:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#204a87">cd</span> <span style="color:#000">$MY_PLUGIN_DIR</span> -<span style="color:#000">GOPATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$tmpGoPath</span> go build -buildmode plugin -o <span style="color:#4e9a06">${</span><span style="color:#000">kind</span><span style="color:#4e9a06">}</span>.so <span style="color:#4e9a06">${</span><span style="color:#000">kind</span><span style="color:#4e9a06">}</span>.go -</code></pre></div><p>This step may succeed, but kustomize might -ultimately fail to load the plugin because of -dependency <a href="https://kubernetes-sigs.github.io/kustomize/docs/plugins/README.md#caveats">skew</a>.</p> -<p>On load failure</p> -<ul> -<li> -<p>be sure to build the plugin with the same -version of Go (<em>go1.13</em>) on the same <code>$GOOS</code> -(<em>linux</em>) and <code>$GOARCH</code> (<em>amd64</em>) used to build -the kustomize being <a href="#install-kustomize">used in this demo</a>.</p> -</li> -<li> -<p>change the plugin&rsquo;s dependencies in its <code>go.mod</code> -to match the versions used by kustomize (check -kustomize&rsquo;s <code>go.mod</code> used in its tagged commit).</p> -</li> -</ul> -<p>Lacking tools and metadata to allow this to be -automated, there won&rsquo;t be a Go plugin ecosystem.</p> -<p>Kustomize has adopted a Go plugin architecture as -to ease accept new generators and transformers -(just write a plugin), and to be sure that native -operations (also constructed and tested as -plugins) are compartmentalized, orderable and -reusable instead of bizarrely woven throughout the -code as a individual special cases.</p> -<h2 id="create-a-kustomization">Create a kustomization</h2> -<p>Make a kustomization directory to -hold all your config:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">MYAPP</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$DEMO</span>/myapp -mkdir -p <span style="color:#000">$MYAPP</span> -</code></pre></div><p>Make a config file for the SopsEncodedSecrets plugin.</p> -<p>Its <code>apiVersion</code> and <code>kind</code> allow the plugin to be -found:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat <span style="color:#4e9a06">&lt;&lt;EOF &gt;$MYAPP/secGenerator.yaml -</span><span style="color:#4e9a06">apiVersion: ${apiVersion} -</span><span style="color:#4e9a06">kind: ${kind} -</span><span style="color:#4e9a06">metadata: -</span><span style="color:#4e9a06"> name: mySecretGenerator -</span><span style="color:#4e9a06">name: forbiddenValues -</span><span style="color:#4e9a06">namespace: production -</span><span style="color:#4e9a06">file: myEncryptedData.yaml -</span><span style="color:#4e9a06">keys: -</span><span style="color:#4e9a06">- ROCKET -</span><span style="color:#4e9a06">- CAR -</span><span style="color:#4e9a06">EOF</span> -</code></pre></div><p>This plugin expects to find more data in -<code>myEncryptedData.yaml</code>; we&rsquo;ll get to that shortly.</p> -<p>Make a kustomization file referencing the plugin -config:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat <span style="color:#4e9a06">&lt;&lt;EOF &gt;$MYAPP/kustomization.yaml -</span><span style="color:#4e9a06">commonLabels: -</span><span style="color:#4e9a06"> app: hello -</span><span style="color:#4e9a06">generators: -</span><span style="color:#4e9a06">- secGenerator.yaml -</span><span style="color:#4e9a06">EOF</span> -</code></pre></div><p>Now generate the real encrypted data.</p> -<h3 id="assure-you-have-an-encryption-tool-installed">Assure you have an encryption tool installed</h3> -<p>We&rsquo;re going to use <a href="https://github.com/mozilla/sops">sops</a> to encode a file. Choose either GPG or Google Cloud KMS as the secret provider to continue.</p> -<h4 id="gpg">GPG</h4> -<p>Try this:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --list-keys -</code></pre></div><p>If it returns a list, presumably you&rsquo;ve already created keys. If not, try import test keys from sops for dev.</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">curl https://raw.githubusercontent.com/mozilla/sops/master/pgp/sops_functional_tests_key.asc <span style="color:#000;font-weight:bold">|</span> gpg --import -<span style="color:#000">SOPS_PGP_FP</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#4e9a06">&#34;1022470DE3F0BC54BC6AB62DE05550BC07FB1A0A&#34;</span> -</code></pre></div><h4 id="google-cloude-kms">Google Cloude KMS</h4> -<p>Try this:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gcloud kms keys list --location global --keyring sops -</code></pre></div><p>If it succeeds, presumably you&rsquo;ve already created keys and placed them in a keyring called sops. If not, do this:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gcloud kms keyrings create sops --location global -gcloud kms keys create sops-key --location global <span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> --keyring sops --purpose encryption -</code></pre></div><p>Extract your keyLocation for use below:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">keyLocation</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">$(</span><span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> gcloud kms keys list --location global --keyring sops <span style="color:#000;font-weight:bold">|</span><span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> grep GOOGLE <span style="color:#000;font-weight:bold">|</span> cut -d <span style="color:#4e9a06">&#34; &#34;</span> -f1<span style="color:#204a87;font-weight:bold">)</span> -<span style="color:#204a87">echo</span> <span style="color:#000">$keyLocation</span> -</code></pre></div><h3 id="install-sops">Install <code>sops</code></h3> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">GOPATH</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$tmpGoPath</span> go install go.mozilla.org/sops/cmd/sops -</code></pre></div><h3 id="create-data-encrypted-with-your-private-key">Create data encrypted with your private key</h3> -<p>Create raw data to encrypt:</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat <span style="color:#4e9a06">&lt;&lt;EOF &gt;$MYAPP/myClearData.yaml -</span><span style="color:#4e9a06">VEGETABLE: carrot -</span><span style="color:#4e9a06">ROCKET: saturn-v -</span><span style="color:#4e9a06">FRUIT: apple -</span><span style="color:#4e9a06">CAR: dymaxion -</span><span style="color:#4e9a06">EOF</span> -</code></pre></div><p>Encrypt the data into file the plugin wants to read:</p> -<p>With PGP</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">$tmpGoPath</span>/bin/sops --encrypt <span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> --pgp <span style="color:#000">$SOPS_PGP_FP</span> <span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> <span style="color:#000">$MYAPP</span>/myClearData.yaml &gt;<span style="color:#000">$MYAPP</span>/myEncryptedData.yaml -</code></pre></div><p>Or GCP KMS</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">$tmpGoPath</span>/bin/sops --encrypt <span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> --gcp-kms <span style="color:#000">$keyLocation</span> <span style="color:#4e9a06">\ -</span><span style="color:#4e9a06"></span> <span style="color:#000">$MYAPP</span>/myClearData.yaml &gt;<span style="color:#000">$MYAPP</span>/myEncryptedData.yaml -</code></pre></div><p>Review the files</p> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">tree <span style="color:#000">$DEMO</span> -</code></pre></div><p>This should look something like:</p> -<blockquote> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">/tmp/tmp.0kIE9VclPt -├── kustomize -│   └── plugin -│   └── mygenerators -│   └── sopsencodedsecrets -│   ├── go.mod -│   ├── go.sum -│   ├── LICENSE -│   ├── README.md -│   ├── SopsEncodedSecrets.go -│   ├── SopsEncodedSecrets.so -│   └── SopsEncodedSecrets_test.go -└── myapp - ├── kustomization.yaml - ├── myClearData.yaml - ├── myEncryptedData.yaml - └── secGenerator.yaml -</code></pre></div></blockquote> -<h2 id="build-your-app-using-the-plugin">Build your app, using the plugin</h2> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">XDG_CONFIG_HOME</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$DEMO</span> <span style="color:#000">$tmpGoPath</span>/bin/kustomize build --enable_alpha_plugins <span style="color:#000">$MYAPP</span> -</code></pre></div><p>This should emit a kubernetes secret, with -encrypted data for the names <code>ROCKET</code> and <code>CAR</code>.</p> -<p>Above, if you had set</p> -<blockquote> -<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#000">PLUGIN_ROOT</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">$HOME</span>/.config/kustomize/plugin -</code></pre></div></blockquote> -<p>there would be no need to use <code>XDG_CONFIG_HOME</code> in the -<em>kustomize</em> command above.</p> +<p>Moved to <a href="https://github.com/kubernetes-sigs/cli-experimental">https://github.com/kubernetes-sigs/cli-experimental</a></p> diff --git a/docs/installation/binaries/index.html b/docs/installation/binaries/index.html index 72d909b72..099b3141d 100644 --- a/docs/installation/binaries/index.html +++ b/docs/installation/binaries/index.html @@ -370,12 +370,8 @@

Binaries

Install Kustomize by downloading precompiled binaries.
-

Binaries at various versions for linux, MacOs and Windows are published on the releases page.

-

The following script detects your OS and downloads the appropriate kustomize binary to your -current working directory.

-
curl -s "https://raw.githubusercontent.com/\
-kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -398,7 +394,7 @@ kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash - diff --git a/docs/installation/chocolatey/index.html b/docs/installation/chocolatey/index.html index 804c6f95d..8727ed483 100644 --- a/docs/installation/chocolatey/index.html +++ b/docs/installation/chocolatey/index.html @@ -370,13 +370,7 @@

Chocolatey

Install Kustomize for Windows using Chocolatey
-
choco install kustomize
-

For support on the chocolatey package -and prior releases, see:

- +

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -400,7 +394,7 @@ and prior releases, see:

- diff --git a/docs/installation/homebrew/index.html b/docs/installation/homebrew/index.html index 454a0020e..b2ba12f17 100644 --- a/docs/installation/homebrew/index.html +++ b/docs/installation/homebrew/index.html @@ -370,11 +370,8 @@

Homebrew / MacPorts

Install Kustomize for MacOS using Homebrew or MacPorts
-

For Homebrew users:

-
brew install kustomize
-

For MacPorts users:

-
sudo port install kustomize
-
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

+
@@ -397,7 +394,7 @@ - diff --git a/docs/installation/index.html b/docs/installation/index.html index f65b2f01b..7222fa247 100644 --- a/docs/installation/index.html +++ b/docs/installation/index.html @@ -357,6 +357,7 @@

Installation

+

Moved to https://github.com/kubernetes-sigs/cli-experimental

@@ -408,7 +409,7 @@ - diff --git a/docs/installation/source/index.html b/docs/installation/source/index.html index 5d2eaabf1..6897f91f4 100644 --- a/docs/installation/source/index.html +++ b/docs/installation/source/index.html @@ -334,13 +334,6 @@ - -
@@ -377,30 +370,8 @@

Go Source

Install Kustomize from the Go source code
-

Requires Go to be installed.

-

Install the kustomize CLI from source without cloning the repo

-
GOBIN=$(pwd)/ GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3
-

Install the kustomize CLI from local source with cloning the repo

-
# Need go 1.13 or higher
-unset GOPATH
-# see https://golang.org/doc/go1.13#modules
-unset GO111MODULES
+

Moved to https://github.com/kubernetes-sigs/cli-experimental

-# clone the repo -git clone git@github.com:kubernetes-sigs/kustomize.git -# get into the repo root -cd kustomize - -# Optionally checkout a particular tag if you don't -# want to build at head -git checkout kustomize/v3.2.3 - -# build the binary -(cd kustomize; go install .) - -# run it -~/go/bin/kustomize version -
@@ -423,7 +394,7 @@ git checkout kustomize/v3.2.3 - diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 011d22c8c..5d5633f31 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -4,7 +4,7 @@ https://kubernetes-sigs.github.io/kustomize/en/sitemap.xml - 2020-11-04T11:15:40-08:00 + 2020-11-11T08:29:43-08:00