From d5b5adfc5cd6a319d5e7c381a30bbad1f96f177f Mon Sep 17 00:00:00 2001 From: Jingfang Liu Date: Tue, 10 Apr 2018 14:32:02 -0700 Subject: [PATCH 01/43] change kinflate to kustomize --- Makefile | 25 +++ README.md | 52 +++++ build/README.md | 16 ++ build/build.sh | 51 +++++ build/cloudbuild.yaml | 30 +++ build/cloudbuild_local.yaml | 31 +++ demos/README.md | 13 ++ demos/helloWorld.md | 432 ++++++++++++++++++++++++++++++++++++ demos/mySql.md | 239 ++++++++++++++++++++ demos/springboot.md | 350 +++++++++++++++++++++++++++++ demos/tree1.png | Bin 0 -> 8738 bytes demos/tree2.png | Bin 0 -> 14442 bytes docs/Kube-manifest.yaml | 22 ++ docs/base.jpg | Bin 0 -> 41948 bytes docs/glossary.md | 261 ++++++++++++++++++++++ docs/overlay.jpg | Bin 0 -> 50739 bytes docs/workflowBespoke.jpg | Bin 0 -> 37063 bytes docs/workflowOts.jpg | Bin 0 -> 44295 bytes docs/workflows.md | 127 +++++++++++ kustomize.go | 34 +++ test/main.sh | 49 ++++ version/version.go | 67 ++++++ 22 files changed, 1799 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100644 build/README.md create mode 100755 build/build.sh create mode 100644 build/cloudbuild.yaml create mode 100644 build/cloudbuild_local.yaml create mode 100644 demos/README.md create mode 100644 demos/helloWorld.md create mode 100644 demos/mySql.md create mode 100644 demos/springboot.md create mode 100644 demos/tree1.png create mode 100644 demos/tree2.png create mode 100644 docs/Kube-manifest.yaml create mode 100644 docs/base.jpg create mode 100644 docs/glossary.md create mode 100644 docs/overlay.jpg create mode 100644 docs/workflowBespoke.jpg create mode 100644 docs/workflowOts.jpg create mode 100644 docs/workflows.md create mode 100644 kustomize.go create mode 100755 test/main.sh create mode 100644 version/version.go diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..9b0d1685ee --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +SHELL := /bin/bash -euo pipefail + +config_file_name = Kube-manifest.yaml +example_config = docs/$(config_file_name) + +.PHONY: all +all: docs + +# In a branch, run 'make docs' to update docs with +# generated code, then merge it to master. +docs: $(example_config) + +# Use kustomize to create the standard kustomize configuration +# file that appears in the website's documentation. +$(example_config): /tmp/bin/kustomize + rm -f TMP + echo "# This is a generated example; do not edit. Rebuild with 'make docs'." >> TMP + echo " " >> TMP + /tmp/bin/kustomize init + cat $(config_file_name) >> TMP + mv TMP $(example_config) + rm $(config_file_name) + +/tmp/bin/kustomize: + go build -o /tmp/bin/kustomize kustomize.go diff --git a/README.md b/README.md new file mode 100644 index 0000000000..c3c474f3e6 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# kustomize + +[applied]: docs/glossary.md#apply +[base]: docs/glossary.md#base +[declarative configuration]: docs/glossary.md#declarative-application-management +[demo]: demos/README.md +[imageBase]: docs/base.jpg +[imageOverlay]: docs/overlay.jpg +[manifest]: docs/glossary.md#manifest +[overlay]: docs/glossary.md#overlay +[resources]: docs/glossary.md#resource +[workflows]: docs/workflows.md + +`kustomize` is a command line tool supporting +template-free customization of declarative +configuration targetted to kubernetes. + +## Installation + +Assumes [Go](https://golang.org/) is installed +and your `PATH` contains `$GOPATH/bin`: + + +``` +go get k8s.io/kubectl/cmd/kustomize +``` + +## Usage + +#### 1) Make a base + +A [base] configuration is a [manifest] listing a set of +k8s [resources] - deployments, services, configmaps, +secrets that serve some common purpose. + +![base image][imageBase] + +#### 2) Customize it with overlays + +An [overlay] customizes your base along different dimensions +for different purposes or different teams, e.g. for +_development, staging and production_. + +![overlay image][imageOverlay] + +#### 3) Run kustomize + +Run kustomize on your overlay. The result +is printed to `stdout` as a set of complete +resources, ready to be [applied] to a cluster. + +For more details, try a [demo]. diff --git a/build/README.md b/build/README.md new file mode 100644 index 0000000000..95ba60c790 --- /dev/null +++ b/build/README.md @@ -0,0 +1,16 @@ +## Steps to run build locally + +Install container-builder-local from github and define GOOS, GOARCH, OUTPUT env +variables and run following command + +```sh +container-builder-local --config=cmd/kustomize/build/cloudbuild_local.yaml --dryrun=false --substitutions=_GOOS=$GOOS,_GOARCH=$GOARCH --write-workspace=$OUTPUT . +``` + +## Steps to submit build to Google container builder + +You need to be at the repo level to be able to run the following command + +``` +gcloud container builds submit . --config=cmd/kustomize/build/cloudbuild.yaml --substitutions=_GOOS=$GOOS,_GOARCH=$GOARCH +``` diff --git a/build/build.sh b/build/build.sh new file mode 100755 index 0000000000..a557fcf2a8 --- /dev/null +++ b/build/build.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e +set -x + +# Google Container Builder automatically checks out all the code under the /workspace directory, +# but we actually want it to under the correct expected package in the GOPATH (/go) +# - Create the directory to host the code that matches the expected GOPATH package locations +# - Use /go as the default GOPATH because this is what the image uses +# - Link our current directory (containing the source code) to the package location in the GOPATH +export PKG=k8s.io +export REPO=kubectl +export CMD=kustomize + +mkdir -p /go/src/$PKG +ln -s $(pwd) /go/src/$PKG/$REPO + +# Create the output directory for the binaries we will build +# Make sure CGO is 0 so the binaries are statically compiled and linux which is necessary for cross compiling go +export CGO=0 +export DEST=/workspace/_output/$CMD/bin +mkdir -p $DEST || echo "" + +go build -o $DEST/$CMD $PKG/$REPO/cmd/$CMD + +# Explicitly set the values of the variables in package "X" using ldflag so that they are statically compiled into +# the "version" command +export GITCOMMIT=$(git rev-parse HEAD) +export BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') +export X=$PKG/$REPO/cmd/$CMD/version +go build -o $DEST/$CMD \ + -ldflags "-X $X.kustomizeVersion=$TAG -X $X.goos=$GOOS -X $X.goarch=$GOARCH -X $X.gitCommit=$GITCOMMIT -X $X.buildDate=$BUILDDATE" \ + $PKG/$REPO/cmd/$CMD + +# Generate the tar archive +cd /workspace/_output/ +tar -czvf /workspace/$CMD-$VERSION-$GOOS-$GOARCH.tar.gz $CMD diff --git a/build/cloudbuild.yaml b/build/cloudbuild.yaml new file mode 100644 index 0000000000..a0b63264a6 --- /dev/null +++ b/build/cloudbuild.yaml @@ -0,0 +1,30 @@ +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# TODO(droot): add instructions for running in production. +steps: +- name: "ubuntu" + args: ["mkdir", "-p", "/workspace/_output"] +- name: "golang:1.10-stretch" + args: ["bash", "cmd/kustomize/build/build.sh"] + env: + - 'GOOS=${_GOOS}' + - 'GOARCH=${_GOARCH}' + - 'VERSION=${TAG_NAME}' +- name: 'gcr.io/cloud-builders/gsutil' + args: ['-h', 'Content-Type:application/gzip', 'cp', '-a', 'public-read', 'kustomize-${TAG_NAME}-${_GOOS}-${_GOARCH}.tar.gz', 'gs://kustomize-release/kustomize-${TAG_NAME}-${_GOOS}-${_GOARCH}.tar.gz'] + env: + - 'GOOS=${_GOOS}' + - 'GOARCH=${_GOARCH}' + - 'VERSION=${TAG_NAME}' diff --git a/build/cloudbuild_local.yaml b/build/cloudbuild_local.yaml new file mode 100644 index 0000000000..66f9b87e52 --- /dev/null +++ b/build/cloudbuild_local.yaml @@ -0,0 +1,31 @@ +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Instructions to run locally: +# Download google container builder: https://github.com/kubernetes-sigs/container-builder-local +# Set you GOOS and GOARCH vars to match your system +# Set OUTPUT to the location to write the directory containing the tar.gz +# $ container-builder-local --config=build/cloudbuild_local.yaml --dryrun=false \ +# --substitutions=_GOOS=$GOOS,_GOARCH=$GOARCH --write-workspace=$OUTPUT . +# Release tar will be in $OUTPUT + +steps: +- name: "ubuntu" + args: ["mkdir", "-p", "/workspace/_output"] +- name: "golang:1.10-stretch" + args: ["bash", "cmd/kustomize/build/build.sh"] + env: + - 'GOOS=${_GOOS}' + - 'GOARCH=${_GOARCH}' + - 'VERSION=${TAG_NAME}' diff --git a/demos/README.md b/demos/README.md new file mode 100644 index 0000000000..e3818f1b94 --- /dev/null +++ b/demos/README.md @@ -0,0 +1,13 @@ +# Demos + +These demos are covered by presubmit tests. + + * [hello world](helloWorld.md) - Deploy multiple + (differently configured) instances of a simple Hello + World server. + + * [mysql](mySql.md) - Create a mySql production + configuration from scratch. + + * [springboot](springboot.md) - Create a Spring Boot application production + configuration from scratch. diff --git a/demos/helloWorld.md b/demos/helloWorld.md new file mode 100644 index 0000000000..d6e9c5bf5c --- /dev/null +++ b/demos/helloWorld.md @@ -0,0 +1,432 @@ +[base]: ../docs/glossary.md#base +[config]: https://github.com/kinflate/example-hello +[hello]: https://github.com/monopole/hello +[instance]: ../docs/glossary.md#instance +[instances]: ../docs/glossary.md#instance +[manifest]: ../docs/glossary.md#manifest +[original]: https://github.com/kinflate/example-hello +[overlay]: ../docs/glossary.md#overlay +[overlays]: ../docs/glossary.md#overlay + +# Demo: hello world with instances + +Steps: + + 1. Clone an existing configuration as a [base]. + 1. Customize it. + 1. Create two different [overlays] (_staging_ and _production_) + from the customized base. + 1. Run kustomize and kubectl to deploy staging and production. + +First define a place to work: + + +``` +DEMO_HOME=$(mktemp -d) +``` + +Alternatively, use + +> ``` +> DEMO_HOME=~/hello +> ``` + +## Clone an example + +Let's run the [hello] service. +Here's an existing [config] for it. + +Clone this config to a directory called `base`: + + +``` +git clone \ + https://github.com/kinflate/example-hello \ + $DEMO_HOME/base +``` + + +``` +tree $DEMO_HOME +``` + +Expecting something like: + +> ``` +> /tmp/tmp.IyYQQlHaJP +> └── base +> ├── configMap.yaml +> ├── deployment.yaml +> ├── kustomize.yaml +> ├── LICENSE +> ├── README.md +> └── service.yaml +> ``` + + +One could immediately apply these resources to a +cluster: + +> ``` +> kubectl apply -f $DEMO_HOME/base +> ``` + +to instantiate the _hello_ service. `kubectl` +would only recognize the resource files. + +## The Base Manifest + +The `base` directory has a [manifest] file: + + +``` +BASE=$DEMO_HOME/base +more $BASE/kustomize.yaml +``` + +Run `kustomize` on the base to emit customized resources +to `stdout`: + + +``` +kustomize build $BASE +``` + +## Customize the base + +A first customization step could be to change the _app +label_ applied to all resources: + + +``` +sed -i 's/app: hello/app: my-hello/' \ + $BASE/kustomize.yaml +``` + +See the effect: + +``` +kustomize build $BASE | grep -C 3 app: +``` + +## Create Overlays + +Create a _staging_ and _production_ [overlay]: + + * _Staging_ enables a risky feature not enabled in production. + * _Production_ has a higher replica count. + * Web server greetings from these cluster + [instances] will differ from each other. + + +``` +OVERLAYS=$DEMO_HOME/overlays +mkdir -p $OVERLAYS/staging +mkdir -p $OVERLAYS/production +``` + +#### Staging Manifest + +In the `staging` directory, make a manifest +defining a new name prefix, and some different labels. + + +``` +cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml +apiVersion: manifest.k8s.io/v1alpha1 +kind: Package +metadata: + name: makes-staging-hello +namePrefix: staging- +objectLabels: + instance: staging + org: acmeCorporation +objectAnnotations: + note: Hello, I am staging! +bases: +- ../../base +patches: +- map.yaml +EOF +``` + +#### Staging Patch + +Add a configMap customization to change the server +greeting from _Good Morning!_ to _Have a pineapple!_ + +Also, enable the _risky_ flag. + + +``` +cat <$OVERLAYS/staging/map.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: the-map +data: + altGreeting: "Have a pineapple!" + enableRisky: "true" +EOF +``` + +#### Production Manifest + +In the production directory, make a manifest +with a different name prefix and labels. + + +``` +cat <$OVERLAYS/production/kustomize.yaml +apiVersion: manifest.k8s.io/v1alpha1 +kind: Package +metadata: + name: makes-production-tuthello +namePrefix: production- +objectLabels: + instance: production + org: acmeCorporation +objectAnnotations: + note: Hello, I am production! +bases: +- ../../base +patches: +- deployment.yaml +EOF +``` + + +#### Production Patch + +Make a production patch that increases the replica +count (because production takes more traffic). + + +``` +cat <$OVERLAYS/production/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: the-deployment +spec: + replicas: 10 +EOF +``` + +## Compare overlays + + +`DEMO_HOME` now contains: + + - a _base_ directory - a slightly customized clone + of the original configuration, and + + - an _overlays_ directory, containing the manifests + and patches required to create distinct _staging_ + and _production_ instances in a cluster. + +Review the directory structure and differences: + + +``` +tree $DEMO_HOME +``` + +Expecting something like: + +> ``` +> /tmp/tmp.IyYQQlHaJP1 +> ├── base +> │   ├── configMap.yaml +> │   ├── deployment.yaml +> │   ├── kustomize.yaml +> │   ├── LICENSE +> │   ├── README.md +> │   └── service.yaml +> └── overlays +> ├── production +> │   ├── deployment.yaml +> │   └── kustomize.yaml +> └── staging +> ├── kustomize.yaml +> └── map.yaml +> ``` + +Compare the output directly +to see how _staging_ and _production_ differ: + + +``` +diff \ + <(kustomize build $OVERLAYS/staging) \ + <(kustomize build $OVERLAYS/production) |\ + more +``` + +The first part of the difference output should look +something like + +> ```diff +> < altGreeting: Have a pineapple! +> < enableRisky: "true" +> --- +> > altGreeting: Good Morning! +> > enableRisky: "false" +> 8c8 +> < note: Hello, I am staging! +> --- +> > note: Hello, I am production! +> 11c11 +> < instance: staging +> --- +> > instance: production +> 13c13 +> (...truncated) +> ``` + + +## Deploy + +The individual resource sets are: + + +``` +kustomize build $OVERLAYS/staging +``` + + +``` +kustomize build $OVERLAYS/production +``` + +To deploy, pipe the above commands to kubectl apply: + +> ``` +> kustomize build $OVERLAYS/staging |\ +> kubectl apply -f - +> ``` + +> ``` +> kustomize build $OVERLAYS/production |\ +> kubectl apply -f - +> ``` + +## Rolling updates + +### Review + +The _hello-world_ deployment running in this cluster is +configured with data from a configMap. + +The deployment refers to this map by name: + + + +``` +grep -C 2 configMapKeyRef $DEMO_HOME/base/deployment.yaml +``` + +Changing the data held by a live configMap in a cluster +is considered bad practice. Deployments have no means +to know that the configMaps they refer to have +changed, so such updates have no effect. + +The recommended way to change a deployment's +configuration is to + + 1. create a new configMap with a new name, + 1. patch the _deployment_, modifying the name value of + the appropriate `configMapKeyRef` field. + +This latter change initiates rolling update to the pods +in the deployment. The older configMap, when no longer +referenced by any other resource, is eventually garbage +collected. + +### How this works with kustomize + +[patch]: ../docs/glossary.md#patch + +The _staging_ instance here has a configMap [patch]: + + +``` +cat $OVERLAYS/staging/map.yaml +``` + +This patch is by definition a named but not necessarily +complete resource spec intended to modify a complete +resource spec. + +The resource it modifies is here: + + +``` +cat $DEMO_HOME/base/configMap.yaml +``` + +For a patch to work, the names in the `metadata/name` +fields must match. + +However, the name values specified in the file are +_not_ what gets used in the cluster. By design, +kustomize modifies these names. To see the names +ultimately used in the cluster, just run kustomize: + + +``` +kustomize build $OVERLAYS/staging |\ + grep -B 8 -A 1 staging-the-map +``` + +The configMap name is prefixed by _staging-_, per the +`namePrefix` field in +`$OVERLAYS/staging/kustomize.yaml`. + +The suffix to the configMap name is generated from a +hash of the maps content - in this case the name suffix +is _hhhhkfmgmk_: + + +``` +kustomize build $OVERLAYS/staging | grep hhhhkfmgmk +``` + +Now modify the map patch, to change the greeting +the server will use: + + +``` +sed -i 's/pineapple/kiwi/' $OVERLAYS/staging/map.yaml +``` + +Run kustomize again to see the new names: + + +``` +kustomize build $OVERLAYS/staging |\ + grep -B 8 -A 1 staging-the-map +``` + +Confirm that the change in configMap content resulted +in three new names ending in _khk45ktkd9_ - one in the +configMap name itself, and two in the deployment that +uses the map: + + +``` +test 3 == $(kustomize build $OVERLAYS/staging | grep khk45ktkd9 | wc -l) +``` + +Applying these resources to the cluster will result in +a rolling update of the deployments pods, retargetting +them from the _hhhhkfmgmk_ maps to the _khk45ktkd9_ +maps. The system will later garbage collect the +unused maps. + +## Rollback + +To rollback, one would undo whatever edits were made to +the configuation in source control, then rerun kustomize +on the reverted configuration and apply it to the +cluster. diff --git a/demos/mySql.md b/demos/mySql.md new file mode 100644 index 0000000000..e7faee9d20 --- /dev/null +++ b/demos/mySql.md @@ -0,0 +1,239 @@ +# Demo: MySql + +This example takes some off-the-shelf k8s resources +designed for MySQL, and customizes them to suit a +production scenario. + +In the production environment we want: + +- MySQL resource names to be prefixed by 'prod-'. +- MySQL resources to have 'env: prod' labels. +- MySQL to use persistent disk for storing data. + +### Download resources + +Download `deployment.yaml`, `service.yaml` and +`secret.yaml`. These are plain k8s resources files one +could add to a k8s cluster to run MySql. + + +``` +DEMO_HOME=$(mktemp -d) +cd $DEMO_HOME + +# Get MySQL configs +for f in service secret deployment ; do \ + wget https://raw.githubusercontent.com/kinflate/mysql/master/emptyDir/$f.yaml ; \ +done +``` + +### Initialize a manifest + +A _manifest_ groups these resources together. + +Create one: + + +``` +cd $DEMO_HOME +kustomize init +``` + +You should now have a file called `kustomize.yaml`: + + +``` +cat $DEMO_HOME/kustomize.yaml +``` + +containing something like: + + +> ``` +> apiVersion: manifest.k8s.io/v1alpha1 +> kind: Manifest +> metadata: +> name: helloworld +> # description: helloworld does useful stuff. +> namePrefix: some-prefix +> # Labels to add to all objects and selectors. +> # These labels would also be used to form the selector for apply --prune +> # Named differently than “labels” to avoid confusion with metadata for this object +> objectLabels: +> app: helloworld +> objectAnnotations: +> note: This is a example annotation +> resources: +> - deployment.yaml +> - service.yaml +> # There could also be configmaps in Base, which would make these overlays +> configmaps: [] +> # There could be secrets in Base, if just using a fork/rebase workflow +> secrets: [] +> recursive: true +> ``` + + +### Add the resources to the manifest + + +``` +cd $DEMO_HOME + +kustomize edit add resource secret.yaml +kustomize edit add resource service.yaml +kustomize edit add resource deployment.yaml + +cat kustomize.yaml +``` + +`kustomize.yaml`'s resources section should contain: + +> ``` +> apiVersion: manifest.k8s.io/v1alpha1 +> .... +> resources: +> - secret.yaml +> - service.yaml +> - deployment.yaml +> ``` + +### Name Customization + +Arrange for the MySQL resources to begin with prefix +_prod-_ (since they are meant for the _production_ +environment): + + +``` +cd $DEMO_HOME + +kustomize edit set nameprefix 'prod-' + +cat kustomize.yaml +``` + +`kustomize.yaml` should have updated value of namePrefix field: + +> ``` +> apiVersion: manifest.k8s.io/v1alpha1 +> .... +> namePrefix: prod- +> objectAnnotations: +> note: This is a example annotation +> ``` + +This `namePrefix` directive adds _prod-_ to all +resource names. + + +``` +kustomize build $DEMO_HOME +``` + +The output should contain: +> ``` +> apiVersion: v1 +> data: +> password: YWRtaW4= +> kind: Secret +> metadata: +> .... +> name: prod-mysql-pass-d2gtcm2t2k +> --- +> apiVersion: v1 +> kind: Service +> metadata: +> .... +> name: prod-mysql +> spec: +> .... +> --- +> apiVersion: apps/v1beta2 +> kind: Deployment +> metadata: +> .... +> name: prod-mysql +> spec: +> selector: +> .... +> ``` + +### Label Customization + +We want resources in production environment to have +certain labels so that we can query them by label +selector. + +`kustomize` does not have `set label` command to add +label, but we can edit `kustomize.yaml` file under +`prod` directory and add the production labels under +`objectLabels` fields as highlighted below. + + +``` +sed -i 's/app: helloworld/app: prod/' \ + $DEMO_HOME/kustomize.yaml +``` + +At this point, running `kustomize build` will +generate MySQL configs with name-prefix 'prod-' and +labels `env:prod`. + +### Storage customization + +Off the shelf MySQL uses `emptyDir` type volume, which +gets wiped away if the MySQL Pod is recreated, and that +is certainly not desirable for production +environment. So we want to use Persistent Disk in +production. kustomize lets you apply `patches` to the +resources. + + +``` +cat <<'EOF' > $DEMO_HOME/persistent-disk.yaml +apiVersion: apps/v1beta2 # for versions before 1.9.0 use apps/v1beta2 +kind: Deployment +metadata: + name: mysql +spec: + template: + spec: + volumes: + - name: mysql-persistent-storage + emptyDir: null + gcePersistentDisk: + pdName: mysql-persistent-storage +EOF +``` + +Specify the patch file in the manifest: + + +``` +cat <<'EOF' >> $DEMO_HOME/kustomize.yaml +patches: +- persistent-disk.yaml +EOF +``` + +Lets break this down: + +- In the first step, we created a YAML file named + `persistent-disk.yaml` to patch the resource defined + in deployment.yaml + +- Then we added `persistent-disk.yaml` to list of + `patches` in `kustomize.yaml`. `kustomize build` + will apply this patch to the deployment resource with + the name `mysql` as defined in the patch. + + +The output of the following command can now be applied +to the cluster (i.e. piped to `kubectl apply`) to +create the production environment. + + +``` +kustomize build $DEMO_HOME # | kubectl apply -f - +``` diff --git a/demos/springboot.md b/demos/springboot.md new file mode 100644 index 0000000000..a71e3e584b --- /dev/null +++ b/demos/springboot.md @@ -0,0 +1,350 @@ +# Demo: SpringBoot + +In this tutorial, you will learn - how to use `kustomize` to customize a basic Spring Boot application's +k8s configuration for production use cases. + +In the production environment we want to customize the following: + +- add application specific configuration for this Spring Boot application +- configure prod DB access configuration +- resource names to be prefixed by 'prod-'. +- resources to have 'env: prod' labels. +- JVM memory to be properly set. +- health check and readiness check. + +### Download resources + +Download `deployment.yaml`, `service.yaml`. These are plain k8s resources files one +could add to a k8s cluster to run sbdemo. + + +``` +DEMO_HOME=$(mktemp -d) +cd $DEMO_HOME + +# Get SpringBoot configs +for f in service deployment; do \ + wget https://raw.githubusercontent.com/kinflate/example-springboot/master/$f.yaml ; \ +done +``` + +### Initialize a manifest + +A _manifest_ groups these resources together. + +Create one: + + +``` +cd $DEMO_HOME +kustomize init +``` + +The above step will create a `kustomize` configuration file called `kustomize.yaml` in current directory. + + +``` +cat $DEMO_HOME/kustomize.yaml +``` + +containing something like: + + +> ``` +> apiVersion: manifest.k8s.io/v1alpha1 +> kind: Manifest +> metadata: +> name: helloworld +> # description: helloworld does useful stuff. +> namePrefix: some-prefix +> # Labels to add to all objects and selectors. +> # These labels would also be used to form the selector for apply --prune +> # Named differently than “labels” to avoid confusion with metadata for this object +> objectLabels: +> app: helloworld +> objectAnnotations: +> note: This is a example annotation +> resources: +> - deployment.yaml +> - service.yaml +> # There could also be configmaps in Base, which would make these overlays +> configMapGenerator: [] +> # There could be secrets in Base, if just using a fork/rebase workflow +> secretGenerator: [] +> ``` + + +### Add the resources to the manifest + + +``` +cd $DEMO_HOME + +kustomize edit add resource service.yaml +kustomize edit add resource deployment.yaml + +cat kustomize.yaml +``` + +`kustomize.yaml`'s resources section should contain: + +> ``` +> apiVersion: manifest.k8s.io/v1alpha1 +> .... +> resources: +> - service.yaml +> - deployment.yaml +> ``` + +### Add configmap to the manifest + +``` +cd $DEMO_HOME +wget https://raw.githubusercontent.com/kinflate/example-springboot/master/application.properties +kustomize edit add configmap demo-configmap --from-file application.properties + +cat kustomize.yaml +``` +`kustomize.yaml`'s configMapGenerator section should contain: +> ``` +> configMapGenerator: +> - files: +> - application.properties +> name: demo-configmap +> kind: Manifest +> ``` + +### Customize configmap +We want to add database credentials for the prod environment. In general, these credentials can be put into the file `application.properties`. +However, for some cases, we want to keep the credentials in a different file and keep application specific configs in `application.properties`. + With this clear separation, the credentials and application specific things can be managed and maintained flexibly by different teams. +For example, application developers only tune the application configs in `application.properties` and operation teams or SREs +only care about the credentials. + +For Spring Boot application, we can set an active profile through the environment variable `spring.profiles.active`. Then +the application will pick up an extra `application-.properties` file. With this, we can customize the configmap in two +steps. Add an environment variable through the patch and add a file to the configmap. + +``` +cat <$DEMO_HOME/patch.yaml +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: sbdemo +spec: + template: + spec: + containers: + - name: sbdemo + env: + - name: spring.profiles.active + value: prod +EOF + +cat <>$DEMO_HOME/kustomize.yaml +patches: +- patch.yaml +EOF + +cat <$DEMO_HOME/application-prod.properties +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:mysql://:3306/db_example +spring.datasource.username=root +spring.datasource.password=admin +EOF + +kustomize edit add configmap demo-configmap --from-file application-prod.properties + +cat kustomize.yaml +``` +`kustomize.yaml`'s configMapGenerator section should contain: +> ``` +> configMapGenerator: +> - files: +> - application.properties +> - application-prod.properties +> name: demo-configmap +> kind: Manifest +> ``` + +### Name Customization + +Arrange for the resources to begin with prefix +_prod-_ (since they are meant for the _production_ +environment): + + +``` +cd $DEMO_HOME + +kustomize edit set nameprefix 'prod-' + +cat kustomize.yaml +``` + +`kustomize.yaml` should have updated value of namePrefix field: + +> ``` +> apiVersion: manifest.k8s.io/v1alpha1 +> .... +> namePrefix: prod- +> objectAnnotations: +> note: This is a example annotation +> ``` + +This `namePrefix` directive adds _prod-_ to all +resource names. + + +``` +kustomize build $DEMO_HOME +``` + +The output should contain: +> ``` +> apiVersion: v1 +> data: +> .... +> kind: ConfigMap +> metadata: +> .... +> name: prod-demo-configmap-7746248cmc +> --- +> apiVersion: v1 +> kind: Service +> metadata: +> .... +> name: prod-sbdemo +> spec: +> .... +> --- +> apiVersion: apps/v1beta2 +> kind: Deployment +> metadata: +> .... +> name: prod-sbdemo +> spec: +> selector: +> .... +> ``` + +### Label Customization + +We want resources in production environment to have +certain labels so that we can query them by label +selector. + +`kustomize` does not have `edit set label` command to add +label, but we can edit `kustomize.yaml` file under +`prod` directory and add the production labels under +`objectLabels` fields as highlighted below. + + +``` +sed -i 's/app: helloworld/app: prod/' \ + $DEMO_HOME/kustomize.yaml +``` + +At this point, running `kustomize build` will +generate MySQL configs with name-prefix 'prod-' and +labels `env:prod`. + + +### Download Patch for JVM memory +When a Spring Boot application is deployed in a k8s cluster, the JVM is running inside a container. We want to set memory limit for the container and make sure +the JVM is aware of that limit. In K8s deployment, we can set the resource limits for containers and inject these limits to +some environment variables by downward API. When the container starts to run, it can pick up the environment variables and +set JVM options accordingly. + +Download the patch `memorylimit_patch.yaml`. It contains the memory limits setup. + +``` +cd $DEMO_HOME +wget https://raw.githubusercontent.com/kinflate/example-springboot-instances/master/production/memorylimit_patch.yaml + +cat memorylimit_patch.yaml +``` +The output contains +> ``` +> apiVersion: apps/v1beta2 +> kind: Deployment +> metadata: +> name: sbdemo +> spec: +> template: +> spec: +> containers: +> - name: sbdemo +> resources: +> limits: +> memory: 1250Mi +> requests: +> memory: 1250Mi +> env: +> - name: MEM_TOTAL_MB +> valueFrom: +> resourceFieldRef: +> resource: limits.memory +> ``` + +### Download Patch for health check +We also want to add liveness check and readiness check in the production environment. Spring Boot application +has end points such as `/actuator/health` for this. We can customize the k8s deployment resource to talk to Spring Boot end point. + +Download the patch `healthcheck_patch.yaml`. It contains the liveness probes and readyness probes. + +``` +cd $DEMO_HOME +wget https://raw.githubusercontent.com/kinflate/example-springboot-instances/master/production/healthcheck_patch.yaml + +cat healthcheck_patch.yaml +``` +The output contains +> ``` +> apiVersion: apps/v1beta2 +> kind: Deployment +> metadata: +> name: sbdemo +> spec: +> template: +> spec: +> containers: +> - name: sbdemo +> livenessProbe: +> httpGet: +> path: /actuator/health +> port: 8080 +> initialDelaySeconds: 10 +> periodSeconds: 3 +> readinessProbe: +> initialDelaySeconds: 20 +> periodSeconds: 10 +> httpGet: +> path: /actuator/info +> port: 8080 +> ``` + +### Add patch to Manifest +Currently `kustomize` doesn't provide a command to add a file as a patch, but we can edit the file `kustomize.yaml` to +include this patch. + +``` +mv $DEMO_HOME/kustomize.yaml $DEMO_HOME/tmp.yaml +sed '/patches:$/{N;s/- patch.yaml/- patch.yaml\n- memorylimit_patch.yaml\n- healthcheck_patch.yaml/}' $DEMO_HOME/tmp.yaml >& $DEMO_HOME/kustomize.yaml +``` +`kustomize.yaml` should have patches field: +> ``` +> patches +> - patch.yaml +> - memorylimit_patch.yaml +> - healthcheck_patch.yaml +> ``` + +The output of the following command can now be applied +to the cluster (i.e. piped to `kubectl apply`) to +create the production environment. + + +``` +kustomize build $DEMO_HOME # | kubectl apply -f - +``` diff --git a/demos/tree1.png b/demos/tree1.png new file mode 100644 index 0000000000000000000000000000000000000000..a92235187c79e6fa3bb74842d5e15483b29e9333 GIT binary patch literal 8738 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 literal 0 HcmV?d00001 diff --git a/docs/Kube-manifest.yaml b/docs/Kube-manifest.yaml new file mode 100644 index 0000000000..98e59dfb85 --- /dev/null +++ b/docs/Kube-manifest.yaml @@ -0,0 +1,22 @@ +# This is a generated example; do not edit. Rebuild with 'make docs'. + +apiVersion: manifest.k8s.io/v1alpha1 +kind: Manifest +metadata: + name: helloworld +description: helloworld does useful stuff. +namePrefix: some-prefix +# Labels to add to all objects and selectors. +# These labels would also be used to form the selector for apply --prune +# Named differently than “labels” to avoid confusion with metadata for this object +objectLabels: + app: helloworld +objectAnnotations: + note: This is an example annotation +resources: [] +#- service.yaml +#- ../some-dir/ +# There could also be configmaps in Base, which would make these overlays +configMapGenerator: [] +# There could be secrets in Base, if just using a fork/rebase workflow +secretGenerator: [] diff --git a/docs/base.jpg b/docs/base.jpg new file mode 100644 index 0000000000000000000000000000000000000000..806d8478c959fcaa43fe27cdfb711bed1ee4cc23 GIT binary patch literal 41948 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 E.g., a _staging_ and _production_ overlay both modify some +> common base to create distinct instances. +> +> The _staging_ instance 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_ instance 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. + + +## kustomize + +_kustomize_ is a command line tool supporting template-free +customization of declarative configuration targetted to +k8s. + +_Targetted to k8s means_ that kustomize may need some +limited understanding of API resources, k8s concepts +like names, labels, namespaces, etc. and the semantics +of resource patching. + +kustomize is an implementation of [DAM]. + +## manifest + +A _manifest_ is a file called `kustomize.yaml` that +describes a configuration consumable by [kustomize]. + +Here's an [example](Kube-manifest.yaml). + +A manifest contains fields falling into these categories: + + * Immediate customization instructions - + _nameprefix_, _labelprefix_, etc. + * Resource _generators_ for configmaps and secrets. + * References to _external files_ in these categories: + * [resources] - completely specified k8s API objects, + e.g. `deployment.yaml`, `configmap.yaml`, etc. + * [patches] - _partial_ resources that modify full + resources defined in a [base] + (only meaningful in an [overlay]). + * [bases] - path to a directory containing + a [manifest] (only meaningful in an [overlay]). + * (_TBD_) Standard k8s API kind-version fields. + +## off-the-shelf configuration + +An _off-the-shelf_ configuration is a manifest and +resources intentionally published somewhere for others +to use. + +E.g. one might create a github repository like this: + +> ``` +> github.com/username/someapp/ +> kustomize.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 [target] that modifies (and thus +depends on) another target. + +The [manifest] in an overlay refers to (via file path, +URI or other method) to _some other manifest_, known as +its [base]. + +An overlay is unusable without its base. + +An overlay supports the typical notion of a +_development_, _QA_, _staging_ and _production_ +environment instances. + +The configuration of these environments is specified in +individual overlays (one per environment) that all +refer to a common base that holds common configuration. +One configures the cluser like this: + +> ``` +> kustomize inflate someapp/overlays/staging |\ +> kubectl apply -f - +> +> kustomize inflate someapp/overlays/production |\ +> kubectl apply -f - +> ``` + +Usage of the base is implicit (the overlay's manifest +points to the base). + +An overlay may act as a base to another overlay. + +## 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 + +A _patch_ is a partially defined k8s resource with a +name that must match a resource already known per +traversal rules built into [kustomize]. + +_Patch_ is a field in the manifest, distinct from +resources, because a patch file looks like a resource +file, but has different semantics. A patch depends on +(modifies) a resource, whereas a resourse has no +dependencies. Since any resource file can be used as a +patch, one cannot reliably distinguish a resource from +a patch just by looking at the file's [YAML]. + +## resource + +A _resource_ is a path to a [YAML] or [JSON] file that +completely defines a functional k8s API object. + +## 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 `build`, e.g.: + +> ``` +> kustomize build $target +> ``` + +`$target` must be a path to a directory that +immediately contains a file called +`kustomize.yaml` (i.e. a [manifest]). + +The target contains, or refers to, all the information +needed to create customized resources to send to the +[apply] operation. + +A target is a [base] or an [overlay]. diff --git a/docs/overlay.jpg b/docs/overlay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8742c6406ed655109e16afc4d0a9afd9aaf6663 GIT binary patch literal 50739 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 literal 0 HcmV?d00001 diff --git a/docs/workflowBespoke.jpg b/docs/workflowBespoke.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99872857630c1acc54919490bcc9a79a951c0062 GIT binary patch literal 37063 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 G{rDe{b}zC3 literal 0 HcmV?d00001 diff --git a/docs/workflowOts.jpg b/docs/workflowOts.jpg new file mode 100644 index 0000000000000000000000000000000000000000..044b09aac9a5a536c667bcfd533bbd79b0406325 GIT binary patch literal 44295 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
  • 2O3)g?=J6itxzP4an+}ziu1^KU)Y%vA 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 literal 0 HcmV?d00001 diff --git a/docs/workflows.md b/docs/workflows.md new file mode 100644 index 0000000000..2c05249c21 --- /dev/null +++ b/docs/workflows.md @@ -0,0 +1,127 @@ +[OTS]: glossary.md#off-the-shelf +[apply]: glossary.md#apply +[applying]: glossary.md#apply +[base]: glossary.md#base +[fork]: https://guides.github.com/activities/forking/ +[instances]: glossary.md#instance +[manifest]: glossary.md#manifest +[off-the-shelf]: glossary.md#off-the-shelf +[overlays]: glossary.md#overlay +[patch]: glossary.md#patch +[patches]: glossary.md#patch +[rebase]: https://git-scm.com/docs/git-rebase +[resources]: glossary.md#resources +[workflowBespoke]: workflowBespoke.jpg +[workflowOts]: workflowOts.jpg + +# workflows + +A _workflow_ is the sequence of steps one takes to +use and maintain a configuration. + +## Bespoke configuration + +In this workflow, all configuration files are owned by +the user. No content is incorporated from version +control repositories owned by others. + +![bespoke config workflow image][workflowBespoke] + +#### 1) create a directory in version control + +> ``` +> git init ~/ldap +> ``` + +#### 2) create a [base] + +> ``` +> mkdir -p ~/ldap/base +> ``` + +In this directory, create and commit a [manifest] +and a set of [resources]. + +#### 3) create [overlays] + +> ``` +> mkdir -p ~/ldap/overlays/staging +> mkdir -p ~/ldap/overlays/production +> ``` + +Each of these directories needs a [manifest] +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 [instances] + +Run kustomize, and pipe the output to [apply]. + +> ``` +> kustomize ~/ldap/overlays/staging | kubectl apply -f - +> kustomize ~/ldap/overlays/production | kubectl apply -f - +> ``` + + +## Off-the-shelf configuration + +In this workflow, all files are owned by the user and +maintained in a repository under their control, but +they are based on an [off-the-shelf] configuration that +is periodically consulted for updates. + + +![off-the-shelf config workflow image][workflowOts] + +#### 1) find and [fork] an [OTS] config + +#### 2) clone it as your [base] + +The [base] directory is maintained in a repo whose +upstream is an [OTS] configuration, in this case +https://github.com/kinflate/ldap. + +> ``` +> mkdir ~/ldap +> git clone https://github.com/$USER/ldap ~/ldap/base +> cd ~/ldap/base +> git remote add upstream git@github.com:kustomize/ldap +> ``` + +#### 3) create [overlays] + +As in the bespoke case above, create and populate +an _overlays_ directory. + +The [overlays] are siblings to each other and to the +[base] they depend on. + +> ``` +> mkdir -p ~/ldap/overlays/staging +> mkdir -p ~/ldap/overlays/production +> ``` + + +#### 4) bring up instances + +> ``` +> kustomize ~/ldap/overlays/staging | kubectl apply -f - +> kustomize ~/ldap/overlays/production | kubectl apply -f - +> ``` + +#### 5) (optionally) capture changes from upstream + +The user can optionally [rebase] their [base] to +capture changes made in the upstream repository. + +> ``` +> cd ~/ldap/base +> git fetch upstream +> git rebase upstream/master +> ``` diff --git a/kustomize.go b/kustomize.go new file mode 100644 index 0000000000..7940c4dd09 --- /dev/null +++ b/kustomize.go @@ -0,0 +1,34 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "os" + + "github.com/golang/glog" + + "k8s.io/kubectl/pkg/kustomize/commands" +) + +func main() { + defer glog.Flush() + + if err := commands.NewDefaultCommand().Execute(); err != nil { + os.Exit(1) + } + os.Exit(0) +} diff --git a/test/main.sh b/test/main.sh new file mode 100755 index 0000000000..334ed80810 --- /dev/null +++ b/test/main.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +function exit_with { + local msg=$1 + echo >&2 ${msg} + exit 1 +} + +base_dir="$( cd "$(dirname "$0")/../../.." && pwd )" +cd "$base_dir" || { + echo "Cannot cd to '$base_dir'. Aborting." >&2 + exit 1 +} + +# Install kustomize to $GOPATH/bin and export PATH +go install ./cmd/kustomize || { exit_with "Failed to install kustomize"; } +export PATH=$GOPATH/bin:$PATH + +home=`pwd` +example_dir="some/default/dir/for/examples" +if [ $# -eq 1 ]; then + example_dir=$1 +fi +if [ ! -d ${example_dir} ]; then + exit_with "directory ${example_dir} doesn't exist" +fi + +if [ -x "${example_dir}/tests/test.sh" ]; then + ${example_dir}/tests/test.sh ${example_dir} + if [ $? -eq 0 ]; then + echo "testing ${example_dir} passed." + else + exit_with "testing ${example_dir} failed." + fi +fi \ No newline at end of file diff --git a/version/version.go b/version/version.go new file mode 100644 index 0000000000..36aa6b52bd --- /dev/null +++ b/version/version.go @@ -0,0 +1,67 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package version + +import ( + "fmt" + "io" + + "github.com/spf13/cobra" +) + +var ( + kustomizeVersion = "unknown" + goos = "unknown" + goarch = "unknown" + gitCommit = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) + + buildDate = "1970-01-01T00:00:00Z" // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ') +) + +type Version struct { + KustomizeVersion string `json:"kustomizeVersion"` + GitCommit string `json:"gitCommit"` + BuildDate string `json:"buildDate"` + GoOs string `json:"goOs"` + GoArch string `json:"goArch"` +} + +func GetVersion() Version { + return Version{ + kustomizeVersion, + gitCommit, + buildDate, + goos, + goarch, + } +} + +func (v Version) Print(w io.Writer) { + fmt.Fprintf(w, "Version: %+v\n", v) +} + +// NewCmdVersion makes version command. +func NewCmdVersion(w io.Writer) *cobra.Command { + return &cobra.Command{ + Use: "version", + Short: "Prints the kustomize version", + Example: `kustomize version`, + Run: func(cmd *cobra.Command, args []string) { + GetVersion().Print(w) + }, + } +} From e543dd2489b139508080a7ea031f8daf44e04fe0 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Wed, 11 Apr 2018 13:56:24 -0700 Subject: [PATCH 02/43] Remove init from demos --- demos/mySql.md | 61 ++++++---------------------- demos/springboot.md | 99 ++++++++++++++++++--------------------------- 2 files changed, 52 insertions(+), 108 deletions(-) diff --git a/demos/mySql.md b/demos/mySql.md index e7faee9d20..ceb22374ee 100644 --- a/demos/mySql.md +++ b/demos/mySql.md @@ -21,60 +21,28 @@ could add to a k8s cluster to run MySql. DEMO_HOME=$(mktemp -d) cd $DEMO_HOME +CONTENT=https://raw.githubusercontent.com/kinflate + # Get MySQL configs for f in service secret deployment ; do \ - wget https://raw.githubusercontent.com/kinflate/mysql/master/emptyDir/$f.yaml ; \ + wget -q $CONTENT/mysql/master/emptyDir/$f.yaml ; \ done ``` -### Initialize a manifest - -A _manifest_ groups these resources together. -Create one: +### Initialize kustomize.yaml - -``` -cd $DEMO_HOME -kustomize init -``` +The `kustomize` program gets its instructions from +a file called `kustomize.yaml`. -You should now have a file called `kustomize.yaml`: +Start this file: - + ``` -cat $DEMO_HOME/kustomize.yaml +touch $DEMO_HOME/kustomize.yaml ``` -containing something like: - - -> ``` -> apiVersion: manifest.k8s.io/v1alpha1 -> kind: Manifest -> metadata: -> name: helloworld -> # description: helloworld does useful stuff. -> namePrefix: some-prefix -> # Labels to add to all objects and selectors. -> # These labels would also be used to form the selector for apply --prune -> # Named differently than “labels” to avoid confusion with metadata for this object -> objectLabels: -> app: helloworld -> objectAnnotations: -> note: This is a example annotation -> resources: -> - deployment.yaml -> - service.yaml -> # There could also be configmaps in Base, which would make these overlays -> configmaps: [] -> # There could be secrets in Base, if just using a fork/rebase workflow -> secrets: [] -> recursive: true -> ``` - - -### Add the resources to the manifest +### Add the resources ``` @@ -90,8 +58,6 @@ cat kustomize.yaml `kustomize.yaml`'s resources section should contain: > ``` -> apiVersion: manifest.k8s.io/v1alpha1 -> .... > resources: > - secret.yaml > - service.yaml @@ -116,11 +82,7 @@ cat kustomize.yaml `kustomize.yaml` should have updated value of namePrefix field: > ``` -> apiVersion: manifest.k8s.io/v1alpha1 -> .... > namePrefix: prod- -> objectAnnotations: -> note: This is a example annotation > ``` This `namePrefix` directive adds _prod-_ to all @@ -132,6 +94,7 @@ kustomize build $DEMO_HOME ``` The output should contain: + > ``` > apiVersion: v1 > data: @@ -207,7 +170,7 @@ spec: EOF ``` -Specify the patch file in the manifest: +Add the patch file to `kustomize.yaml`: ``` diff --git a/demos/springboot.md b/demos/springboot.md index a71e3e584b..6bf839f0c9 100644 --- a/demos/springboot.md +++ b/demos/springboot.md @@ -19,62 +19,31 @@ could add to a k8s cluster to run sbdemo. ``` + DEMO_HOME=$(mktemp -d) cd $DEMO_HOME +CONTENT=https://raw.githubusercontent.com/kinflate + # Get SpringBoot configs for f in service deployment; do \ - wget https://raw.githubusercontent.com/kinflate/example-springboot/master/$f.yaml ; \ + wget -q $CONTENT/example-springboot/master/$f.yaml ; \ done ``` -### Initialize a manifest +### Initialize kustomize.yaml -A _manifest_ groups these resources together. +The `kustomize` program gets its instructions from +a file called `kustomize.yaml`. -Create one: +Start this file: - + ``` -cd $DEMO_HOME -kustomize init +touch $DEMO_HOME/kustomize.yaml ``` -The above step will create a `kustomize` configuration file called `kustomize.yaml` in current directory. - - -``` -cat $DEMO_HOME/kustomize.yaml -``` - -containing something like: - - -> ``` -> apiVersion: manifest.k8s.io/v1alpha1 -> kind: Manifest -> metadata: -> name: helloworld -> # description: helloworld does useful stuff. -> namePrefix: some-prefix -> # Labels to add to all objects and selectors. -> # These labels would also be used to form the selector for apply --prune -> # Named differently than “labels” to avoid confusion with metadata for this object -> objectLabels: -> app: helloworld -> objectAnnotations: -> note: This is a example annotation -> resources: -> - deployment.yaml -> - service.yaml -> # There could also be configmaps in Base, which would make these overlays -> configMapGenerator: [] -> # There could be secrets in Base, if just using a fork/rebase workflow -> secretGenerator: [] -> ``` - - -### Add the resources to the manifest +### Add the resources ``` @@ -89,29 +58,29 @@ cat kustomize.yaml `kustomize.yaml`'s resources section should contain: > ``` -> apiVersion: manifest.k8s.io/v1alpha1 -> .... > resources: > - service.yaml > - deployment.yaml > ``` -### Add configmap to the manifest +### Add configmap generator + ``` cd $DEMO_HOME -wget https://raw.githubusercontent.com/kinflate/example-springboot/master/application.properties +wget -q $CONTENT/example-springboot/master/application.properties kustomize edit add configmap demo-configmap --from-file application.properties cat kustomize.yaml ``` + `kustomize.yaml`'s configMapGenerator section should contain: + > ``` > configMapGenerator: > - files: > - application.properties > name: demo-configmap -> kind: Manifest > ``` ### Customize configmap @@ -119,11 +88,12 @@ We want to add database credentials for the prod environment. In general, these However, for some cases, we want to keep the credentials in a different file and keep application specific configs in `application.properties`. With this clear separation, the credentials and application specific things can be managed and maintained flexibly by different teams. For example, application developers only tune the application configs in `application.properties` and operation teams or SREs -only care about the credentials. +only care about the credentials. For Spring Boot application, we can set an active profile through the environment variable `spring.profiles.active`. Then -the application will pick up an extra `application-.properties` file. With this, we can customize the configmap in two +the application will pick up an extra `application-.properties` file. With this, we can customize the configmap in two steps. Add an environment variable through the patch and add a file to the configmap. + ``` cat <$DEMO_HOME/patch.yaml @@ -157,6 +127,7 @@ kustomize edit add configmap demo-configmap --from-file application-prod.propert cat kustomize.yaml ``` + `kustomize.yaml`'s configMapGenerator section should contain: > ``` > configMapGenerator: @@ -164,7 +135,6 @@ cat kustomize.yaml > - application.properties > - application-prod.properties > name: demo-configmap -> kind: Manifest > ``` ### Name Customization @@ -185,8 +155,6 @@ cat kustomize.yaml `kustomize.yaml` should have updated value of namePrefix field: > ``` -> apiVersion: manifest.k8s.io/v1alpha1 -> .... > namePrefix: prod- > objectAnnotations: > note: This is a example annotation @@ -201,6 +169,7 @@ kustomize build $DEMO_HOME ``` The output should contain: + > ``` > apiVersion: v1 > data: @@ -250,21 +219,24 @@ generate MySQL configs with name-prefix 'prod-' and labels `env:prod`. -### Download Patch for JVM memory +### Download Patch for JVM memory When a Spring Boot application is deployed in a k8s cluster, the JVM is running inside a container. We want to set memory limit for the container and make sure -the JVM is aware of that limit. In K8s deployment, we can set the resource limits for containers and inject these limits to +the JVM is aware of that limit. In K8s deployment, we can set the resource limits for containers and inject these limits to some environment variables by downward API. When the container starts to run, it can pick up the environment variables and set JVM options accordingly. Download the patch `memorylimit_patch.yaml`. It contains the memory limits setup. + ``` cd $DEMO_HOME -wget https://raw.githubusercontent.com/kinflate/example-springboot-instances/master/production/memorylimit_patch.yaml +wget -q $CONTENT/example-springboot-instances/master/production/memorylimit_patch.yaml cat memorylimit_patch.yaml ``` + The output contains + > ``` > apiVersion: apps/v1beta2 > kind: Deployment @@ -292,14 +264,17 @@ We also want to add liveness check and readiness check in the production environ has end points such as `/actuator/health` for this. We can customize the k8s deployment resource to talk to Spring Boot end point. Download the patch `healthcheck_patch.yaml`. It contains the liveness probes and readyness probes. + ``` cd $DEMO_HOME -wget https://raw.githubusercontent.com/kinflate/example-springboot-instances/master/production/healthcheck_patch.yaml +wget -q $CONTENT/example-springboot-instances/master/production/healthcheck_patch.yaml cat healthcheck_patch.yaml ``` + The output contains + > ``` > apiVersion: apps/v1beta2 > kind: Deployment @@ -324,15 +299,21 @@ The output contains > port: 8080 > ``` -### Add patch to Manifest -Currently `kustomize` doesn't provide a command to add a file as a patch, but we can edit the file `kustomize.yaml` to +### Add patches + +Currently `kustomize` doesn't provide a command to add a file as a patch, but we can edit the file `kustomize.yaml` to include this patch. + ``` mv $DEMO_HOME/kustomize.yaml $DEMO_HOME/tmp.yaml -sed '/patches:$/{N;s/- patch.yaml/- patch.yaml\n- memorylimit_patch.yaml\n- healthcheck_patch.yaml/}' $DEMO_HOME/tmp.yaml >& $DEMO_HOME/kustomize.yaml + +sed '/patches:$/{N;s/- patch.yaml/- patch.yaml\n- memorylimit_patch.yaml\n- healthcheck_patch.yaml/}' \ + $DEMO_HOME/tmp.yaml >& $DEMO_HOME/kustomize.yaml ``` + `kustomize.yaml` should have patches field: + > ``` > patches > - patch.yaml From 0e7145555cedc96d21354db9d2168ddbd292d2d8 Mon Sep 17 00:00:00 2001 From: Sunil Arora Date: Wed, 11 Apr 2018 15:16:57 -0700 Subject: [PATCH 03/43] kustomize: automate github release publishing An example release looks like: https://github.com/droot/kubectl/releases/tag/v0.1.0 --- build/.goreleaser.yml | 29 +++++++++++++++++++++++++++++ build/build.sh | 31 +++++++++++-------------------- build/cloudbuild.yaml | 17 ++++++----------- build/cloudbuild_local.yaml | 11 ++++++----- 4 files changed, 52 insertions(+), 36 deletions(-) create mode 100644 build/.goreleaser.yml diff --git a/build/.goreleaser.yml b/build/.goreleaser.yml new file mode 100644 index 0000000000..fc91ac734d --- /dev/null +++ b/build/.goreleaser.yml @@ -0,0 +1,29 @@ +# This is an example goreleaser.yaml file with some sane defaults. +# Make sure to check the documentation at http://goreleaser.com +project_name: kustomize +builds: +- main: ./cmd/kustomize + binary: kustomize + ldflags: -s -X k8s.io/kubectl/cmd/kustomize/version.kustomizeVersion={{.Version}} -X k8s.io/kubectl/cmd/kustomize/version.gitCommit={{.Commit}} -X k8s.io/kubectl/cmd/kustomize/version.buildDate={{.Date}} + goos: + - darwin + - linux + - windows + env: + - CGO_ENABLED=0 +archive: + wrap_in_directory: true +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ .Tag }}-next" +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' +release: + github: + owner: droot + name: kubectl diff --git a/build/build.sh b/build/build.sh index a557fcf2a8..1ceba94ccf 100755 --- a/build/build.sh +++ b/build/build.sh @@ -22,30 +22,21 @@ set -x # - Create the directory to host the code that matches the expected GOPATH package locations # - Use /go as the default GOPATH because this is what the image uses # - Link our current directory (containing the source code) to the package location in the GOPATH + export PKG=k8s.io export REPO=kubectl export CMD=kustomize -mkdir -p /go/src/$PKG -ln -s $(pwd) /go/src/$PKG/$REPO - -# Create the output directory for the binaries we will build -# Make sure CGO is 0 so the binaries are statically compiled and linux which is necessary for cross compiling go -export CGO=0 -export DEST=/workspace/_output/$CMD/bin -mkdir -p $DEST || echo "" +GO_PKG_OWNER=$GOPATH/src/$PKG +GO_PKG_PATH=$GO_PKG_OWNER/$REPO -go build -o $DEST/$CMD $PKG/$REPO/cmd/$CMD +mkdir -p $GO_PKG_OWNER +ln -s $(pwd) $GO_PKG_PATH -# Explicitly set the values of the variables in package "X" using ldflag so that they are statically compiled into -# the "version" command -export GITCOMMIT=$(git rev-parse HEAD) -export BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') -export X=$PKG/$REPO/cmd/$CMD/version -go build -o $DEST/$CMD \ - -ldflags "-X $X.kustomizeVersion=$TAG -X $X.goos=$GOOS -X $X.goarch=$GOARCH -X $X.gitCommit=$GITCOMMIT -X $X.buildDate=$BUILDDATE" \ - $PKG/$REPO/cmd/$CMD +# When invoked in container builder, this script runs under /workspace which is +# not under $GOPATH, so we need to `cd` to repo under GOPATH for it to build +cd $GO_PKG_PATH -# Generate the tar archive -cd /workspace/_output/ -tar -czvf /workspace/$CMD-$VERSION-$GOOS-$GOARCH.tar.gz $CMD +/goreleaser release --config=cmd/$CMD/build/.goreleaser.yml --debug --rm-dist +# --skip-validate +# --snapshot --skip-publish diff --git a/build/cloudbuild.yaml b/build/cloudbuild.yaml index a0b63264a6..3df58ecd86 100644 --- a/build/cloudbuild.yaml +++ b/build/cloudbuild.yaml @@ -16,15 +16,10 @@ steps: - name: "ubuntu" args: ["mkdir", "-p", "/workspace/_output"] -- name: "golang:1.10-stretch" +- name: "gcr.io/kustomize-199618/golang_with_goreleaser:1.10-stretch" args: ["bash", "cmd/kustomize/build/build.sh"] - env: - - 'GOOS=${_GOOS}' - - 'GOARCH=${_GOARCH}' - - 'VERSION=${TAG_NAME}' -- name: 'gcr.io/cloud-builders/gsutil' - args: ['-h', 'Content-Type:application/gzip', 'cp', '-a', 'public-read', 'kustomize-${TAG_NAME}-${_GOOS}-${_GOARCH}.tar.gz', 'gs://kustomize-release/kustomize-${TAG_NAME}-${_GOOS}-${_GOARCH}.tar.gz'] - env: - - 'GOOS=${_GOOS}' - - 'GOARCH=${_GOARCH}' - - 'VERSION=${TAG_NAME}' + secretEnv: ['GITHUB_TOKEN'] +secrets: +- kmsKeyName: projects/kustomize-199618/locations/global/keyRings/github-tokens/cryptoKeys/gh-release-token + secretEnv: + GITHUB_TOKEN: CiQAyrREbPgXJOeT7M3t+WlxkhXwlMPudixBeiyWTjmLOMLqdK4SUQA0W+xUmDJKAhyfHCcwqSEzUn9OwKC7XAYcmwe0CCKTCbPbDgmioDK24q3LVapndXNvnnHvCjhOJNEr1o+P1DCF+LlzYV2YL8lP09rrKrslPg== diff --git a/build/cloudbuild_local.yaml b/build/cloudbuild_local.yaml index 66f9b87e52..6de58c4dfb 100644 --- a/build/cloudbuild_local.yaml +++ b/build/cloudbuild_local.yaml @@ -23,9 +23,10 @@ steps: - name: "ubuntu" args: ["mkdir", "-p", "/workspace/_output"] -- name: "golang:1.10-stretch" +- name: "gcr.io/kustomize-199618/golang_with_goreleaser:1.10-stretch" args: ["bash", "cmd/kustomize/build/build.sh"] - env: - - 'GOOS=${_GOOS}' - - 'GOARCH=${_GOARCH}' - - 'VERSION=${TAG_NAME}' + secretEnv: ['GITHUB_TOKEN'] +secrets: +- kmsKeyName: projects/kustomize-199618/locations/global/keyRings/github-tokens/cryptoKeys/gh-release-token + secretEnv: + GITHUB_TOKEN: CiQAyrREbPgXJOeT7M3t+WlxkhXwlMPudixBeiyWTjmLOMLqdK4SUQA0W+xUmDJKAhyfHCcwqSEzUn9OwKC7XAYcmwe0CCKTCbPbDgmioDK24q3LVapndXNvnnHvCjhOJNEr1o+P1DCF+LlzYV2YL8lP09rrKrslPg== From 6be8809a9b6fc328a973f61c9f7e591223067e23 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Wed, 11 Apr 2018 17:15:14 -0700 Subject: [PATCH 04/43] Drop k8s metatype fields from kustomize.yaml struct --- demos/helloWorld.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/demos/helloWorld.md b/demos/helloWorld.md index d6e9c5bf5c..63a02513a2 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -133,10 +133,7 @@ defining a new name prefix, and some different labels. ``` cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml -apiVersion: manifest.k8s.io/v1alpha1 -kind: Package -metadata: - name: makes-staging-hello +kustomizationName: makes-staging-hello namePrefix: staging- objectLabels: instance: staging @@ -178,10 +175,7 @@ with a different name prefix and labels. ``` cat <$OVERLAYS/production/kustomize.yaml -apiVersion: manifest.k8s.io/v1alpha1 -kind: Package -metadata: - name: makes-production-tuthello +kustomizationName: makes-production-tuthello namePrefix: production- objectLabels: instance: production From 1aee18ab429f8d1bfa781bcf167e637bf4b698d1 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Thu, 12 Apr 2018 13:31:52 -0700 Subject: [PATCH 05/43] manifest becomes kustomization --- Makefile | 2 +- README.md | 4 +- demos/helloWorld.md | 22 ++++----- docs/glossary.md | 54 ++++++++++----------- docs/{Kube-manifest.yaml => kustomize.yaml} | 6 +-- docs/workflows.md | 10 ++-- 6 files changed, 47 insertions(+), 51 deletions(-) rename docs/{Kube-manifest.yaml => kustomize.yaml} (88%) diff --git a/Makefile b/Makefile index 9b0d1685ee..c1fefaef35 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ SHELL := /bin/bash -euo pipefail -config_file_name = Kube-manifest.yaml +config_file_name = kustomize.yaml example_config = docs/$(config_file_name) .PHONY: all diff --git a/README.md b/README.md index c3c474f3e6..a71a50593a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [demo]: demos/README.md [imageBase]: docs/base.jpg [imageOverlay]: docs/overlay.jpg -[manifest]: docs/glossary.md#manifest +[kustomization]: docs/glossary.md#kustomization [overlay]: docs/glossary.md#overlay [resources]: docs/glossary.md#resource [workflows]: docs/workflows.md @@ -29,7 +29,7 @@ go get k8s.io/kubectl/cmd/kustomize #### 1) Make a base -A [base] configuration is a [manifest] listing a set of +A [base] configuration is a [kustomization] file listing a set of k8s [resources] - deployments, services, configmaps, secrets that serve some common purpose. diff --git a/demos/helloWorld.md b/demos/helloWorld.md index 63a02513a2..f9a92bf584 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -3,7 +3,7 @@ [hello]: https://github.com/monopole/hello [instance]: ../docs/glossary.md#instance [instances]: ../docs/glossary.md#instance -[manifest]: ../docs/glossary.md#manifest +[kustomization]: ../docs/glossary.md#kustomization [original]: https://github.com/kinflate/example-hello [overlay]: ../docs/glossary.md#overlay [overlays]: ../docs/glossary.md#overlay @@ -74,11 +74,11 @@ cluster: to instantiate the _hello_ service. `kubectl` would only recognize the resource files. -## The Base Manifest +## The Base Kustomization -The `base` directory has a [manifest] file: +The `base` directory has a [kustomization] file: - + ``` BASE=$DEMO_HOME/base more $BASE/kustomize.yaml @@ -125,12 +125,12 @@ mkdir -p $OVERLAYS/staging mkdir -p $OVERLAYS/production ``` -#### Staging Manifest +#### Staging Kustomization -In the `staging` directory, make a manifest +In the `staging` directory, make a kustomization defining a new name prefix, and some different labels. - + ``` cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml kustomizationName: makes-staging-hello @@ -167,12 +167,12 @@ data: EOF ``` -#### Production Manifest +#### Production Kustomization -In the production directory, make a manifest +In the production directory, make a kustomization with a different name prefix and labels. - + ``` cat <$OVERLAYS/production/kustomize.yaml kustomizationName: makes-production-tuthello @@ -215,7 +215,7 @@ EOF - a _base_ directory - a slightly customized clone of the original configuration, and - - an _overlays_ directory, containing the manifests + - an _overlays_ directory, containing the kustomizations and patches required to create distinct _staging_ and _production_ instances in a cluster. diff --git a/docs/glossary.md b/docs/glossary.md index e35db30efc..4484769d40 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -11,7 +11,7 @@ [bases]: #base [bespoke]: #bespoke-configuration [kustomize]: #kustomize -[manifest]: #manifest +[kustomization]: #kustomization [off-the-shelf]: #off-the-shelf [overlay]: #overlay [overlays]: #overlay @@ -73,7 +73,7 @@ be able to [apply] a base to a cluster directly. ## bespoke configuration -A _bespoke_ configuration is a [manifest] and some +A _bespoke_ configuration is a [kustomization] and some [resources] created and maintained internally by some organization for their own purposes. @@ -120,28 +120,14 @@ an [overlay] to a [base]. > deployments with a large number of replicas and higher > cpu and memory requests. +## kustomization -## kustomize - -_kustomize_ is a command line tool supporting template-free -customization of declarative configuration targetted to -k8s. - -_Targetted to k8s means_ that kustomize may need some -limited understanding of API resources, k8s concepts -like names, labels, namespaces, etc. and the semantics -of resource patching. - -kustomize is an implementation of [DAM]. - -## manifest - -A _manifest_ is a file called `kustomize.yaml` that +A _kustomization_ is a file called `kustomize.yaml` that describes a configuration consumable by [kustomize]. -Here's an [example](Kube-manifest.yaml). +Here's an [example](kustomize.yaml). -A manifest contains fields falling into these categories: +A kustomization contains fields falling into these categories: * Immediate customization instructions - _nameprefix_, _labelprefix_, etc. @@ -153,12 +139,26 @@ A manifest contains fields falling into these categories: resources defined in a [base] (only meaningful in an [overlay]). * [bases] - path to a directory containing - a [manifest] (only meaningful in an [overlay]). + a [kustomization] (only meaningful in an [overlay]). * (_TBD_) Standard k8s API kind-version fields. +## kustomize + +_kustomize_ is a command line tool supporting template-free +customization of declarative configuration targetted to +k8s. + +_Targetted to k8s means_ that kustomize may need some +limited 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 manifest and +An _off-the-shelf_ configuration is a kustomization and resources intentionally published somewhere for others to use. @@ -184,8 +184,8 @@ own [overlays] to do further customization. An _overlay_ is a [target] that modifies (and thus depends on) another target. -The [manifest] in an overlay refers to (via file path, -URI or other method) to _some other manifest_, known as +The [kustomization] in an overlay refers to (via file path, +URI or other method) to _some other kustomization_, known as its [base]. An overlay is unusable without its base. @@ -207,7 +207,7 @@ One configures the cluser like this: > kubectl apply -f - > ``` -Usage of the base is implicit (the overlay's manifest +Usage of the base is implicit (the overlay's kustomization points to the base). An overlay may act as a base to another overlay. @@ -225,7 +225,7 @@ A _patch_ is a partially defined k8s resource with a name that must match a resource already known per traversal rules built into [kustomize]. -_Patch_ is a field in the manifest, distinct from +_Patch_ is a field in the kustomization, distinct from resources, because a patch file looks like a resource file, but has different semantics. A patch depends on (modifies) a resource, whereas a resourse has no @@ -252,7 +252,7 @@ The _target_ is the argument to `build`, e.g.: `$target` must be a path to a directory that immediately contains a file called -`kustomize.yaml` (i.e. a [manifest]). +`kustomize.yaml` (i.e. a [kustomization]). The target contains, or refers to, all the information needed to create customized resources to send to the diff --git a/docs/Kube-manifest.yaml b/docs/kustomize.yaml similarity index 88% rename from docs/Kube-manifest.yaml rename to docs/kustomize.yaml index 98e59dfb85..1f5fb695eb 100644 --- a/docs/Kube-manifest.yaml +++ b/docs/kustomize.yaml @@ -1,9 +1,5 @@ # This is a generated example; do not edit. Rebuild with 'make docs'. - -apiVersion: manifest.k8s.io/v1alpha1 -kind: Manifest -metadata: - name: helloworld +kustomizationName: helloworld description: helloworld does useful stuff. namePrefix: some-prefix # Labels to add to all objects and selectors. diff --git a/docs/workflows.md b/docs/workflows.md index 2c05249c21..b94aa45368 100644 --- a/docs/workflows.md +++ b/docs/workflows.md @@ -4,7 +4,7 @@ [base]: glossary.md#base [fork]: https://guides.github.com/activities/forking/ [instances]: glossary.md#instance -[manifest]: glossary.md#manifest +[kustomization]: glossary.md#kustomization [off-the-shelf]: glossary.md#off-the-shelf [overlays]: glossary.md#overlay [patch]: glossary.md#patch @@ -39,8 +39,8 @@ control repositories owned by others. > mkdir -p ~/ldap/base > ``` -In this directory, create and commit a [manifest] -and a set of [resources]. +In this directory, create and commit a [kustomization] +file and a set of [resources]. #### 3) create [overlays] @@ -49,8 +49,8 @@ and a set of [resources]. > mkdir -p ~/ldap/overlays/production > ``` -Each of these directories needs a [manifest] -and one or more [patches]. +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. From 2b764f2f392955a47101c9b503348b1f3fdd2794 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Fri, 13 Apr 2018 09:58:49 -0700 Subject: [PATCH 06/43] Drop the init command --- Makefile | 25 ------------------------- docs/kustomize.yaml | 1 - 2 files changed, 26 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index c1fefaef35..0000000000 --- a/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -SHELL := /bin/bash -euo pipefail - -config_file_name = kustomize.yaml -example_config = docs/$(config_file_name) - -.PHONY: all -all: docs - -# In a branch, run 'make docs' to update docs with -# generated code, then merge it to master. -docs: $(example_config) - -# Use kustomize to create the standard kustomize configuration -# file that appears in the website's documentation. -$(example_config): /tmp/bin/kustomize - rm -f TMP - echo "# This is a generated example; do not edit. Rebuild with 'make docs'." >> TMP - echo " " >> TMP - /tmp/bin/kustomize init - cat $(config_file_name) >> TMP - mv TMP $(example_config) - rm $(config_file_name) - -/tmp/bin/kustomize: - go build -o /tmp/bin/kustomize kustomize.go diff --git a/docs/kustomize.yaml b/docs/kustomize.yaml index 1f5fb695eb..9252a37b27 100644 --- a/docs/kustomize.yaml +++ b/docs/kustomize.yaml @@ -1,4 +1,3 @@ -# This is a generated example; do not edit. Rebuild with 'make docs'. kustomizationName: helloworld description: helloworld does useful stuff. namePrefix: some-prefix From 8c57c1e9740ad35367639883f8d286046e3b93c5 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Fri, 13 Apr 2018 13:32:08 -0700 Subject: [PATCH 07/43] Some kustomization field renaming. --- demos/helloWorld.md | 10 ++++------ demos/mySql.md | 2 +- demos/springboot.md | 4 ++-- docs/kustomize.yaml | 6 ++---- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/demos/helloWorld.md b/demos/helloWorld.md index f9a92bf584..807625466f 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -133,12 +133,11 @@ defining a new name prefix, and some different labels. ``` cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml -kustomizationName: makes-staging-hello namePrefix: staging- -objectLabels: +labelsToAdd: instance: staging org: acmeCorporation -objectAnnotations: +annotationsToAdd: note: Hello, I am staging! bases: - ../../base @@ -175,12 +174,11 @@ with a different name prefix and labels. ``` cat <$OVERLAYS/production/kustomize.yaml -kustomizationName: makes-production-tuthello namePrefix: production- -objectLabels: +labelsToAdd: instance: production org: acmeCorporation -objectAnnotations: +annotationsToAdd: note: Hello, I am production! bases: - ../../base diff --git a/demos/mySql.md b/demos/mySql.md index ceb22374ee..6464da841d 100644 --- a/demos/mySql.md +++ b/demos/mySql.md @@ -131,7 +131,7 @@ selector. `kustomize` does not have `set label` command to add label, but we can edit `kustomize.yaml` file under `prod` directory and add the production labels under -`objectLabels` fields as highlighted below. +`labelsToAdd` fields as highlighted below. ``` diff --git a/demos/springboot.md b/demos/springboot.md index 6bf839f0c9..a34e0f5743 100644 --- a/demos/springboot.md +++ b/demos/springboot.md @@ -156,7 +156,7 @@ cat kustomize.yaml > ``` > namePrefix: prod- -> objectAnnotations: +> annotationsToAdd: > note: This is a example annotation > ``` @@ -206,7 +206,7 @@ selector. `kustomize` does not have `edit set label` command to add label, but we can edit `kustomize.yaml` file under `prod` directory and add the production labels under -`objectLabels` fields as highlighted below. +`labelsToAdd` fields as highlighted below. ``` diff --git a/docs/kustomize.yaml b/docs/kustomize.yaml index 9252a37b27..8db80898b3 100644 --- a/docs/kustomize.yaml +++ b/docs/kustomize.yaml @@ -1,12 +1,10 @@ -kustomizationName: helloworld -description: helloworld does useful stuff. namePrefix: some-prefix # Labels to add to all objects and selectors. # These labels would also be used to form the selector for apply --prune # Named differently than “labels” to avoid confusion with metadata for this object -objectLabels: +labelsToAdd: app: helloworld -objectAnnotations: +annotationsToAdd: note: This is an example annotation resources: [] #- service.yaml From aedef1e02caab960ffddc86920ec4d37c1c24166 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Mon, 16 Apr 2018 13:43:16 -0700 Subject: [PATCH 08/43] Update figs --- docs/base.jpg | Bin 41948 -> 39704 bytes docs/glossary.md | 6 +++--- docs/overlay.jpg | Bin 50739 -> 47005 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/base.jpg b/docs/base.jpg index 806d8478c959fcaa43fe27cdfb711bed1ee4cc23..91e1dae4de213831523bc5482a5c1a444dcdcb14 100644 GIT binary patch literal 39704 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 literal 41948 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 ``` -> kustomize inflate someapp/overlays/staging |\ +> kustomize build someapp/overlays/staging |\ > kubectl apply -f - > -> kustomize inflate someapp/overlays/production |\ +> kustomize build someapp/overlays/production |\ > kubectl apply -f - > ``` diff --git a/docs/overlay.jpg b/docs/overlay.jpg index a8742c6406ed655109e16afc4d0a9afd9aaf6663..df9c11025e6cf1af5176c65a05750f0ac20a5c42 100644 GIT binary patch literal 47005 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 From cfc0cea8b141ee68dbec3ac736deab2ef1dd8bb4 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Mon, 16 Apr 2018 14:01:31 -0700 Subject: [PATCH 09/43] updated figs --- docs/base.jpg | Bin 39704 -> 39549 bytes docs/overlay.jpg | Bin 47005 -> 47070 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/base.jpg b/docs/base.jpg index 91e1dae4de213831523bc5482a5c1a444dcdcb14..fc2cf3569e0b7e97760d56c4dc5f3de37c65a376 100644 GIT binary patch delta 24731 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 z zd`m6Zp3X!~ldllJv$IB99W(9RBxc8I&tIKddm7Wy3nbg~&Aqyw=Pjyq>j)prQ0g9U zMy4SI3GOy z1k!ip<{~X?g|aDrkNL7pzM9kZDCWW=t?JiY7lJH9U@M`Pq*VeAIRRl&Dc=h?3mu0Z zfaB#R6sCv@BpVgD$Ru;AKD!T~3;fGJOj{0erx~}-927_HBc;C4VM{L1-pBA3Ha+yV zX27%zCP|$!9skZ4ZQVy;QtY6gdozud-WC%K>EW@kPWEW`jF-9<0f{Z;n8h5F0;*IXrvSNFw^L(hUz?kn88 z@XgC>$nP#ExQ9CRVZudD2xQ6H9G6hpSUeu}Wyp~>tm?Zxa!IcYy_I>jbyhSy^#|ZH z7tXP110Q~RF!rWtd%hX_uIwknWJxya`HP08iD(%-UR>Ha^9R8EZCA2|L;j|w@m+mz zJos|AVp`SOFhP@gZEXqn^X$h(3Xgw9iod)pilb;0_o*8N9Fk|`OxO%@kO2!_qoP=O zb9JR>63j~!XKdKao;2{zd1HBKeR#+kk^bYFr%F>e?YQj$N*FNWlfbe>s9#)=>l23qM@ugR?m)X{pU- zL2u3|)P3wo5z+GY9PjA??;+9;ab~2y(I*S*LMzszu9@WAZMQ4X+;)1;)A6EJy;MGl zJa!4`*DsFuyU5|rqsw+0G=Sch*mhuM?E4eF^tP8nRS>@TFE{H?XQcml_IJ$u$4LmD zq?N;++*2R_B)yxiH$21w1rs%Zhn3<8D{zkG(LZVz4HM3jK z19@90E6FXxeiW_uatLz?>amHhmL;WhPFik_a3gg!abL}kl5wW_v+5JGmO;G=r9~Bn zlKr<<%`;IrMPi?u9dAzU?SukEra))ef9v-&CxnMn!*~%^>^0 zz-MBjy7BJGndbZLZCn;xGWRW`^K`Izb|s}r`PriAF=M%KCFO_eAv6IX_@ZpI#Ldzw z1Tg|{Uan)DdpO;e(=u;?LKv|pZRC=D>#2QofQ`p65b1ZEzdxc59q;rm_0J76_I+a0 z=i|lMkq;T}P2=W>`!;C__>4QC&9B=G!TufAHdZ={j-fAMMe@}lR2dL{Np1YQE)kI4 z_9*F@BPT0`SNSTu``h8$m6%?qlnBU}=2c7osg^$U;gO~rL0*4;yHe=L%lJFdf3d5U3tLvOFiR0MlT4AU z-#j`&tz@tf>v6x!x?$TkYcj|<#KS$Y5M(SFuO4wA&lx*iv3iv_4tmf({AEhY_k63) oeez90`A~*=mO>{k_cdn!CoDsOO1VXWgJ%9$?Y9#63I16AKOqBqW&i*H diff --git a/docs/overlay.jpg b/docs/overlay.jpg index df9c11025e6cf1af5176c65a05750f0ac20a5c42..eca3125af80f5dd1e46d2507ae5cb32edf7b8e18 100644 GIT binary patch delta 30333 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 _?MD0A1v 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 From 428e980eb56909d0aee2afeb1bc95279aacd936f Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Fri, 13 Apr 2018 11:17:10 -0700 Subject: [PATCH 10/43] Example kustomization file. --- docs/kustomize.yaml | 116 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 101 insertions(+), 15 deletions(-) diff --git a/docs/kustomize.yaml b/docs/kustomize.yaml index 8db80898b3..1caee88ba9 100644 --- a/docs/kustomize.yaml +++ b/docs/kustomize.yaml @@ -1,15 +1,101 @@ -namePrefix: some-prefix -# Labels to add to all objects and selectors. -# These labels would also be used to form the selector for apply --prune -# Named differently than “labels” to avoid confusion with metadata for this object -labelsToAdd: - app: helloworld -annotationsToAdd: - note: This is an example annotation -resources: [] -#- service.yaml -#- ../some-dir/ -# There could also be configmaps in Base, which would make these overlays -configMapGenerator: [] -# There could be secrets in Base, if just using a fork/rebase workflow -secretGenerator: [] +# ---------------------------------------------------- +# Example kustomize.yaml content. +# +# This file declares the customization provided by +# the kustomize program. +# +# Since customization is, by definition, _custom_, +# there are no sensible default values for the fields +# in this file. +# +# The field values used below are merely examples, not +# to be copied literally. The values won't work if +# they happen to be references to external files that +# don't exist. +# +# In practice, fields with no value should simply be +# omitted from kustomize.yaml to reduce the content +# visible in configuration reviews. +# ---------------------------------------------------- + + +# Value of this field is prepended to the +# names of all resources, e.g. a deployment named +# "wordpress" becomes "alices-wordpress". +namePrefix: alices- + +# Labels to add to all resources and selectors. +commonLabels: + someName: someValue + owner: alice + app: bingo + +# Annotations (non-identifying metadata) +# to add to all resources. Like labels, +# these are key value pairs. +commonAnnotations: + oncallPager: 800-555-1212 + +# Each entry in this list must resolve to an existing +# resource definition in YAML. These are the resource +# files that kustomize reads, modifies and emits as a +# YAML string, with resources separated by document +# markers ("---"). +resources: +- some-service.yaml +- ../some-dir/some-deployment.yaml + +# Each entry in this list results in the creation of +# one ConfigMap resource (it's a generator of n maps). +# The example below creates a ConfigMap with the +# names and contents of the given files. +configMapGenerator: +- name: myJavaServerProps + files: + - application.properties + - more.properties + +# Each entry in this list results in the creation of +# one Secret resource (it's a generator of n secrets). +# A command can do anything to get a secret, +# e.g. prompt the user directly, start a webserver to +# initate an oauth dance, etc. +secretGenerator: +- name: app-tls + commands: + tls.crt: "cat secret/tls.cert" + tls.key: "cat secret/tls.key" + type: "kubernetes.io/tls" + +# Each entry in this list should resolve to a directory +# containing a kustomization file, else the +# customization fails. +# +# The presence of this field means this file (the file +# you a reading) is an _overlay_ that further +# customizes information coming from these _bases_. +# +# Typical use case: a dev, staging and production +# environment that are mostly identical but differing +# crucial ways (image tags, a few server arguments, +# etc. that differ from the common base). +bases: +- ../../base + +# Each entry in this list should resolve to +# a partial or complete resource definition file. +# +# The names in these (possibly partial) resource files +# must match names already loaded via the `resources` +# field or via `resources` loaded transitively via the +# `bases` entries. 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. +patches: +- service_port_8888.yaml +- deployment_increase_replicas.yaml +- deployment_increase_memory.yaml From 897def74836151b978818d816def7af31d89ba61 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 17 Apr 2018 11:16:49 -0700 Subject: [PATCH 11/43] kustomize.yaml becomes kustomization.yaml --- demos/helloWorld.md | 26 +++++++------- demos/mySql.md | 28 +++++++-------- demos/springboot.md | 40 ++++++++++----------- docs/glossary.md | 13 +++---- docs/{kustomize.yaml => kustomization.yaml} | 0 5 files changed, 52 insertions(+), 55 deletions(-) rename docs/{kustomize.yaml => kustomization.yaml} (100%) diff --git a/demos/helloWorld.md b/demos/helloWorld.md index 807625466f..f0c4f09420 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -57,7 +57,7 @@ Expecting something like: > └── base > ├── configMap.yaml > ├── deployment.yaml -> ├── kustomize.yaml +> ├── kustomization.yaml > ├── LICENSE > ├── README.md > └── service.yaml @@ -81,7 +81,7 @@ The `base` directory has a [kustomization] file: ``` BASE=$DEMO_HOME/base -more $BASE/kustomize.yaml +more $BASE/kustomization.yaml ``` Run `kustomize` on the base to emit customized resources @@ -100,7 +100,7 @@ label_ applied to all resources: ``` sed -i 's/app: hello/app: my-hello/' \ - $BASE/kustomize.yaml + $BASE/kustomization.yaml ``` See the effect: @@ -132,12 +132,12 @@ defining a new name prefix, and some different labels. ``` -cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml +cat <<'EOF' >$OVERLAYS/staging/kustomization.yaml namePrefix: staging- -labelsToAdd: +commonLabels: instance: staging org: acmeCorporation -annotationsToAdd: +commonAnnotations: note: Hello, I am staging! bases: - ../../base @@ -173,12 +173,12 @@ with a different name prefix and labels. ``` -cat <$OVERLAYS/production/kustomize.yaml +cat <$OVERLAYS/production/kustomization.yaml namePrefix: production- -labelsToAdd: +commonLabels: instance: production org: acmeCorporation -annotationsToAdd: +commonAnnotations: note: Hello, I am production! bases: - ../../base @@ -231,16 +231,16 @@ Expecting something like: > ├── base > │   ├── configMap.yaml > │   ├── deployment.yaml -> │   ├── kustomize.yaml +> │   ├── kustomization.yaml > │   ├── LICENSE > │   ├── README.md > │   └── service.yaml > └── overlays > ├── production > │   ├── deployment.yaml -> │   └── kustomize.yaml +> │   └── kustomization.yaml > └── staging -> ├── kustomize.yaml +> ├── kustomization.yaml > └── map.yaml > ``` @@ -373,7 +373,7 @@ kustomize build $OVERLAYS/staging |\ The configMap name is prefixed by _staging-_, per the `namePrefix` field in -`$OVERLAYS/staging/kustomize.yaml`. +`$OVERLAYS/staging/kustomization.yaml`. The suffix to the configMap name is generated from a hash of the maps content - in this case the name suffix diff --git a/demos/mySql.md b/demos/mySql.md index 6464da841d..62c3dfef16 100644 --- a/demos/mySql.md +++ b/demos/mySql.md @@ -30,16 +30,16 @@ done ``` -### Initialize kustomize.yaml +### Initialize kustomization.yaml The `kustomize` program gets its instructions from -a file called `kustomize.yaml`. +a file called `kustomization.yaml`. Start this file: ``` -touch $DEMO_HOME/kustomize.yaml +touch $DEMO_HOME/kustomization.yaml ``` ### Add the resources @@ -52,10 +52,10 @@ kustomize edit add resource secret.yaml kustomize edit add resource service.yaml kustomize edit add resource deployment.yaml -cat kustomize.yaml +cat kustomization.yaml ``` -`kustomize.yaml`'s resources section should contain: +`kustomization.yaml`'s resources section should contain: > ``` > resources: @@ -76,10 +76,10 @@ cd $DEMO_HOME kustomize edit set nameprefix 'prod-' -cat kustomize.yaml +cat kustomization.yaml ``` -`kustomize.yaml` should have updated value of namePrefix field: +`kustomization.yaml` should have updated value of namePrefix field: > ``` > namePrefix: prod- @@ -128,15 +128,13 @@ We want resources in production environment to have certain labels so that we can query them by label selector. -`kustomize` does not have `set label` command to add -label, but we can edit `kustomize.yaml` file under -`prod` directory and add the production labels under -`labelsToAdd` fields as highlighted below. +`kustomize` does not have `edit set label` command to add +a label, but one can always edit `kustomization.yaml` directly: ``` sed -i 's/app: helloworld/app: prod/' \ - $DEMO_HOME/kustomize.yaml + $DEMO_HOME/kustomization.yaml ``` At this point, running `kustomize build` will @@ -170,11 +168,11 @@ spec: EOF ``` -Add the patch file to `kustomize.yaml`: +Add the patch file to `kustomization.yaml`: ``` -cat <<'EOF' >> $DEMO_HOME/kustomize.yaml +cat <<'EOF' >> $DEMO_HOME/kustomization.yaml patches: - persistent-disk.yaml EOF @@ -187,7 +185,7 @@ Lets break this down: in deployment.yaml - Then we added `persistent-disk.yaml` to list of - `patches` in `kustomize.yaml`. `kustomize build` + `patches` in `kustomization.yaml`. `kustomize build` will apply this patch to the deployment resource with the name `mysql` as defined in the patch. diff --git a/demos/springboot.md b/demos/springboot.md index a34e0f5743..a5ef306b6a 100644 --- a/demos/springboot.md +++ b/demos/springboot.md @@ -31,16 +31,16 @@ for f in service deployment; do \ done ``` -### Initialize kustomize.yaml +### Initialize kustomization.yaml The `kustomize` program gets its instructions from -a file called `kustomize.yaml`. +a file called `kustomization.yaml`. Start this file: ``` -touch $DEMO_HOME/kustomize.yaml +touch $DEMO_HOME/kustomization.yaml ``` ### Add the resources @@ -52,10 +52,10 @@ cd $DEMO_HOME kustomize edit add resource service.yaml kustomize edit add resource deployment.yaml -cat kustomize.yaml +cat kustomization.yaml ``` -`kustomize.yaml`'s resources section should contain: +`kustomization.yaml`'s resources section should contain: > ``` > resources: @@ -71,10 +71,10 @@ cd $DEMO_HOME wget -q $CONTENT/example-springboot/master/application.properties kustomize edit add configmap demo-configmap --from-file application.properties -cat kustomize.yaml +cat kustomization.yaml ``` -`kustomize.yaml`'s configMapGenerator section should contain: +`kustomization.yaml`'s configMapGenerator section should contain: > ``` > configMapGenerator: @@ -111,7 +111,7 @@ spec: value: prod EOF -cat <>$DEMO_HOME/kustomize.yaml +cat <>$DEMO_HOME/kustomization.yaml patches: - patch.yaml EOF @@ -125,10 +125,10 @@ EOF kustomize edit add configmap demo-configmap --from-file application-prod.properties -cat kustomize.yaml +cat kustomization.yaml ``` -`kustomize.yaml`'s configMapGenerator section should contain: +`kustomization.yaml`'s configMapGenerator section should contain: > ``` > configMapGenerator: > - files: @@ -149,14 +149,14 @@ cd $DEMO_HOME kustomize edit set nameprefix 'prod-' -cat kustomize.yaml +cat kustomization.yaml ``` -`kustomize.yaml` should have updated value of namePrefix field: +`kustomization.yaml` should have updated value of namePrefix field: > ``` > namePrefix: prod- -> annotationsToAdd: +> commonAnnotations: > note: This is a example annotation > ``` @@ -204,14 +204,12 @@ certain labels so that we can query them by label selector. `kustomize` does not have `edit set label` command to add -label, but we can edit `kustomize.yaml` file under -`prod` directory and add the production labels under -`labelsToAdd` fields as highlighted below. +a label, but one can always edit `kustomization.yaml` directly: ``` sed -i 's/app: helloworld/app: prod/' \ - $DEMO_HOME/kustomize.yaml + $DEMO_HOME/kustomization.yaml ``` At this point, running `kustomize build` will @@ -301,18 +299,18 @@ The output contains ### Add patches -Currently `kustomize` doesn't provide a command to add a file as a patch, but we can edit the file `kustomize.yaml` to +Currently `kustomize` doesn't provide a command to add a file as a patch, but we can edit the file `kustomization.yaml` to include this patch. ``` -mv $DEMO_HOME/kustomize.yaml $DEMO_HOME/tmp.yaml +mv $DEMO_HOME/kustomization.yaml $DEMO_HOME/tmp.yaml sed '/patches:$/{N;s/- patch.yaml/- patch.yaml\n- memorylimit_patch.yaml\n- healthcheck_patch.yaml/}' \ - $DEMO_HOME/tmp.yaml >& $DEMO_HOME/kustomize.yaml + $DEMO_HOME/tmp.yaml >& $DEMO_HOME/kustomization.yaml ``` -`kustomize.yaml` should have patches field: +`kustomization.yaml` should have patches field: > ``` > patches diff --git a/docs/glossary.md b/docs/glossary.md index afdf40dbe0..1ab3fb8ba0 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -122,15 +122,16 @@ an [overlay] to a [base]. ## kustomization -A _kustomization_ is a file called `kustomize.yaml` that +A _kustomization_ is a file called `kustomization.yaml` that describes a configuration consumable by [kustomize]. -Here's an [example](kustomize.yaml). + +Here's an [example](kustomization.yaml). A kustomization contains fields falling into these categories: - * Immediate customization instructions - - _namePrefix_, _labelsToAdd_, etc. + * Immediate customization declarations, e.g. + _namePrefix_, _commonLabels_, etc. * Resource _generators_ for configmaps and secrets. * References to _external files_ in these categories: * [resources] - completely specified k8s API objects, @@ -166,7 +167,7 @@ E.g. one might create a github repository like this: > ``` > github.com/username/someapp/ -> kustomize.yaml +> kustomization.yaml > deployment.yaml > configmap.yaml > README.md @@ -252,7 +253,7 @@ The _target_ is the argument to `build`, e.g.: `$target` must be a path to a directory that immediately contains a file called -`kustomize.yaml` (i.e. a [kustomization]). +`kustomization.yaml` (i.e. a [kustomization]). The target contains, or refers to, all the information needed to create customized resources to send to the diff --git a/docs/kustomize.yaml b/docs/kustomization.yaml similarity index 100% rename from docs/kustomize.yaml rename to docs/kustomization.yaml From 8eed3d495d3496adbda5516d229d93632f3d7e33 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 17 Apr 2018 13:49:09 -0700 Subject: [PATCH 12/43] new figs --- docs/base.jpg | Bin 39549 -> 39792 bytes docs/overlay.jpg | Bin 47070 -> 47379 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/base.jpg b/docs/base.jpg index fc2cf3569e0b7e97760d56c4dc5f3de37c65a376..a3e1e76017d47a17825d2f39c35549181c91692d 100644 GIT binary patch delta 21845 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 H&gcFHF+Z{0 delta 21503 zcmb5VRa9GHv@RN?NO5-$h2riMXp5Di#ex<0Ai<#!q|g?JAjN{a7ea7%cL`FQqAgyE zUG~0bkGszq_nvX?!+cm{J!Fl4{PUahll*BwzpqEHL1(8`BnN2!XT9PqNLP&IL@B$V zmkh~;1B76L@9ALj@A3bupy&usSuwmDzM>XC(&=donRYXAfk8ASU(7_win5t0FNur& zD$-rb^yvdK%wI7PC^v-<2RK-DK2nddL%T&l?Dp zOPeiJzti8p2j6?LQqr=gd@1_)5pQX?jg&Hyh64Q=q$Pwa0Bv9)z4f2@bbSXIYJeq$ z?O8>FBsEVAYt7&#bT`8drFq8+XEc2$-PXmyb=3z^PG8cYySeu*GYDcg9=r^9@?cuF zir}Qsc&kQ-jwbu}<9KO+Y8!vY4!hH*DvlwF%7(kG2b)q6Q_>lOsMpN_GyZ*SiTgC4 z8n?{_(5=`Nn8^}!`9)Z;lK0+P2ebq%)HTO32mkEUwUUrvgTgnf8rt$#4icOU^nJi3 zMGL+ONpFCWSk&+wdUPcM(4V&BQOE(R@3J#m;4)w{L3BC+_LS28t^qNNSu& zm?8dR`*`j*bGK5+xwc0D;m30hcvijIKj=1CVS^$zP;Wcp>>oFGcHIC$-rX6ahH4iI z(C>TTu+>d0R$Hjdx`r}x#N)HdMC0L!RK<=anGB1CDjKBr&if!~3k=*=DwB66P*(Pa zxU6o1KSOaOSo4qz^@j|W-JA3C>s^kCSbiUcMn?;*uc!yt^}Tx!*M1gPL-{*fCT9?j zfRASnRigFxl;?`=tu<7&Z6VPenFntN$B=9oJ2JO3cQ#jY2#0Re%Y^nGTlc)V}J&TVda>STmx|Pxt3_d|5G+EnZ!7ecxtgeU`rp47!;8tYX@QW2=NE zK;+R9?N6Iua9FG0P-<+3m=-;(i1Bb#{*D8ThbSpbRK73N9)2fP_;2}aVOu08$@uUe zG%a5|91N|m2MYWI^_8le4!KG)S_i0X(-Y=?(bnoK{OccpcQbeS>|u<{20ZxbkFhIs zSn$jvwy9J0mnP}{AGJI`N~E;N(%Nflw=qsj+*bo^h1ScC30*~pltp5^pV)Ae6_=S^ zpj_H9wg}hahoncq)z5>iq*9K;j=~2!)qIC}{RierF9Nx7J$C)?+s&;c&Brfoi00XMSl4;L946t-qGWEJS{ z@bUwYR768}+eU*>jw`hOPWchQ_NwyfQq@6!+19D?*)ORaJ*3W<~Hj@w`7OPG^cxcJh% zdIS`L8cykq6bgV)?K(Ws0-7MYqZeG|EX5@b?BZ8)vz782i-?l)R{ zG1em)nL~JvDtUtzWW2A{Jlc=DoMX{TXgc%$yhYXd|NQt@Zee?b>PpJFIkv9Ugm)OV zyz+hY-InK%Ix)A!8-q}PGWGgN&wHgkHTY5$>F|j+GDY0nOdLZ-Oh5s9IxoX`=0&!4 zc;!h<%=x!v=lkj_r>-*|`j zP7kklD)Q~uo{q0W`VpYdK$(>@VG-z7bfW|xYW@9TFM{2d`bKh~nh_xihuQvXh?9** zdjI*TC~P&#Xzd&l(t|d+HB)G5bRgJO=;$3zjo3?tBEBf1mSY|7zkFq`2UFJzi7%4c zd?Gn_<&6#$*NM(Ad<0ZN2b*TflA4SI?pHeQQZLOXE9xs%Dn2ZmVbG>FHc~yW?awc_ zvbd`oDm|*_RvY9OrE@ZUeKN*z244TdXyu+b>gFaGyL!NhFr~K_bf~7d07;+Fl4iHN zEOFF8kGMER)kS&vM24(d#E3ZIG!&_0F<0x`p3DynoF>gCz%nEUUG-T<^+jvH(?5af zzJk*}cYFhtQI;m^M6nN{L>O$j*bD@(MSd0i`PC8J)EK!noF$wPL8F9$WRCReTTABM zDdR0Tw0XYyrq%BUY+Uu1w7XFdsa<`*;eKTr^rGNvee@&1$Depmcok`GwN}X41fqC3 zP7VvG9x!cle*I4@%e7q1dh=}4*q6+ca?3+auzwu~+cEkYyU?)l&)kny`-0^)P~qhO zjEAg-FSD9?-3z<1jMlb^{$=TazYAIi*O+V_8f$znyiH+3W-k2n*=O!TAmsv@v&-lX zwBQM5fTWtaTg8XEnY{Ntj{sI+c`4}QzmI$8H>598bH*t1>wmtSX}1d;{tf_$Qni{BEtk@3`p=6y60GQmQGf!tUG`V#qbv;BL=LkPL0o1P~mZ=*^%eSbJis38bHo!w5Qo2Kch zk(N)Abrw{@_<86VO0E*lZ?kW(*&fn`Up_d)HIsMcQnQxD-Lp;fzrf~%neeZm9*+R# zZRm`W4Fyb{n+f(+Nc?FG@sd0O#56gE&zVNXk24x4s$M4l$6G?iY1!}!VuC|*FaoNI=Y zb>qXN`VmIGmA~~Ko3E#a;GihOUik6RMYWW=5{oZ$=+=;s;`ujk;R~!{_}u&me@#j04kIe6>)~B=5vgM$S%MUfNVGDZt;=ko`<8tiFek zd?TmILITIPiFCUNxN7B9i566auh?4vX8`DhUF7~EJ8#+8cS5taG1h|o2yT!~`!12v z8RM*BUZXV()pTC6Dpv3>YMAjrmDa#VYdP&3FkXoe5};RbN?A&ole!O~+!P_{?*{fd z63XlKQ^9>PN-uNpXfoO^ z8*|%5I2i39Z%*sYxyR5^fW5_eqTy=SH- zGUvqB9!+1h(Bu^Q0Ln0TXEN9vNJ@xY?{9rTQ{`4Bopr1hNM^Y)p9hUi!WNqbGl=~6 zky^*ip~WL03`g#7a}~&&4b^j#0LzI3qT#{hzSdYGRgkf-caBQaD-NT^`_uIIdPctN2o-eoASl3ZJ*2ByGH4P#8; zg6jW&G*4B!CN4;6&EtR+PqU_NN$~5gxsH4|BvyA%@^HZ2h!`SbVDP_hix(LM4%hxc z*=4fr;L60UTLtkN!l{^jSZ2(|l*9n@BsRCA=K>T?g{+%y-4~?}Uk}BL0}fG*voF3b z`~9;K8#}oRa7+5}7p-VfGfHc|K$WH43ACO5(=i+~^uXt-^B~Gv{&oQRF^V~df4m4} z^u;aR*Ig2gp&h@|f>IXSPC0I{_2HmwSu89cv`+7Ji8!}vOgvbM%4t;%&* ztk$^44gRhmdd-5(Mepj5!ZxYkjTZJxsG>LS`k`oBc7N;KPzSqct`yq}HlZr!%Lk4VB=sBeNNi~v1($c>q!`JXC3n!Q57 zuRn?zhc*fHYV_U-H^r53>-6Ls?;F8W2`e!)MSG)vpjlP19&!=9i9c;#XPK>y`W`cJE%27QildGRjx8PnE4K1)YQCN0HH2xL_oC~bnGvy$5 zg$$wHX`cq~)TP1P&4oi*AtNi?6cTJV01pxUiErRzaCPNo=$dpuh)aiaD2J`e?ud;7 zFuSFWjf0@kyTTC$_t%1IBata52i*3=tuqp_A`GB!olIF~VGoK?kAQ#o4Ud3Hj{Kgw zKJaGXi%lQHjmR@9AFJRpdQ!~|P|s#+^{=Ruk(o;yIwyx}zT5_+`uY1!i3N$3-gQEU z*ciGW0zEI8J>SkOf>23fMs#n678uIR@LcW)C5whhEGF=1=L?$^~OSP!RYNW(O33 zhS-+Y9Imb!J5=XFZxV&MD-<+@kq##2!ICF_TSazK1Z8PQ!?@eMD)|#1!iTKlngcu* zC!cXzr0iNp;J~3EljFCFJfndC21nx&yf!K5iz}3qpUMiUE|<#X9s)F3#etYNPhUEo z)^4=j3GG+V!Ljs5$7N79%WDo$$N?RE_^#f(I%NI4ANkHA0xF)YY6|j;w&Rc(qN|gq zm!()VaY~tYKcEuR_y1&|8Hj6`W|iqo(r{nENe2oZpM+vd(CdH_Y?889Ejkioot%z75-J5`#FZSarF4)+KQj^#e ziq3!2HyP++)M>eWEp5W}-;nQfCPV~T4wg0bqjes`i)u??EDq$ba%)Sde)Sigic2|S zki&Hzl<&lTT|c}#$+6v@hVt;F0Ii1YpS1&rwu6ZDbk!5r|!-=&eK_;3=gWV!hv1 zw8Rq_T=x%|ja1>`+4}>XJN`vhxmr;BawIgG9_egNf}9T)vaiGyF>b8y?MPZ4AdhMn z3HVGZb+X*}!iOY2z*{uvT6JoD5{#hc|Gk~KvmMI`pCWfrPa7hoC(5(}T;$+C=hlCs zP3iCq#|0`uB}#FU(NZDl?g0q{Jz(zoC4-XG+_6))0jb^c zTe05d1oSq)Y-?7d{${O@Ec`ru(`8Iv5Y+Rw9r~T>^wNSK->YLh|jGff{TsS@*N0Rf6g}{O(f8pM7qM!Lj=|ZEl)GnIv+-Y&PEJ!Uyv6;EH z@Frx?X8%nqY%=I9?fCMw)^UHMb9Mx{3D77BRLCk3=rq?g)n<12fkj(KhGMNbd;ZAG zilDiRs?F-+xvc~F(JwZ|S3ppPv71@QPm>8dumjKN{MB-6k}R3~h}D52|5f0`m3s$C zm@~bS2~;Yv!XsD-B3ysTP=){){%CKSsZ#8#fScq{jH6+agyP5$E3jc9@=k5@;#Y5~ zUch~~VyqK%zs^y|qbIXSl?jJp{U^x9>T#d5{SLUWTXRMW*tB)MXh@s)(oen-cR2fyfO zOVw@-NPAr_p!YoNd07ru$rS+YuO6)0F{bPh;3&H+dxCy5&1n@3c)HYRpn5H=np3_i zKD)+S!*e^XX{ML2Y)y`xtQEW#iCrJ`}2WaDmkxSuz_o1?_R~+lUbBjDYOisA9>o^vQPgD>DNb(>sU(O&-lox6aN{}(Rfd5agLammZ8XJm&jZ~I)J z%<#;Y9^=0cFGp?&6xXrgEbm?XGxH$&Da4eEt5sU%c7xAXNkQC&08F~?WqUvX?sZqc zM+fq{TNSvZr64q3%lN?I39O5OWFO>jGZR3;&s^;{w;TKJH#H;GtxYHX9 zdJ#f|L?$F5KM@9vQ;Y=qYD^6vhMa5>t`*Mr7_l1uw_Z8;&D;tXPJ>myd2L9Pc{6QQ zG2Z7;P~R3ySVC|xBq_3CxpEXwkbwhRb+m$Vf9P4bYSwSDD_I>7iE zK|M;L{YPWu>50oKLxGZ3ZhV6To6N~>&95B7Z=#2~e`fZ76pqb&Z+MGDdv4rtloC_h z=(A2NDLJMEHhy520_Q1z^ z#>s`=@mvM*<(r6aL zqS1XA2N*BEC<4?VlZe?d=h%3v7oy%P!%gdCE1P+FkpRyBRtJ?NoXnqPK1L`=kQF^VyUZHe7q%|=XL=fC|X=)6HdkAWRtFl_ajT2CA%?bu^26f8b6KtNws7qCm>$FRW=dXH`{HWs_rWF8?;H`Zl|G<+pJ7AohU-2?(^PWQ=Z&zis zs`i=0_$su}JruClv^P62 z*R_0=si1fx+Zvezo8jpU`j7tiNuf&D6);{L^KkWmI#>?jKR6aR9*Z4EvE}o0SzNo#gSfjH}lgxFFccp6THh>zH1wB zIkJ+t>;rge_qjY!&D~{W81^o>t78&LeUqst!#LZMyh)9{siZqr>YhhAY=Fg_Je_=I z%nc`-DVS^Aqqoq)TyA^ACX6;6RqRqwo^V{VmsTu^Z!If|XGta}v3)%MX@r#qCO$*r zLAO=pG{eR z`?2XgE1D3JRd*Clj;Z>=%c@*scoj}8_^;U(4cItxw><_#M`0wU*3c4>k*gWk@Zo;? zuiNScTfg%;9>&t)L^qWDkATCg<)^y^uj7{Zq;q*s0$K78syMJXMU3)>BRQjiAeqv1 zajrw+8^ge9d@hd(9YI~?uNWVHj<^%_&9xmjFAu_2sggLYExzF#(25>MyGQos)idwc zcThDX7mH@KWdPm|LC;o%$}1ub_OxDkYx#1Vl@y*zjo5K9h_QLd5Wf)_V`1r)7Q1W1 zdX4|@YT(^oNe*GQ-f7amZ-^y~e%`9F6-y9GtHS-PMB;fEJ=(unv34Nx#~j~pUe6nr z+xIrcHdCZZeLa-Q%gOsl26wn$m475)VOF%{QvGRP(`u;!kue_dmf%<47Iz2Vj2r&( zl{_4?hE1|C!7R-zpm~v8>Q5%7Db=l`)$^YUt}ktLL2SuLvH@Kkz__HuAxN(y&o|GM za&VcqZ1`Dcc=r~q{jm<@6p7-)}n6-3n3WcU_&r9Y$T#hxiJJl3q56l}1g0~kR| zl;2JK*=;~Y>797rJ}wWbq{zT%`o&lq|0?6|5spe zEpE^7od>^PsF;B+UPJg!W>#}k&B>HQNo*2`%4#c^678uA+JQT0uKvvx9!#xZu8XszRwvy7=murnUW#Gu|XEWj8JZ4SaR( zlWq(*+o4X5(8YB|u7}#q<2APF-#ooOFN?|;j>7e!yUs*HIz-I17;qxMAK#qk*?+#6 z%FZQet)W^C+{aHxH&y07CGl;9m9RydZ_&s4Z+zQ$X_F}SMW;4Exgj9ITdfSNgjx@6 z`9b6i5sXFTTW$X0n04+uLg$uN;g??(Nfe1Nd>(EKgd3tIMBAN~i2Np5I)QU%=tlJO zN*VjA@Fp+*wlg2#9U79{3+c?kmo-oepy>V3UDqQ5Lj8gWhoaGk;;@yJQ3UAC zE`NYip6TG2e>0CD2Yyz7&7P?O69ZMtU{kIXi4cFNfo4tP>~EdvIlUscUM%zc=Y??` zA)TVda-R{#e%kCR=r!I#e*3i)-ie^Pke=M@73oaqo#+ zopH@y)GlTBa*`4$4_tSQF4^nrr;1nmSQL_brPP%;+{V5d2R5^ z%Pwk$TiqXjvux^;2{TBV;5aPlw(;?s3>iUYVJujI0ak_TWq*eQ-=dB}wkQ{DPXu|6 zIrSxObm^Zd!~*W^F@(0>`ig>hf|jhkLqE;9l zIF$$#>`{Lc*G6<(S`jnbUycQn!KrUm>8S8QOfCjRD_;G6yJZKov;IZp&=S){o;WYc zSuBJ5nGN|*dpy1}^q0HALNGLXPFT6W85C5V0|Ko!UJ4G!aI#n`RZ1Ho@Rb)Q( zBadYSEyQZpJD;{&ue#-SpOqLHR`oDzXT!5aAliVeQ)j)G@f2hVcukI7+MS zb5rEmrqC~vD;1?33;?4afG{~1+sSo9mileYI1*w)wY1BVYmm14)xG}WEaY$=`r}fa zNM+_iUVS965vAZk!)QTTAA-jx)0P7m!1mj5^OK<8Tjs0Ft{;PU91@kvjlwQpB>gna z5VUnE7R%Xwv&)cnxjY@rK5MR`2p^Hoa1~l&Xg$vs$-LX|ywP-NBNEMDZ}{%pp=KC$ zoVY2H#IN+ahxt|?2vg;o5K<0=Mw0jlO6z(vhGv6(JnUE!=Qj=MV+!*i1#$1=3ISe0 z1k)Dc|7=#SKCHe&6?kuoO6xO=)!I=@9?pb>yLL60(KR$rp14#I4+tXQCsZK%6vL$m z@6TLRTm~uFjYmWxqTH8$rmik;h7}S%SEjNR`R$RY1K;=^{JxP&VSVFMb9 z0MGP>@S=sUh=vu-bCF=Xv|e4ez?PH z%d+CtXDw`Fs)&ljL+y0vv5s_ruSE*yw4IF??C&*?P3^$z{1lq&kc+4M!jhus>`!n@ z{llb_{Tc^JO_aTK&9G39Ea9YPp~q0kPi0@1>9Y+N7EPa(=VfJdYQ6H;@p$y`c%XI5hmX+7{lB_dz4A04bOcq1&;{ zhlCCn1bc*q^mB1y&sG<}CD*QYioRM(;#YuPeUYTVza}$%KVzZ}oJOwsQP(k*il8yT z2)x{&Pg9hO;JqWM$tt2=Ouxgy*08m^XY?%!OIc2i;fG}BwrXy&qL-K%1)}5DbPjRZ z`|s1Mcjb!cX=;Oo4at0fWyB93#xMq7FJ#zOz?jDBZ}z6dVQtzz3(^suG6m`GRC;{; z5E$(5B=$>1Pb1eaynGfj56e*A)_+N36nTZvMlWjfmICPzKr!K34Xtm$>ItSl~yL|qRRwTe-sal(E zydlf{yBhUdOVwxjEZ>+(#^u+;j&(n&<|yY5k-ok5U`s*YRME5ej{j-uM++9yNSx7= zoKxvYywv5b)4yMpvsgT8-&)sL!XpTq+zz79hiyc?fKgkzLWA>=_1wH-PBbT8I2_+A zcMv~#biVcjNhyKrj{rAI#E}e}6W32gH)@Jo5c0dq^7q%pS-HyL!UH$54~{SOXKhP^^Ns!AI2{U7c z_E5{2)uV+ddiyISyMhbT9)?8DR`#h3c->pB-L^*M8wWn7mdYCXd+?Z%{BV-~C`-$o z;N^gSkXUyrZUUp$at{@&v&wza)i-`s-g~ImB4^B7XzD|E7ZJ1b52n2#(UBoI?wtcX z3Jene=AXfGuvo+#4zkaPrl5yI9T$0yqm{BB9u)rZ-}{L_B&mavv*f<)KDnVL*Ejrw zPaJD9I4_bD@KhMEcojxyxdW2du54))_>HVbO67;ti5^SH5JTs{yKyG+Ht1WE2D9vP z7AL={D-j{?gsegpi5!KO3Hc)sn7!-P3J)1Sl>CxV>O>j})pf9yagc4Hb?zbss0NSLiO#QK=ZB z6HrLu5)S#T&eipXLRz&`Vtql|y`sx6e+1tsWTuEpoJumoN&qW-s(i_~7T|t@uNP zlTcmZoy0%ZgHNur|NU_O^MI6f9szL#Ob@M31VMQOG?!lr9f*i~1eiSqWb$_^4oY3@ zG+i_97WFcm_K#UwA}P^aa?flA#|`{DHimii^9m+AiVvXIw4TD930$hrxFlC-cYAKKhY zkr`gDwhPaC6E&F8b}UwFyC#Apf4}dTui`&us~0q0URGvFQgkJjHwngL++P0=Y3y0$ z>j%?!M=S5+^OJOY1wWf`0^Foe_3ZyktAgQL62XWqah}Qt8ZyH3wNP(Kx5gPGBq5Wj zWa#d|Yt~hV2Wy9vgVU-s!5 z7TBW{V@92>zrXDKmkw}mZnWXDODd&iZt9|ko^sz1z58^1ovJ;+(6@39d_z)^NQrxa zT_|;}(Nyyiy2n9855Y21V!$YwsKVLISMwI?O-w)^3I!$+H(sujJ&klBkTqOC#eq?k zekW@&QM2?#QNt|1b8^c3*(P9shc!7>&V)AbD$T>9Oubko_k=a@vtr87)n!?cIR3Eq zk8EG7lY4t~?LhAu>Swc?q-uVaZ;(LqOwVn1eO?4##%(}`YWoaN-qh4)q=BtMeJGaj z3>!i#FPO*dqsajkf$Z#=I?Kt4F~+1F!T=WUPY0`p+CzH|P8zN4Wd@V?~C8>YSI5+jz zL*s{`vnXAo3!hn_D%c`|1|7^@8zrV!m$i;I@Mg?|B51&9wtlc6vj57S^fk?AaI7-T zl?2e*TLf)E?u)0Ni%rWM-)C;Wl9jhi$9Tjc6rHQ}rE5^gQol0B&q#eEtQgUT1Xqq_ z+G`yI{G%khHn}3B-Up7jhBSE$)z*nmleIVJ9U2) zdu*~RF#e6J%by`c$NWjc%GDsX8_tA84sQCU!yRCVr|OU}pY|>Fp1EKXvp@daNE`OM zuv?8G(%;Zyf173#Rq1!_CO?I+v|1qfdp8;y?!Wt~7raDgV&VMsMkHZW)Q7gn| zDzVxn(=`({+ZK$sOqgXCGy@hhlIX!w_N@%Xj{v7PKVqi`Q^#d&yjGtYc1JwbZQ}(pa#&hj! zR|aca4P4zZ#kr+(A}JH7#pdV}qDk&J;Jz73GxZA9_8;y;H;uusvE5yH4we~AXJB>s zIMDZ77?_uvP2Vn8HFmw=#z>*EW-P$Vp3v$^AIvbltyx#r0OiA7iOWRS5>L&#;&so+bPVrk)p4ol+ zWbs2)@@`@eR1dTGP6H!=xImwxRiEkL)bRfKvjeB)IV6FDY%>O(*cOjQ@LkRyJpB3g zkn&&u^iz3+R)t#%XCZ93UoB6QUq@2EAfj2py}Ha(c@4Q$_x%qIH zmHnvA;$Ez`0QHdcO`qbXspEoC0<+q(g%kVCI8bnfh85G({HW7=LrG%YfJG7D?cpS* z{dYubmRFR{!^w{h%ONjK376@G7WRjJ$g8Zu3ZIsG(+`FLyc#Dcl)bg#$V;C_%&?uN z!A@C-$E0m7%)*fIDLGF73pUh)&fEOA08~1PupBE16{hLJK}8vZ&W2xVIUM9n?0yFS zBFm+Bs<`j>=`SxIt9MKajpeYCm1$``x?uPg1JS2>c8c6*%d7gowZG{cD6oJEGn<%% zWj<4KoN8+X8i71ZJa5cH--fZ$fHeNjHf-jEMU%mEE=6BQ>H%ij=XcxdLnoic+Oh)M zyPED|m#a>WUEm`CXR8?Tp{-ebq0W@r;`4A{Ya<&@)KQt#^U(j&se^GPFo2V2ik$kq z_2`;KoPc;0Y>Y|(J4{f8?8!l}fmVPNokaUbT8bK?FmIx$zI*IPN5WpWQ2-A~HCcOJ zrZD$%CoebpZy`L}No(pmV(l4+UbLs^#;&P-FY=Wf*ZuyLt2cQ&R1ltJkCBqsQc3rA z+H#t=N|f$nz25?)%hM_rWW;Wo?`$g^ypr;)4lZpcnSV>CFc*F%daall{|??AmPzS9c}6(vr#K-&E z22;o2%fmnxPej8^&>a37sO~G~^bDn}{?U=cz7huq$h`V7Q8{ zqTu?U{@0MskimXPU*MI{WPOE@pOWiZ*fbxO4OiEAVw{|0j1GxcSt5m&u}cRu zl7E$Mj8XEM54=jLsEcCRIY|*DNqTjblht#wjWtfR14_4vf5l&ys!?lik)a_pL@u4C zoxXaTsL3%qiA|s=rLy*tR+1!Pb|X0g=hbG$|1gShVd^Si*ks@{=zlnCXw7h{rqtK8 z6%aCFPC8Fgu9#7Bi{WESTpGZGm;GNptAHzeFK)?qCaPfJ;0?iLkwYwnxZKh8ul1QbO8>n+R@-OnN_oI;;Am8kr()xm!qToBbs|i*z?5(?l!GVq_r=Le@SBwatrcaNP~)#Q zQTE{&O1vi8##G29|iq<0FB!IsCKg-rkx?a>Qi z?omuI{wGU-^GT)Wni(+X(cWrma_SE9O<#R$9`Nc+({+PFKN5iYla)mKnd! zOCpQ}=*lX_Z0#}oeC=VZ-sUM<>*$sIgV1wwtX?kDK-$L|nHq+aJ&)X~_|3<|r@x8P z+vKJ|`G@*5AX}DjOsCTyh zkyn%Dn(L+V!O{T1$*tp@V2vJUHRFP37gg^f0h2A?W|U?M#I)X4*(|#y+U)k=pO|E| z_!DAztYzd!<(G9`u{S$(0r8YyzNEfsNXVqOLuls(%f6yfn7^d)SySaUL{-G2G@ku3 z*Cpn&W>CRPmDpor31Bb0Q>|R{J8L#nC{q_*xf(5Z^`f&9Y~&pWFawOGzcN5R^}}+Z zR4{RI2`B-B+JlS;^xwJbJrl2;e(Y1in~_%T-VgZ@mr_?&*pwyP?t1*ma7d-<~g!>-yl8z z9WSds3Ew`$w&4_(o6x8{{q2lWmM55x?=vVA1yzhSz{k;dUiaFQ)_e!3ZoBK?_i!FR zZrXa)SW0`gvv~&Jw2cEe^QmkVQxF)#-p#TGgeUfI&@NG`hAAnhR7O)?V6!o4%M&9; zf1`Jv4^DA#(?IlsLQ|Z|qdvb)-vm*-I%r9x+J`3-kfV7|Xx)mQt*#g=ej1ig%j<(k zX^@2qM|;WyeBhXM+gN2hN`1K57{T#d;!<3iLQ>_4F$aki}ERIF+jYrhx4IThQ>NfB=$zZ`9T z8nz(%TKe#%jO=}uTU|xX1n`fHIdR{Vfs=J~U?)U)_Ees@J?cq)02A~qn(zoy7_Q{@ zP~LWAyPD0W8u1ldPx6k1_o_=ff0ePOa*<%Xi)Mc6+al3c=U@4eGA?YP?(?}YHy9;M{k;X0V$xS%q99d^D`nad z&nbhv>A7~nTGPgZPM3H*5%iORoT6&((&9kCwxcUUdnW2^0>^%hQ=sM;+(#UfHa^yi zAJ;p#Uv<%f_eJUxtud}>c+AM_#F9A6n-FnybjsCGX;0C;SuJcQg8T5;s7)v9nwn&t z6G7sHY@zD!e}8R3nenZtug7$25%BXasaWu_K%FvsZLbcQ38wkur&iGW*1LvGLlD z6Zy+dTgJa1-)(As^Lpd7?N<}Gg6Aq?+|Pd2aJ;k&UX5vmdhHLq8_FSi-#T-&iHtyb z*Ec2d>dZ^98}e?QTd{{F8{TjReQdis*Y&bdVGrl8ACs(Nn+G83J}c8CF4{o^&AeeX z=u0xlHn)cJAtw)tUfu@7OeuOhO!`RGqJVGP=^xU7mPhW_kr|b-YiyU8jH~=TF z71-dJA=5ce6O^+&MN03XxZ_C7!vvFAGDh{ehC6IoLM~ZS#8g9tBa4R*-;EMvJR-;P zv6X11qu3viuV|K`G<$rccr-7L>-f4RIX;{vLU(U+uTniQ|2v2l55sw?{cRAj6Q^WSMIE^XW9g@Uj(65#mKnU`;$w z(Ij3|;Y35~Ibb5MvM4o>J?tZIMbVrpmWhS$VVsF=e#-bRogrUg=v!pt>h|DBILx8P z{JKj7?HPq^R&8sO%G=4F7T}QZu^zxW5t_4o0Z6BX>CWs-dpWg9c`K*P+lDU**C$Iz zOt^6VFYCmACRoaiz!@J81W;vzYZlvY(VWo|{g~a*B!OtA6cgdjV0_qEiRzW&%>0Gl zYe~ahD2J`yFkC?rJMR6dJbf0${F4{*vbgWna*Wb85Gl}wo$7)|!sB=_isv5O!)ymn zo)~iiyAsSoCODQYGL=e7o(n}sNY`~i2dSxl%afNB>T_)bV}@mtB$#UC7IpTkj%1rrbs4V*u~5MbL()Ok>uu*(!NKxNSB2MwQgoG zg;mUGQBu)Hcl&vPJO}aJ&nQ$jbANx0l(1cB>jw_L>6pB%ZMjst+`6~I>8sqFm6y0v) z!-C+lYRTx#GGb(a_-j1**JPEz&UlZ005*d|vvOqRvFEYWlX60@0;W{C>D012_ZVn3 z{})Y|gtljF>~dV};-2ZAF5pH;NaTOAx4?@X!5T5H=KXm;Z_U_&FU@--F0Hk~BEx5# znn@$T0LtqjGPZGuW2_Tvr~`Tj3igrLSgGA&5???7Y)e);Ny*8g;h|Lr=_ctWHQW>U z`!cNd+n*cebyOahiS%U468Wz622C=pFDOtq&EN*aM(OS>&u+v#W~k-o#+V*Sd?iUO z&{Im3z5wObOY2p69)Eu$;+k|G!s=p#>-wL)ztb7w!P0k8F^ zO^4V=4T!!kCEz=#U4j2=4QzZ|;UKUYGR`MSMs0 z+k2-)zvg`ewC-muLtB<#A=d*ITJYdF7 zgUxV(k=vRSb)&s`&dep4=JfE;V99LW;fTd$%}?$MN*L@aj0FZ|2UJ2R1zu=nVZC3)Ke|Gnr{wcZq?!f0=#R2@#nv*FNpObtydSW;gj*S)DR zrh{ev;|=|X5|Xc!dzliTy{yvl!h50zA|j{4_I)u(Dgx`i4s>p1D- zaWNvdKPi`pjwckORu9xl9Z4wFMdGBI+!AWkYfsqVddnCgEr(BeahR-1;1f;7g66uG zd==q7mcjn%AtU619nB15e&CbiT0)*$(7tyc;VFj_Wh!;4|{eGf8} zwKZEMpl&^SRcYmz5SV|A*D=1U<&Y4F;q5gk-#uAk%OASIX zlsya@V;5#ZmYA$1OAN-+SVGJYs=3o(#u7628$$N63pd7Oi4obx&P`DWN%Wn2&%O8j z&hNkb`;29bdd!h;&LJPG%H89)j}#IFHlD$Ufc&H% zO9#}Mh3up?xe0Gk&w6-THk=!EoNZ69?+LxxA1l%O3!9Q(wFSztxt6Kne;%@HL8TU z17B@MaYYanRfWGE&qgTa^w*OhB!SaMBtp6UwsxZ~va8}7AlX+w^jMwNJVFb}p~JKm zUS4a7LU|0UgMz=dr*&iJ6eUFOc+-q1Pa(jo_)K3|);-ru-*9()h~n|4lVHGXs?J`q zH=sn4;;lU>cO$XSFtK*wE+u#0HrNViEcnmh+s!Uf%FTHoGbH-Nc+{!);a0 z&GLnd;HM-EH4+fi!wz1F8Lb%q<|rJT($vy!hVT*qr8!9Ix7{=WsU`HfngSMxt@5Y4 zY?~Rv6GKD7k6@YLyWGDUxCVx=s#qpEj!4y##@0mVl4^ufg=mVqj}(sDL}HWifVQ3a z-7ZHY&DAVJdAXinj#DA;{A2^MK`C6fE_$V7=S8uBS3qg^u;{}CS4T}xTbpkE;!i>G z0V%U9?Cl^M--x&-AJm%aK`OUgESN(aN)sNWLkBNEw|u!8cIMJFA~>3HeDATUWMNi& zi#@=8pXAMMYFzy`Ks|gu6x&7`_p6Y087fA9;7O#2*1t6^nce7D?J;KfyA$V~-ZZSO z`yciO)N|gMVj~S`2C}SfUfSQ0L8Eo-#XZp%j$%YoZxGe5@fv^t>`8EKOeTr%jR|`<> zW8E2wr|IK!naD=;;e9md*i$_v2Ia0A<%rIQ>S;@D6=QIGLEI^jUKg4Col(@*NEw(I zcE~7SqlRCMkXcCU8NmZyviM;MGR}{K{0faCy9r+SKM;=pdb#{iG<$yvtFq354VlvR}%wHPsA386`U&scFGk9()`bM%xM6LN` zX{jng2Ou;(?c=D^{fl}=B=^=SV~_YS0xMeKoEMC+GP7KwE_U65u?{I&TSpgCCat84 zZpj(C?ga)W7h46wZ(e1go;lUkFsTyc^;qsj5%MQS6nX8Y!=~n5_O&WRHqjRM{^NrgK?4q|<|(Jn_@&fN$;5fLK+a&TI4hTLJ{{mIT=j5#scmGM2S?;yE0d~bZWhVW^Pu)U@) z{FMa-i(>z0G|9Ej`JR2%Rr-$8qn7df)SDorWkWR^w?g}jM5?&S!=C^HF;*xDK!Al* zAU%b0WXgYicc4dWi&7YRzUYnpdTIpw1*rFJTik>^6OX9bPg4hy2h;4as>?4z)4#vo zUi5i$c9;KZUK6elKG?2)4KFvJVgpZGU+=_U{Po;lNXx&XHvYVP#zJ?ykZr?#3G}5o zRrlyA3^AwgEvME<{g<7hFgK++EMApRv5}W?8X=_CkT1}P>-ZfeVdN0<&gomN%wv?d z<0^B0fGbuLXJR)}b7^2M6?&JKPih#acB@OI6gA`T?RE;pNxP+^S!*hB*?j$+7ddg! z=V+~tA=8Pr6enBr_|DVM&K&4wIJ9G6yIX7dCAQO8{9wi_V2=~)b+G;o+x_`@-I+u1 zzE{Fp@Q}aFoT2pV?$6u3;-6)MCV@2F<{QJfOLh*^*1$XNI4&Ds#{gcY(@dAA_Nc5j zfo98my_E0JckfAa>Bi=UW5iB-K&jKDoGE0? z8a^t?A_%%JTkb(TQyF~m;sL++q-(e|*fZZP6I z(3iHdv7rfL4h%v;W?lmy>~XK#z;$*ZmN$Ii$jknhDE@mTb?uc?dK2JG)LcqITsW}9 zoFG>AI$`d;EwxQCc5Z%iZAD%@TPN*wX4*Ez5c$v&t0BNF;-i!={2HBUN}_wnGYA;e$@NWXoAn+qvC^?CnY2j4MdLu?!7+I2-J7%JfT{Bh1kQPG^LE5Jt zENe>r%H;@vx17h8y;0cMJK62purHtC?{3V$qwjzNuMn_C_SLV!0@|v12r0LUvP-r^ zZuN<&k4+W_PeuzO1;^9veGBUn>`pv+5NmlZlqS^wrr7b8Zh06MEj8oPyZmaSw@xxN zsy~@%!pjM86hD*QqItSfSpi2fy(L?bZ^Kqf4ebrcT3^6Qv5(lP<@!iYuIcLU>y5X) zTM7TA=FK#2?%8brP&NBW6qZQm%@UuGQTm zP^qdikumYs5x`-)Hak{+aMtx)2 zkdg?(U+B65ypzH*jvv8KJ?wOB8Q6G~hu~jY(?Dp+L*5YbW24<^-IvuL{$mPLcDYPG zdiDxA!CaAS=msKNS#tlEag@w^7yYM3|ECAlWmui>Q@PFYne%rxAMb${ilxr&NI|)( z0Po~3vR7h-CRVL)Vo^r0m|u$u;bRJ$=Ek&i#q(Ux1V-GKUiGjQh+nLY6bK6PCb<-S z!Wj5h(31;;;>^E<0c&|Y1c-ILEW(Sq2`#U=FEK#CN#~P5Pf^Mfh5nSPx{d%<#jGQ|Lv^?n?X8KTU%GY8_vb4w z$xZa2g{h6+i~0n3*Y?U~SCt%}rQdUTJAOF%4OJA5=4~6iu*3>Rz6VRkc_J2;MN>AC zcf&tAhl5FoUI@#1OBQsw{?{Iz)I?i&?0yeTduxH(e-Zj*)U2VvGeFCTpvFEF^TUU_ zBR%tDyYeTXBTnLni*r7c)-807Y*9Y5Otwmt;2d5`cWWgRp(L_m5{c{&t!7nkIFc~4 zsrddUU~H-9Fy@5B`*iHqXxC4`k(1bs5a}N>V^^x{N%kVvLE7=Rv!y#zAF*8}amiuj zP>}3i453Icd;35*m8DCGl7V;xR!jLrQCy~f^G-RmVhP{xVOZ@Nv(m{slQKI?iBg5V zYqsDs(Gt8tt!YsVS@{G_CP?e9&bgl_20cse5Yrk{4#4OXcKV_U6Rd|8+zO*53lptc z@z4U|<{bb1z0&GRey{y5?L!Fgeg9lG>*z5d&1a5fFo$Cs*~Sw^BM-2-#1=GHtM%yD zEEg4zhT;6yddiq}B)pI0kBW^As}OXJg?2}O`A$JAS6IJm+2iJdnLQKF#(qxy@vz9g zZM5!$k!_TTZ;5diOskqU)7*REI5`QL%bR|E82PzJgkkBg+Yj7wZm#votuEG+s}Z;7 z0nSY1D5Vym(DN`E2KG*iueE>)(|^qF&NZlctXgcK8iTD-?S+rbth1Qm$HC*3h!u^s zwv2(GHS5<=VJA8o@T>P$q>fxkN|0jcc(WH+@Ug-cl3b<-J_LoJAsfldViknds#z1; z#oS&6?r92O<;XHO!>lURZ{01NC+m6A;kw_cC(n4Z`7V$r^08+7wDLtNaXmQpdWNI} z_l@s_*%1rKOa3dvFjMhRSvSL#3N9Z2d?CCDo^KK^7F$}}>lOi!>qMmw`|!D@Vd~~j zBV*j9JDk%vLKe96u9lV2I#ThKP>!=FeT66AGRw*~LXqH4vI{#_r$Lf$Ts zlQ>V1-#+I07nOsRfucy>Oo6bT9hb={L0dA8&02<0*-&-Z*Hqn_Hm|JVU34Qsh`g?V zi#@Kq+q2}5VoTSicl}b+NPZhHepE=Cbm;XBo9s-ENUyIMOuPL@-=rY#?USxiBTdi< zQ0qbayD39%9~Y2n*YEEcB(}cL#mg0l+qrqHue0PftJwb@Y58}w<^Q9~!Or({{6DyJ BDXRbg diff --git a/docs/overlay.jpg b/docs/overlay.jpg index eca3125af80f5dd1e46d2507ae5cb32edf7b8e18..3cf0d27584511974164c700122c6f0f478789dbb 100644 GIT binary patch delta 25581 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 WGE-xGLHQp-;r}~$JSp+t+5ZKN>P}h! delta 25204 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

      G{ki*FF` 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

      58Xk_t^5&`k;P%A!;?19b)`?c4*bx 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 From e9507748d1ed841e344f55eb62f0fdb9f25b6cb5 Mon Sep 17 00:00:00 2001 From: AdamDang Date: Mon, 23 Apr 2018 22:38:31 +0800 Subject: [PATCH 13/43] Typo fix in glossary.md: cluser->cluster cluser->cluster refers to to->refers to --- docs/glossary.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index 1ab3fb8ba0..2218f987ac 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -186,7 +186,7 @@ An _overlay_ is a [target] that modifies (and thus depends on) another target. The [kustomization] in an overlay refers to (via file path, -URI or other method) to _some other kustomization_, known as +URI or other method) _some other kustomization_, known as its [base]. An overlay is unusable without its base. @@ -198,7 +198,7 @@ environment instances. The configuration of these environments is specified in individual overlays (one per environment) that all refer to a common base that holds common configuration. -One configures the cluser like this: +One configures the cluster like this: > ``` > kustomize build someapp/overlays/staging |\ From 060aa4996867de173298937f7bb02792048ea7a5 Mon Sep 17 00:00:00 2001 From: AdamDang Date: Mon, 23 Apr 2018 22:48:17 +0800 Subject: [PATCH 14/43] Update glossary.md --- docs/glossary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/glossary.md b/docs/glossary.md index 2218f987ac..51e7c96122 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -198,7 +198,7 @@ environment instances. The configuration of these environments is specified in individual overlays (one per environment) that all refer to a common base that holds common configuration. -One configures the cluster like this: +One configures the cluser like this: > ``` > kustomize build someapp/overlays/staging |\ From 7b0da672d5dda13b6bcdb8e6fae36971f6b036ba Mon Sep 17 00:00:00 2001 From: AdamDang Date: Mon, 23 Apr 2018 22:56:07 +0800 Subject: [PATCH 15/43] Update README.md --- demos/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/README.md b/demos/README.md index e3818f1b94..4d7afdca9c 100644 --- a/demos/README.md +++ b/demos/README.md @@ -6,7 +6,7 @@ These demos are covered by presubmit tests. (differently configured) instances of a simple Hello World server. - * [mysql](mySql.md) - Create a mySql production + * [mysql](mySql.md) - Create a Mysql production configuration from scratch. * [springboot](springboot.md) - Create a Spring Boot application production From e252614919dc67fc07521a4b680551a7f3e0e811 Mon Sep 17 00:00:00 2001 From: AdamDang Date: Mon, 23 Apr 2018 22:58:17 +0800 Subject: [PATCH 16/43] Update README.md --- demos/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/README.md b/demos/README.md index 4d7afdca9c..50dc231163 100644 --- a/demos/README.md +++ b/demos/README.md @@ -6,7 +6,7 @@ These demos are covered by presubmit tests. (differently configured) instances of a simple Hello World server. - * [mysql](mySql.md) - Create a Mysql production + * [mysql](mySql.md) - Create a MySQL production configuration from scratch. * [springboot](springboot.md) - Create a Spring Boot application production From fb308353d33e2a33a4a2c024f6c37ae815c674f4 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 24 Apr 2018 12:57:29 -0700 Subject: [PATCH 17/43] breakfast --- README.md | 17 ++++--- demos/README.md | 6 ++- demos/breakfast.md | 123 +++++++++++++++++++++++++++++++++++++++++++++ docs/glossary.md | 40 +++++++++++++-- 4 files changed, 175 insertions(+), 11 deletions(-) create mode 100644 demos/breakfast.md diff --git a/README.md b/README.md index a71a50593a..5f7382c84f 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,22 @@ [overlay]: docs/glossary.md#overlay [resources]: docs/glossary.md#resource [workflows]: docs/workflows.md +[kubernetes style]: docs/glossary.md#kubernetes-style-object `kustomize` is a command line tool supporting -template-free customization of declarative -configuration targetted to kubernetes. +template-free customization of YAML (or JSON) +objects that conform to the [kubernetes style]. + +If your objects have a `kind` and a `metadata` field, +kustomize can patch them to help you manage +configuration sharing and re-use. + +For more details, try a [demo]. ## Installation -Assumes [Go](https://golang.org/) is installed -and your `PATH` contains `$GOPATH/bin`: +This assumes [Go](https://golang.org/) (v1.10.1 or higher) +is installed and your `PATH` contains `$GOPATH/bin`: ``` @@ -48,5 +55,3 @@ _development, staging and production_. Run kustomize on your overlay. The result is printed to `stdout` as a set of complete resources, ready to be [applied] to a cluster. - -For more details, try a [demo]. diff --git a/demos/README.md b/demos/README.md index e3818f1b94..6d941f8519 100644 --- a/demos/README.md +++ b/demos/README.md @@ -7,7 +7,9 @@ These demos are covered by presubmit tests. World server. * [mysql](mySql.md) - Create a mySql production - configuration from scratch. - + configuration from scratch. + * [springboot](springboot.md) - Create a Spring Boot application production configuration from scratch. + + * [breakfast](breakfast.md) - Customize breakfast for Alice and Bob. diff --git a/demos/breakfast.md b/demos/breakfast.md new file mode 100644 index 0000000000..4f3dba0a91 --- /dev/null +++ b/demos/breakfast.md @@ -0,0 +1,123 @@ +[kubernetes API object style]: https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields + +# Demo: configure breakfast + + +Define a place to work: + + +``` +DEMO_HOME=$(mktemp -d) +``` + +Make a place to put the base breakfast configuration: + + +``` +mkdir -p $DEMO_HOME/breakfast/base +``` + +Make a `kustomization` to define what goes into +breakfast. This breakfast has coffee and pancakes: + + +``` +cat <$DEMO_HOME/breakfast/base/kustomization.yaml +resources: +- coffee.yaml +- pancakes.yaml +EOF +``` + +Here's a _coffee_ type. Give it a `kind` and `metdata/name` field +to conform to [kubernetes API object style]; no other +file or definition is needed: + + +``` +cat <$DEMO_HOME/breakfast/base/coffee.yaml +kind: Coffee +metadata: + name: morningCup +temperature: lukewarm +data: + greeting: "Good Morning!" +EOF +``` + +The `name` field merely distinguishes this instance of coffee from others (if +there were any). + +Likewise, define _pancakes_: + +``` +cat <$DEMO_HOME/breakfast/base/pancakes.yaml +kind: Pancakes +metadata: + name: comfort +stacksize: 3 +topping: none +EOF +``` + +Make a custom version of breakfast for Alice, who +likes her coffee hot: + + +``` +mkdir -p $DEMO_HOME/breakfast/overlays/alice + +cat <$DEMO_HOME/breakfast/overlays/alice/kustomization.yaml +commonLabels: + who: alice +bases: +- ../../base +patches: +- temperature.yaml +EOF + +cat <$DEMO_HOME/breakfast/overlays/alice/temperature.yaml +kind: Coffee +metadata: + name: morningCup +temperature: hot! +EOF +``` + +And likewise for Bob, who wants _five_ pancakes, with strawberries: + + +``` +mkdir -p $DEMO_HOME/breakfast/overlays/bob + +cat <$DEMO_HOME/breakfast/overlays/bob/kustomization.yaml +commonLabels: + who: bob +bases: +- ../../base +patches: +- topping.yaml +EOF + +cat <$DEMO_HOME/breakfast/overlays/bob/topping.yaml +kind: Pancakes +metadata: + name: comfort +stacksize: 5 +topping: strawberries +EOF +``` + +One can now generate the configs for Alice’s breakfast: + + +``` +kustomize build $DEMO_HOME/breakfast/overlays/alice +``` + +Likewise for Bob: + + +``` +kustomize build $DEMO_HOME/breakfast/overlays/bob +``` diff --git a/docs/glossary.md b/docs/glossary.md index 1ab3fb8ba0..439df94a87 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -10,6 +10,8 @@ [base]: #base [bases]: #base [bespoke]: #bespoke-configuration +[k8s]: #kubernetes +[kubernetes]: #kubernetes [kustomize]: #kustomize [kustomization]: #kustomization [off-the-shelf]: #off-the-shelf @@ -143,11 +145,30 @@ A kustomization contains fields falling into these categories: a [kustomization] (only meaningful in an [overlay]). * (_TBD_) Standard k8s API kind-version fields. +## kubernetes + +[Kubernetes](https://kubernetes.io) is an open-source +system for automating deployment, scaling, and +management of containerized applications. + +It's often abbreviated as _k8s_. + +## kubernetes-style object + +[fields required]: https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields + +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 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 customization of declarative configuration targetted to -k8s. +k8s-style objects. _Targetted to k8s means_ that kustomize may need some limited understanding of API resources, k8s concepts @@ -236,8 +257,21 @@ a patch just by looking at the file's [YAML]. ## resource -A _resource_ is a path to a [YAML] or [JSON] file that -completely defines a functional k8s API object. +A _resource_, in the context of kustomize, is a path to +a [YAML] or [JSON] file that completely defines a +functional k8s API object, like a deployment or a +configmap. + +More generally, a resource can be any correct YAML file +that [defines an object](https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields) +with a `kind` and a `metadata/name` field. + + +A _resource_ in the content of a REST-ful API is the +target of an HTTP operation like _GET_, _PUT_ or +_POST_. k8s offers a RESTful API surface to interact +with clients. + ## sub-target / sub-application / sub-package From 129458d30f2379664bded7f7cc2e9024e82f5d2d Mon Sep 17 00:00:00 2001 From: Richard Marshall Date: Thu, 26 Apr 2018 07:38:07 -0700 Subject: [PATCH 18/43] Add subcommand for adding patches to the kustomization file. --- demos/springboot.md | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/demos/springboot.md b/demos/springboot.md index a5ef306b6a..15bdc6cf9f 100644 --- a/demos/springboot.md +++ b/demos/springboot.md @@ -111,10 +111,7 @@ spec: value: prod EOF -cat <>$DEMO_HOME/kustomization.yaml -patches: -- patch.yaml -EOF +kustomize edit add patch patch.yaml cat <$DEMO_HOME/application-prod.properties spring.jpa.hibernate.ddl-auto=update @@ -304,16 +301,14 @@ include this patch. ``` -mv $DEMO_HOME/kustomization.yaml $DEMO_HOME/tmp.yaml - -sed '/patches:$/{N;s/- patch.yaml/- patch.yaml\n- memorylimit_patch.yaml\n- healthcheck_patch.yaml/}' \ - $DEMO_HOME/tmp.yaml >& $DEMO_HOME/kustomization.yaml +kustomize edit add patch memorylimit_patch.yaml +kustomize edit add patch healthcheck_patch.yaml ``` `kustomization.yaml` should have patches field: > ``` -> patches +> patches: > - patch.yaml > - memorylimit_patch.yaml > - healthcheck_patch.yaml From 07badb85108008d46240a0d55219764d417c430c Mon Sep 17 00:00:00 2001 From: AdamDang Date: Fri, 27 Apr 2018 23:28:43 +0800 Subject: [PATCH 19/43] Typo fix: resourse->resource --- docs/glossary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/glossary.md b/docs/glossary.md index 439df94a87..d046be4427 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -250,7 +250,7 @@ traversal rules built into [kustomize]. _Patch_ is a field in the kustomization, distinct from resources, because a patch file looks like a resource file, but has different semantics. A patch depends on -(modifies) a resource, whereas a resourse has no +(modifies) a resource, whereas a resource has no dependencies. Since any resource file can be used as a patch, one cannot reliably distinguish a resource from a patch just by looking at the file's [YAML]. From 48af80710d7198d21aeb2800d6c43be0d6ae6550 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Wed, 25 Apr 2018 17:38:53 -0700 Subject: [PATCH 20/43] configmapgen example --- demos/configmaps.md | 298 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 demos/configmaps.md diff --git a/demos/configmaps.md b/demos/configmaps.md new file mode 100644 index 0000000000..a9a40e066c --- /dev/null +++ b/demos/configmaps.md @@ -0,0 +1,298 @@ +[overlay]: ../docs/glossary.md#overlay +[target]: ../docs/glossary.md#target + +# Demo: combining config data from devops and developers + +Scenario: you have a Java-based server storefront in +production that various internal development teams +(signups, checkout, search, etc.) contribute to. + +The server runs in different environments: +_development_, _testing_, _staging_ and _production_, +accepting configuration parameters from java property +files. + +Using one big properties file for each environment is +difficult to manage. The files change frequently, and +have to be changed by devops exclusively because + + 1. the files must at least partially agree on certain + values that devops cares about and that developers + ignore and + 1. because the production + properties contain sensitive data like production + database credentials. + +## Property sharding + +With some study, we notice that the properties are +separable into categories. + +### Common properties + +E.g. internationalization data, static data like +physical constants, location of external services, etc. + +_Things that are the same regardless of environment._ + +Only one set of values is needed. + +Place them in a file called + + * `common.properties` + +(relative location defined below). + +### Plumbing properties + +E.g. serving location of static content (HTML, CSS, +javascript), location of product and customer database +tables, ports expected by load balancers, log sinks, +etc. + +_The different values for these properties are +precisely what sets the environments apart._ + +Devops or SRE will want full control over the values +used in production. Testing will have fixed +databases supporting testing. Developers will want +to do whatever they want to try scenarios under +development. + +Places these values in + + * `development/plumbing.properties` + * `staging/plumbing.properties` + * `production/plumbing.properties` + + +### Secret properties + +E.g. location of actual user tables, database +credentials, decryption keys, etc. + +_Things that are a subset of devops controls, that +nobody else has (or should want) access to._ + +Places these values in + + * `development/secret.properties` + * `staging/secret.properties` + * `production/secret.properties` + +[kubernetes secret]: https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/ + +and control access to them with (for example) unix file +owner and mode bits, or better yet, put them in +a server dedicated to storing password protected +secrets, and use a field called `secretGenerator` +in your _kustomization_ to create a kubernetes +secret holding them (not covering that here). + + + +## A mixin approach to management + +The way to create _n_ cluster environments that share +some common information is to create _n_ overlays of a +common base. + +For the rest of this example, we'll do _n==2_, just +_development_ and _production_, since adding more +environments follows the same pattern. + +A cluster environment is created by +running `kustomize build` on a [target] that happens to +be an [overlay]. + +[helloworld]: helloworld.md + +The following example will do that, but will focus on +configMap construction, and not worry about how to +connect the configMaps to deployments (that is covered +in the [helloworld] example). + + +All files - including the shared property files +discussed above - will be created in a directory tree +that is consistent with the base vs overlay file layout +defined in the [helloworld] demo. + +It will all live in this work directory: + + +``` +DEMO_HOME=$(mktemp -d) +``` + +### Create the base + + + +Make a place to put the base configuration: + + +``` +mkdir -p $DEMO_HOME/base +``` + +Make the data for the base. This direction by +defintion should hold resources common to all +environments. Here we're only defining a java +properties file, and a `kustomization` file that +references it. + + +``` +cat <$DEMO_HOME/base/common.properties +color=blue +height=10m +EOF + +cat <$DEMO_HOME/base/kustomization.yaml +configMapGenerator: +- name: my-configmap + files: + - common.properties +EOF +``` + + +### Create and use the overlay for _development_ + +Make an abbreviation for the parent of the overlay +directories: + + +``` +OVERLAYS=$DEMO_HOME/overlays +``` + +Create the files that define the _development_ overlay: + + +``` +mkdir -p $OVERLAYS/development + +cat <$OVERLAYS/development/plumbing.properties +port=30000 +EOF + +cat <$OVERLAYS/development/secret.properties +dbpassword=mothersMaidenName +EOF + +cat <$OVERLAYS/development/kustomization.yaml +bases: +- ../../base +namePrefix: dev- +configMapGenerator: +- name: my-configmap + behavior: merge + files: + - plumbing.properties + - secret.properties +EOF +``` + +One can now generate the configMaps for development: + + +``` +kustomize build $OVERLAYS/development +``` + +#### Check the ConfigMap name + +The name of the generated `ConfigMap` is visible in this +output. + +The name should be something like `dev-my-configmap-b5m75ck895`: + + * `"dev-"` comes from the `namePrefix` field, + * `"my-configmap"` comes from the `configMapGenerator/name` field, + * `"-b5m75ck895"` comes from a deterministic hash that `kustomize` + computes from the contents of the configMap. + +The hash suffix is critical. If the configMap content +changes, so does the configMap name, along with all +references to that name that appear in the YAML output +from `kustomize`. + +The name change means deployments will do a rolling +restart to get new data if this YAML is applied to the +cluster using a command like + +> ``` +> kustomize build $OVERLAYS/development | kubectl apply -f - +> ``` + +A deployment has no means to automatically know when or +if a configMap in use by the deployment changes. + +If one changes a configMap without changing its name +and all references to that name, one must imperatively +restart the cluster to pick up the change. + +The best practice is to treat configMaps as immutable. + +Instead of editing configMaps, modify your declarative +specification of the cluster's desired state to +point deployments to _new_ configMaps with _new_ names. +`kustomize` makes this easy with its +`configMapGenerator` directive and associated naming +controls. A GC process in the k8s master eventually +deletes unused configMaps. + + +### Create and use the overlay for _production_ + +Next, create the files for the _production_ overlay: + + + +``` +mkdir -p $OVERLAYS/production + +cat <$OVERLAYS/production/plumbing.properties +port=8080 +EOF + +cat <$OVERLAYS/production/secret.properties +dbpassword=thisShouldProbablyBeInASecretInstead +EOF + +cat <$OVERLAYS/production/kustomization.yaml +bases: +- ../../base +namePrefix: prod- +configMapGenerator: +- name: my-configmap + behavior: merge + files: + - plumbing.properties + - secret.properties +EOF +``` + +One can now generate the configMaps for production: + + +``` +kustomize build $OVERLAYS/production +``` + +A CICD process could apply this directly to +the cluser using: + +> ``` +> kustomize build $OVERLAYS/production | kubectl apply -f - +> ``` From d0a3f12d1468e89a39d6dfed27e6baf2cdf97fc1 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Mon, 30 Apr 2018 15:33:36 -0700 Subject: [PATCH 21/43] absorb hello world configs --- demos/data/helloWorld/configMap.yaml | 7 ++++++ demos/data/helloWorld/deployment.yaml | 30 ++++++++++++++++++++++++ demos/data/helloWorld/kustomization.yaml | 9 +++++++ demos/data/helloWorld/service.yaml | 12 ++++++++++ demos/helloWorld.md | 26 +++++++++++++------- docs/glossary.md | 18 ++++++++++++++ 6 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 demos/data/helloWorld/configMap.yaml create mode 100644 demos/data/helloWorld/deployment.yaml create mode 100644 demos/data/helloWorld/kustomization.yaml create mode 100644 demos/data/helloWorld/service.yaml diff --git a/demos/data/helloWorld/configMap.yaml b/demos/data/helloWorld/configMap.yaml new file mode 100644 index 0000000000..e335ab8cc8 --- /dev/null +++ b/demos/data/helloWorld/configMap.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: the-map +data: + altGreeting: "Good Morning!" + enableRisky: "false" diff --git a/demos/data/helloWorld/deployment.yaml b/demos/data/helloWorld/deployment.yaml new file mode 100644 index 0000000000..6e79409080 --- /dev/null +++ b/demos/data/helloWorld/deployment.yaml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: the-deployment +spec: + replicas: 3 + template: + metadata: + labels: + deployment: hello + spec: + containers: + - name: the-container + image: monopole/hello:1 + command: ["/hello", + "--port=8080", + "--enableRiskyFeature=$(ENABLE_RISKY)"] + ports: + - containerPort: 8080 + env: + - name: ALT_GREETING + valueFrom: + configMapKeyRef: + name: the-map + key: altGreeting + - name: ENABLE_RISKY + valueFrom: + configMapKeyRef: + name: the-map + key: enableRisky diff --git a/demos/data/helloWorld/kustomization.yaml b/demos/data/helloWorld/kustomization.yaml new file mode 100644 index 0000000000..6ad61c295d --- /dev/null +++ b/demos/data/helloWorld/kustomization.yaml @@ -0,0 +1,9 @@ +# Example configuration for the webserver +# at https://github.com/monopole/hello +commonLabels: + app: hello + +resources: +- deployment.yaml +- configMap.yaml +- service.yaml diff --git a/demos/data/helloWorld/service.yaml b/demos/data/helloWorld/service.yaml new file mode 100644 index 0000000000..e238f70021 --- /dev/null +++ b/demos/data/helloWorld/service.yaml @@ -0,0 +1,12 @@ +kind: Service +apiVersion: v1 +metadata: + name: the-service +spec: + selector: + deployment: hello + type: LoadBalancer + ports: + - protocol: TCP + port: 8666 + targetPort: 8080 diff --git a/demos/helloWorld.md b/demos/helloWorld.md index f0c4f09420..b97ce797b1 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -1,5 +1,6 @@ [base]: ../docs/glossary.md#base [config]: https://github.com/kinflate/example-hello +[gitops]: ../docs/glossary.md#gitops [hello]: https://github.com/monopole/hello [instance]: ../docs/glossary.md#instance [instances]: ../docs/glossary.md#instance @@ -34,23 +35,33 @@ Alternatively, use ## Clone an example Let's run the [hello] service. -Here's an existing [config] for it. -Clone this config to a directory called `base`: +We'll first need a [base] configuration for it - +the resource files we'll build on with overlays. - +To keep this document shorter, we'll copy them in +(rather than declare them as HERE documents): + + ``` -git clone \ - https://github.com/kinflate/example-hello \ - $DEMO_HOME/base +BASE=$DEMO_HOME/base +mkdir -p $BASE + +exRepo=https://raw.githubusercontent.com/kubernetes/kubectl +exDir=master/cmd/kustomize/demos/data/helloWorld + +curl -s "$exRepo/$exDir/{configMap,deployment,kustomization,service}.yaml" \ + -o "$BASE/#1.yaml" ``` +Look at the directory: + ``` tree $DEMO_HOME ``` -Expecting something like: +Expect something like: > ``` > /tmp/tmp.IyYQQlHaJP @@ -80,7 +91,6 @@ The `base` directory has a [kustomization] file: ``` -BASE=$DEMO_HOME/base more $BASE/kustomization.yaml ``` diff --git a/docs/glossary.md b/docs/glossary.md index 0165a54fcb..2e41e6f5fe 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -73,6 +73,18 @@ A base has no knowledge of the overlays that refer to it. A base is usable in isolation, i.e. one should be able to [apply] a base to a cluster directly. +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. + +Some of the demos for [kustomize] will break from this +idiom and store all demo config files in directories +_next_ to the `kustomize` code so that the code and +demos can be more easily maintained by the same group +of people. + ## bespoke configuration A _bespoke_ configuration is a [kustomization] and some @@ -104,6 +116,12 @@ of k8s clusters. specific languages, etc., frustrating the other goals. +## 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. + ## instance An _instance_ is the outcome, in a cluster, of applying From 82994a1ba5f9d32448bc8af54f9e4a65e4ebc4cf Mon Sep 17 00:00:00 2001 From: Jeff Regan Date: Mon, 30 Apr 2018 16:42:52 -0700 Subject: [PATCH 22/43] no longer a git clone, so no README in tree --- demos/helloWorld.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/demos/helloWorld.md b/demos/helloWorld.md index b97ce797b1..814eb4744e 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -69,8 +69,6 @@ Expect something like: > ├── configMap.yaml > ├── deployment.yaml > ├── kustomization.yaml -> ├── LICENSE -> ├── README.md > └── service.yaml > ``` @@ -242,8 +240,6 @@ Expecting something like: > │   ├── configMap.yaml > │   ├── deployment.yaml > │   ├── kustomization.yaml -> │   ├── LICENSE -> │   ├── README.md > │   └── service.yaml > └── overlays > ├── production From 422a5183aadc5a583ee038e636149bf4e42c24c8 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 1 May 2018 11:02:17 -0700 Subject: [PATCH 23/43] fix glitch in hello world --- demos/helloWorld.md | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/demos/helloWorld.md b/demos/helloWorld.md index b97ce797b1..2a7424e844 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -32,26 +32,27 @@ Alternatively, use > DEMO_HOME=~/hello > ``` -## Clone an example +## Establish the base Let's run the [hello] service. -We'll first need a [base] configuration for it - -the resource files we'll build on with overlays. +To use [overlays] to create [instances], we must +first establish a common [base]. -To keep this document shorter, we'll copy them in -(rather than declare them as HERE documents): +To keep this document shorter, the base resources are +off in a supplemental data directory rather than +declared here as HERE documents. Download them: ``` BASE=$DEMO_HOME/base mkdir -p $BASE -exRepo=https://raw.githubusercontent.com/kubernetes/kubectl -exDir=master/cmd/kustomize/demos/data/helloWorld +resources="https://raw.githubusercontent.com/kubernetes/kubectl\ +/master/cmd/kustomize/demos/data/helloWorld\ +/{configMap,deployment,kustomization,service}.yaml" -curl -s "$exRepo/$exDir/{configMap,deployment,kustomization,service}.yaml" \ - -o "$BASE/#1.yaml" +curl -s $resources -o "$BASE/#1.yaml" ``` Look at the directory: @@ -85,7 +86,7 @@ cluster: to instantiate the _hello_ service. `kubectl` would only recognize the resource files. -## The Base Kustomization +### The Base Kustomization The `base` directory has a [kustomization] file: @@ -94,15 +95,15 @@ The `base` directory has a [kustomization] file: more $BASE/kustomization.yaml ``` -Run `kustomize` on the base to emit customized resources -to `stdout`: +Optionally, run `kustomize` on the base to emit +customized resources to `stdout`: ``` kustomize build $BASE ``` -## Customize the base +### Customize the base A first customization step could be to change the _app label_ applied to all resources: @@ -417,7 +418,8 @@ uses the map: ``` -test 3 == $(kustomize build $OVERLAYS/staging | grep khk45ktkd9 | wc -l) +test 3 == \ + $(kustomize build $OVERLAYS/staging | grep khk45ktkd9 | wc -l) ``` Applying these resources to the cluster will result in From c4319339f2b85c2ffcc0ca3ff4566800e551ec47 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 1 May 2018 11:49:13 -0700 Subject: [PATCH 24/43] add configGeneration to README --- demos/README.md | 15 ++++++++++----- demos/{configmaps.md => configGeneration.md} | 0 2 files changed, 10 insertions(+), 5 deletions(-) rename demos/{configmaps.md => configGeneration.md} (100%) diff --git a/demos/README.md b/demos/README.md index 741d8e7c2a..802192a7e6 100644 --- a/demos/README.md +++ b/demos/README.md @@ -6,10 +6,15 @@ These demos are covered by presubmit tests. (differently configured) instances of a simple Hello World server. - * [mysql](mySql.md) - Create a MySQL production - configuration from scratch. - - * [springboot](springboot.md) - Create a Spring Boot application production + * [mySql](mySql.md) - Create a MySQL production configuration from scratch. - * [breakfast](breakfast.md) - Customize breakfast for Alice and Bob. + * [springboot](springboot.md) - Create a Spring Boot + application production configuration from scratch. + + * [configGeneration](configGeneration.md) - + Mixing configuration data from different owners + (e.g. devops/SRE and developers). + + * [breakfast](breakfast.md) - Customize breakfast for + Alice and Bob. diff --git a/demos/configmaps.md b/demos/configGeneration.md similarity index 100% rename from demos/configmaps.md rename to demos/configGeneration.md From 40640e25173ba14bfd1c25ae149008be1e3829ad Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 1 May 2018 13:56:28 -0700 Subject: [PATCH 25/43] capture springboot demo data --- demos/data/mySql/deployment.yaml | 35 +++++++++++++++++++ demos/data/mySql/secret.yaml | 9 +++++ demos/data/mySql/service.yaml | 11 ++++++ demos/data/springboot/base/deployment.yaml | 27 ++++++++++++++ demos/data/springboot/base/service.yaml | 12 +++++++ .../production/application.properties | 5 +++ .../production/healthcheck_patch.yaml | 22 ++++++++++++ .../overlays/production/kustomization.yaml | 7 ++++ .../production/memorylimit_patch.yaml | 20 +++++++++++ .../springboot/overlays/production/patch.yaml | 13 +++++++ .../overlays/staging/application.properties | 5 +++ .../overlays/staging/kustomization.yaml | 11 ++++++ .../springboot/overlays/staging/staging.env | 1 + 13 files changed, 178 insertions(+) create mode 100644 demos/data/mySql/deployment.yaml create mode 100644 demos/data/mySql/secret.yaml create mode 100644 demos/data/mySql/service.yaml create mode 100644 demos/data/springboot/base/deployment.yaml create mode 100644 demos/data/springboot/base/service.yaml create mode 100644 demos/data/springboot/overlays/production/application.properties create mode 100644 demos/data/springboot/overlays/production/healthcheck_patch.yaml create mode 100644 demos/data/springboot/overlays/production/kustomization.yaml create mode 100644 demos/data/springboot/overlays/production/memorylimit_patch.yaml create mode 100644 demos/data/springboot/overlays/production/patch.yaml create mode 100644 demos/data/springboot/overlays/staging/application.properties create mode 100644 demos/data/springboot/overlays/staging/kustomization.yaml create mode 100644 demos/data/springboot/overlays/staging/staging.env diff --git a/demos/data/mySql/deployment.yaml b/demos/data/mySql/deployment.yaml new file mode 100644 index 0000000000..6aa7bc72bf --- /dev/null +++ b/demos/data/mySql/deployment.yaml @@ -0,0 +1,35 @@ +apiVersion: apps/v1beta2 # for versions before 1.9.0 use apps/v1beta2 +kind: Deployment +metadata: + name: mysql + labels: + app: mysql +spec: + selector: + matchLabels: + app: mysql + strategy: + type: Recreate + template: + metadata: + labels: + app: mysql + spec: + containers: + - image: mysql:5.6 + name: mysql + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-pass + key: password + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - name: mysql-persistent-storage + mountPath: /var/lib/mysql + volumes: + - name: mysql-persistent-storage + emptyDir: {} diff --git a/demos/data/mySql/secret.yaml b/demos/data/mySql/secret.yaml new file mode 100644 index 0000000000..935f2305e6 --- /dev/null +++ b/demos/data/mySql/secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + creationTimestamp: null + name: mysql-pass-d2gtcm2t2k +type: Opaque +data: + # Default password is "admin". + password: YWRtaW4= diff --git a/demos/data/mySql/service.yaml b/demos/data/mySql/service.yaml new file mode 100644 index 0000000000..aa3f970b6a --- /dev/null +++ b/demos/data/mySql/service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + app: mysql +spec: + ports: + - port: 3306 + selector: + app: mysql diff --git a/demos/data/springboot/base/deployment.yaml b/demos/data/springboot/base/deployment.yaml new file mode 100644 index 0000000000..62fb2e343d --- /dev/null +++ b/demos/data/springboot/base/deployment.yaml @@ -0,0 +1,27 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: sbdemo + labels: + app: sbdemo +spec: + selector: + matchLabels: + app: sbdemo + template: + metadata: + labels: + app: sbdemo + spec: + containers: + - name: sbdemo + image: jingfang/sbdemo + ports: + - containerPort: 8080 + volumeMounts: + - name: demo-config + mountPath: /config + volumes: + - name: "demo-config" + configMap: + name: "demo-configmap" diff --git a/demos/data/springboot/base/service.yaml b/demos/data/springboot/base/service.yaml new file mode 100644 index 0000000000..88f3cdd489 --- /dev/null +++ b/demos/data/springboot/base/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: sbdemo + labels: + app: sbdemo +spec: + ports: + - port: 8080 + selector: + app: sbdemo + type: LoadBalancer diff --git a/demos/data/springboot/overlays/production/application.properties b/demos/data/springboot/overlays/production/application.properties new file mode 100644 index 0000000000..253ffd85ed --- /dev/null +++ b/demos/data/springboot/overlays/production/application.properties @@ -0,0 +1,5 @@ +app.name=Staging Kinflate Demo +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:mysql://:3306/db_example +spring.datasource.username=root +spring.datasource.password=admin diff --git a/demos/data/springboot/overlays/production/healthcheck_patch.yaml b/demos/data/springboot/overlays/production/healthcheck_patch.yaml new file mode 100644 index 0000000000..c8a0cfaec6 --- /dev/null +++ b/demos/data/springboot/overlays/production/healthcheck_patch.yaml @@ -0,0 +1,22 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: sbdemo +spec: + replicas: 2 + template: + spec: + containers: + - name: sbdemo + livenessProbe: + httpGet: + path: /actuator/health + port: 8080 + initialDelaySeconds: 10 + periodSeconds: 3 + readinessProbe: + initialDelaySeconds: 20 + periodSeconds: 10 + httpGet: + path: /actuator/info + port: 8080 diff --git a/demos/data/springboot/overlays/production/kustomization.yaml b/demos/data/springboot/overlays/production/kustomization.yaml new file mode 100644 index 0000000000..121f384b09 --- /dev/null +++ b/demos/data/springboot/overlays/production/kustomization.yaml @@ -0,0 +1,7 @@ +bases: +- ../../base +patches: +- patch.yaml +- healthcheck_patch.yaml +- memorylimit_patch.yaml +namePrefix: production- diff --git a/demos/data/springboot/overlays/production/memorylimit_patch.yaml b/demos/data/springboot/overlays/production/memorylimit_patch.yaml new file mode 100644 index 0000000000..a46d333114 --- /dev/null +++ b/demos/data/springboot/overlays/production/memorylimit_patch.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: sbdemo +spec: + replicas: 2 + template: + spec: + containers: + - name: sbdemo + resources: + limits: + memory: 1250Mi + requests: + memory: 1250Mi + env: + - name: MEM_TOTAL_MB + valueFrom: + resourceFieldRef: + resource: limits.memory diff --git a/demos/data/springboot/overlays/production/patch.yaml b/demos/data/springboot/overlays/production/patch.yaml new file mode 100644 index 0000000000..16dcd086a2 --- /dev/null +++ b/demos/data/springboot/overlays/production/patch.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: demo-configmap +data: + application.properties: | + app.name=Staging Kinflate Demo + spring.jpa.hibernate.ddl-auto=update + spring.datasource.url=jdbc:mysql://:3306/db_example + spring.datasource.username=root + spring.datasource.password=admin + server.tomcat.max-threads=20 + server.tomcat.min-spare-threads=3 diff --git a/demos/data/springboot/overlays/staging/application.properties b/demos/data/springboot/overlays/staging/application.properties new file mode 100644 index 0000000000..5ed56eb974 --- /dev/null +++ b/demos/data/springboot/overlays/staging/application.properties @@ -0,0 +1,5 @@ +app.name=Staging Kinflate Demo +spring.jpa.hibernate.ddl-auto=update +spring.datasource.url=jdbc:mysql://:3306/db_example +spring.datasource.username=root +spring.datasource.password=admin diff --git a/demos/data/springboot/overlays/staging/kustomization.yaml b/demos/data/springboot/overlays/staging/kustomization.yaml new file mode 100644 index 0000000000..f2f34a742b --- /dev/null +++ b/demos/data/springboot/overlays/staging/kustomization.yaml @@ -0,0 +1,11 @@ +bases: +- ../../base +namePrefix: staging- +configMapGenerator: +- name: demo-configmap + behavior: merge + files: + - application.properties + literals: + - foo=bar + env: staging.env diff --git a/demos/data/springboot/overlays/staging/staging.env b/demos/data/springboot/overlays/staging/staging.env new file mode 100644 index 0000000000..9f854e54d9 --- /dev/null +++ b/demos/data/springboot/overlays/staging/staging.env @@ -0,0 +1 @@ +staging \ No newline at end of file From 082448d4af5f7ec90a0c6d56b6b95493092c8819 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 1 May 2018 15:01:28 -0700 Subject: [PATCH 26/43] Modify mysql and springboot demo to download their data from the code repo, not the kinflate repo --- demos/mySql.md | 31 +++++----- demos/springboot.md | 126 +++++++++++++++++----------------------- docs/kustomization.yaml | 2 +- 3 files changed, 72 insertions(+), 87 deletions(-) diff --git a/demos/mySql.md b/demos/mySql.md index 62c3dfef16..e9504a054a 100644 --- a/demos/mySql.md +++ b/demos/mySql.md @@ -10,25 +10,28 @@ In the production environment we want: - MySQL resources to have 'env: prod' labels. - MySQL to use persistent disk for storing data. -### Download resources - -Download `deployment.yaml`, `service.yaml` and -`secret.yaml`. These are plain k8s resources files one -could add to a k8s cluster to run MySql. - - +First make a place to work: + ``` DEMO_HOME=$(mktemp -d) -cd $DEMO_HOME +``` -CONTENT=https://raw.githubusercontent.com/kinflate +### Download resources -# Get MySQL configs -for f in service secret deployment ; do \ - wget -q $CONTENT/mysql/master/emptyDir/$f.yaml ; \ -done -``` +To keep this document shorter, the base resources +needed to run MySql on a k8s cluster are off in a +supplemental data directory rather than declared here +as HERE documents. + +Download them: + +``` +curl -s -o "$DEMO_HOME/#1.yaml" \ + "https://raw.githubusercontent.com/kubernetes/kubectl\ +/master/cmd/kustomize/demos/data/mySql\ +/{deployment,secret,service}.yaml" +``` ### Initialize kustomization.yaml diff --git a/demos/springboot.md b/demos/springboot.md index 15bdc6cf9f..cac5fc2564 100644 --- a/demos/springboot.md +++ b/demos/springboot.md @@ -12,23 +12,28 @@ In the production environment we want to customize the following: - JVM memory to be properly set. - health check and readiness check. +First make a place to work: + +``` +DEMO_HOME=$(mktemp -d) +``` + ### Download resources -Download `deployment.yaml`, `service.yaml`. These are plain k8s resources files one -could add to a k8s cluster to run sbdemo. +To keep this document shorter, the base resources +needed to run springboot on a k8s cluster are off in a +supplemental data directory rather than declared here +as HERE documents. - -``` +Download them: -DEMO_HOME=$(mktemp -d) -cd $DEMO_HOME - -CONTENT=https://raw.githubusercontent.com/kinflate + +``` +CONTENT="https://raw.githubusercontent.com/kubernetes/kubectl\ +/master/cmd/kustomize/demos/data/springboot" -# Get SpringBoot configs -for f in service deployment; do \ - wget -q $CONTENT/example-springboot/master/$f.yaml ; \ -done +curl -s -o "$DEMO_HOME/#1.yaml" \ + "$CONTENT/base/{deployment,service}.yaml" ``` ### Initialize kustomization.yaml @@ -63,13 +68,14 @@ cat kustomization.yaml > - deployment.yaml > ``` -### Add configmap generator +### Add configMap generator ``` -cd $DEMO_HOME -wget -q $CONTENT/example-springboot/master/application.properties -kustomize edit add configmap demo-configmap --from-file application.properties +echo "app.name=Kustomize Demo" >$DEMO_HOME/application.properties + +kustomize edit add configmap demo-configmap \ + --from-file application.properties cat kustomization.yaml ``` @@ -83,7 +89,8 @@ cat kustomization.yaml > name: demo-configmap > ``` -### Customize configmap +### Customize configMap + We want to add database credentials for the prod environment. In general, these credentials can be put into the file `application.properties`. However, for some cases, we want to keep the credentials in a different file and keep application specific configs in `application.properties`. With this clear separation, the credentials and application specific things can be managed and maintained flexibly by different teams. @@ -91,8 +98,8 @@ For example, application developers only tune the application configs in `applic only care about the credentials. For Spring Boot application, we can set an active profile through the environment variable `spring.profiles.active`. Then -the application will pick up an extra `application-.properties` file. With this, we can customize the configmap in two -steps. Add an environment variable through the patch and add a file to the configmap. +the application will pick up an extra `application-.properties` file. With this, we can customize the configMap in two +steps. Add an environment variable through the patch and add a file to the configMap. ``` @@ -120,7 +127,8 @@ spring.datasource.username=root spring.datasource.password=admin EOF -kustomize edit add configmap demo-configmap --from-file application-prod.properties +kustomize edit add configmap \ + demo-configmap --from-file application-prod.properties cat kustomization.yaml ``` @@ -143,78 +151,52 @@ environment): ``` cd $DEMO_HOME - kustomize edit set nameprefix 'prod-' - -cat kustomization.yaml ``` `kustomization.yaml` should have updated value of namePrefix field: > ``` > namePrefix: prod- -> commonAnnotations: -> note: This is a example annotation > ``` This `namePrefix` directive adds _prod-_ to all -resource names. +resource names, as can be seen by building the +resources: - + ``` -kustomize build $DEMO_HOME +kustomize build $DEMO_HOME | grep prod- ``` -The output should contain: - -> ``` -> apiVersion: v1 -> data: -> .... -> kind: ConfigMap -> metadata: -> .... -> name: prod-demo-configmap-7746248cmc -> --- -> apiVersion: v1 -> kind: Service -> metadata: -> .... -> name: prod-sbdemo -> spec: -> .... -> --- -> apiVersion: apps/v1beta2 -> kind: Deployment -> metadata: -> .... -> name: prod-sbdemo -> spec: -> selector: -> .... -> ``` - ### Label Customization We want resources in production environment to have certain labels so that we can query them by label selector. -`kustomize` does not have `edit set label` command to add -a label, but one can always edit `kustomization.yaml` directly: +`kustomize` does not have `edit set label` command to +add a label, but one can always edit +`kustomization.yaml` directly: ``` -sed -i 's/app: helloworld/app: prod/' \ - $DEMO_HOME/kustomization.yaml +cat <>$DEMO_HOME/kustomization.yaml +commonLabels: + env: prod +EOF ``` -At this point, running `kustomize build` will -generate MySQL configs with name-prefix 'prod-' and -labels `env:prod`. +Confirm that the resources now all have names prefixed +by `prod-` and the label tuple `env:prod`: + +``` +kustomize build $DEMO_HOME | grep -C 3 env +``` ### Download Patch for JVM memory + When a Spring Boot application is deployed in a k8s cluster, the JVM is running inside a container. We want to set memory limit for the container and make sure the JVM is aware of that limit. In K8s deployment, we can set the resource limits for containers and inject these limits to some environment variables by downward API. When the container starts to run, it can pick up the environment variables and @@ -224,10 +206,10 @@ Download the patch `memorylimit_patch.yaml`. It contains the memory limits setup ``` -cd $DEMO_HOME -wget -q $CONTENT/example-springboot-instances/master/production/memorylimit_patch.yaml +curl -s -o "$DEMO_HOME/#1.yaml" \ + "$CONTENT/overlays/production/{memorylimit_patch}.yaml" -cat memorylimit_patch.yaml +cat $DEMO_HOME/memorylimit_patch.yaml ``` The output contains @@ -262,10 +244,10 @@ Download the patch `healthcheck_patch.yaml`. It contains the liveness probes and ``` -cd $DEMO_HOME -wget -q $CONTENT/example-springboot-instances/master/production/healthcheck_patch.yaml +curl -s -o "$DEMO_HOME/#1.yaml" \ + "$CONTENT/overlays/production/{healthcheck_patch}.yaml" -cat healthcheck_patch.yaml +cat $DEMO_HOME/healthcheck_patch.yaml ``` The output contains @@ -296,11 +278,11 @@ The output contains ### Add patches -Currently `kustomize` doesn't provide a command to add a file as a patch, but we can edit the file `kustomization.yaml` to -include this patch. +Add these patches to the kustomization: ``` +cd $DEMO_HOME kustomize edit add patch memorylimit_patch.yaml kustomize edit add patch healthcheck_patch.yaml ``` diff --git a/docs/kustomization.yaml b/docs/kustomization.yaml index 1caee88ba9..b0ad1c1b5c 100644 --- a/docs/kustomization.yaml +++ b/docs/kustomization.yaml @@ -1,5 +1,5 @@ # ---------------------------------------------------- -# Example kustomize.yaml content. +# Example kustomization.yaml content. # # This file declares the customization provided by # the kustomize program. From d053bf2f1274cb9ad9dad7f6fb75760cf3714bd5 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 1 May 2018 15:43:59 -0700 Subject: [PATCH 27/43] drop unused figs and fix some nits --- README.md | 15 ++++++++------- demos/README.md | 3 ++- demos/tree1.png | Bin 8738 -> 0 bytes demos/tree2.png | Bin 14442 -> 0 bytes docs/glossary.md | 1 + 5 files changed, 11 insertions(+), 8 deletions(-) delete mode 100644 demos/tree1.png delete mode 100644 demos/tree2.png diff --git a/README.md b/README.md index 5f7382c84f..89ea920374 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [base]: docs/glossary.md#base [declarative configuration]: docs/glossary.md#declarative-application-management [demo]: demos/README.md +[demos]: demos/README.md [imageBase]: docs/base.jpg [imageOverlay]: docs/overlay.jpg [kustomization]: docs/glossary.md#kustomization @@ -13,12 +14,11 @@ [kubernetes style]: docs/glossary.md#kubernetes-style-object `kustomize` is a command line tool supporting -template-free customization of YAML (or JSON) -objects that conform to the [kubernetes style]. - -If your objects have a `kind` and a `metadata` field, -kustomize can patch them to help you manage -configuration sharing and re-use. +template-free customization of YAML (or JSON) objects +that conform to the [kubernetes style]. If your +objects have a `kind` and a `metadata` field, +`kustomize` can patch them to support configuration +sharing and re-use. For more details, try a [demo]. @@ -52,6 +52,7 @@ _development, staging and production_. #### 3) Run kustomize -Run kustomize on your overlay. The result +Run `kustomize` on your overlay. The result is printed to `stdout` as a set of complete resources, ready to be [applied] to a cluster. +See the [demos]. diff --git a/demos/README.md b/demos/README.md index 802192a7e6..834abcc2f8 100644 --- a/demos/README.md +++ b/demos/README.md @@ -1,6 +1,7 @@ # Demos -These demos are covered by presubmit tests. +These demos assume that `kustomize` is on your `$PATH`. +They are covered by pre-submit tests. * [hello world](helloWorld.md) - Deploy multiple (differently configured) instances of a simple Hello diff --git a/demos/tree1.png b/demos/tree1.png deleted file mode 100644 index a92235187c79e6fa3bb74842d5e15483b29e9333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8738 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 diff --git a/docs/glossary.md b/docs/glossary.md index 2e41e6f5fe..1b25d14f71 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -10,6 +10,7 @@ [base]: #base [bases]: #base [bespoke]: #bespoke-configuration +[gitops]: #gitops [k8s]: #kubernetes [kubernetes]: #kubernetes [kustomize]: #kustomize From 1a9bbb455817e6c154a9a82087bd1fe8230d8cef Mon Sep 17 00:00:00 2001 From: AdamDang Date: Thu, 3 May 2018 22:38:03 +0800 Subject: [PATCH 28/43] Typo fix: defintion->definition defintion->definition --- demos/configGeneration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/configGeneration.md b/demos/configGeneration.md index a9a40e066c..67524feb5a 100644 --- a/demos/configGeneration.md +++ b/demos/configGeneration.md @@ -145,7 +145,7 @@ mkdir -p $DEMO_HOME/base ``` Make the data for the base. This direction by -defintion should hold resources common to all +definition should hold resources common to all environments. Here we're only defining a java properties file, and a `kustomization` file that references it. From 332624bce30981c21b2ed40a3e41bd03c5dc5e27 Mon Sep 17 00:00:00 2001 From: Jingfang Liu Date: Thu, 3 May 2018 13:21:39 -0700 Subject: [PATCH 29/43] Add ldap example to demo data --- demos/data/ldap/base/deployment.yaml | 46 +++++++++++ demos/data/ldap/base/env.startup.txt | 61 +++++++++++++++ demos/data/ldap/base/kustomization.yaml | 7 ++ demos/data/ldap/base/service.yaml | 11 +++ demos/data/ldap/base/tests/test.sh | 78 +++++++++++++++++++ .../ldap/overlays/production/deployment.yaml | 13 ++++ .../overlays/production/kustomization.yaml | 5 ++ demos/data/ldap/overlays/staging/config.env | 2 + .../ldap/overlays/staging/deployment.yaml | 7 ++ .../ldap/overlays/staging/kustomization.yaml | 9 +++ 10 files changed, 239 insertions(+) create mode 100644 demos/data/ldap/base/deployment.yaml create mode 100644 demos/data/ldap/base/env.startup.txt create mode 100644 demos/data/ldap/base/kustomization.yaml create mode 100644 demos/data/ldap/base/service.yaml create mode 100755 demos/data/ldap/base/tests/test.sh create mode 100644 demos/data/ldap/overlays/production/deployment.yaml create mode 100644 demos/data/ldap/overlays/production/kustomization.yaml create mode 100644 demos/data/ldap/overlays/staging/config.env create mode 100644 demos/data/ldap/overlays/staging/deployment.yaml create mode 100644 demos/data/ldap/overlays/staging/kustomization.yaml diff --git a/demos/data/ldap/base/deployment.yaml b/demos/data/ldap/base/deployment.yaml new file mode 100644 index 0000000000..9570f5a3d5 --- /dev/null +++ b/demos/data/ldap/base/deployment.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: ldap + labels: + app: ldap +spec: + replicas: 1 + selector: + matchLabels: + app: ldap + template: + metadata: + labels: + app: ldap + spec: + containers: + - name: ldap + image: osixia/openldap:1.1.11 + args: ["--copy-service"] + volumeMounts: + - name: ldap-data + mountPath: /var/lib/ldap + - name: ldap-config + mountPath: /etc/ldap/slapd.d + - name: ldap-certs + mountPath: /container/service/slapd/assets/certs + - name: configmap-volume + mountPath: /container/environment/01-custom + - name: container-run + mountPath: /container/run + ports: + - containerPort: 389 + name: openldap + volumes: + - name: ldap-data + emptyDir: {} + - name: ldap-config + emptyDir: {} + - name: ldap-certs + emptyDir: {} + - name: "configmap-volume" + configMap: + name: "ldap-configmap" + - name: container-run + emptyDir: {} diff --git a/demos/data/ldap/base/env.startup.txt b/demos/data/ldap/base/env.startup.txt new file mode 100644 index 0000000000..b29c230c8a --- /dev/null +++ b/demos/data/ldap/base/env.startup.txt @@ -0,0 +1,61 @@ +# This is the default image startup configuration file +# this file define environment variables used during the container **first start** in **startup files**. + +# This file is deleted right after startup files are processed for the first time, +# after that all these values will not be available in the container environment. +# This helps to keep your container configuration secret. +# more information : https://github.com/osixia/docker-light-baseimage + +# Required and used for new ldap server only +LDAP_ORGANISATION: Example Inc. +LDAP_DOMAIN: example.org +LDAP_BASE_DN: #if empty automatically set from LDAP_DOMAIN + +LDAP_ADMIN_PASSWORD: admin +LDAP_CONFIG_PASSWORD: config + +LDAP_READONLY_USER: false +LDAP_READONLY_USER_USERNAME: readonly +LDAP_READONLY_USER_PASSWORD: readonly + +LDAP_RFC2307BIS_SCHEMA: false + +# Backend +LDAP_BACKEND: hdb + +# Tls +LDAP_TLS: true +LDAP_TLS_CRT_FILENAME: ldap.crt +LDAP_TLS_KEY_FILENAME: ldap.key +LDAP_TLS_CA_CRT_FILENAME: ca.crt + +LDAP_TLS_ENFORCE: false +LDAP_TLS_CIPHER_SUITE: SECURE256:+SECURE128:-VERS-TLS-ALL:+VERS-TLS1.2:-RSA:-DHE-DSS:-CAMELLIA-128-CBC:-CAMELLIA-256-CBC +LDAP_TLS_VERIFY_CLIENT: demand + +# Replication +LDAP_REPLICATION: false +# variables $LDAP_BASE_DN, $LDAP_ADMIN_PASSWORD, $LDAP_CONFIG_PASSWORD +# are automaticaly replaced at run time + +# if you want to add replication to an existing ldap +# adapt LDAP_REPLICATION_CONFIG_SYNCPROV and LDAP_REPLICATION_DB_SYNCPROV to your configuration +# avoid using $LDAP_BASE_DN, $LDAP_ADMIN_PASSWORD and $LDAP_CONFIG_PASSWORD variables +LDAP_REPLICATION_CONFIG_SYNCPROV: binddn="cn=admin,cn=config" bindmethod=simple credentials=$LDAP_CONFIG_PASSWORD searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical +LDAP_REPLICATION_DB_SYNCPROV: binddn="cn=admin,$LDAP_BASE_DN" bindmethod=simple credentials=$LDAP_ADMIN_PASSWORD searchbase="$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical +LDAP_REPLICATION_HOSTS: + - ldap://ldap.example.org # The order must be the same on all ldap servers + - ldap://ldap2.example.org + + +# Do not change the ldap config +# - If set to true with an existing database, config will remain unchanged. Image tls and replication config will not be run. +# The container can be started with LDAP_ADMIN_PASSWORD and LDAP_CONFIG_PASSWORD empty or filled with fake data. +# - If set to true when bootstrapping a new database, bootstap ldif and schema will not be added and tls and replication config will not be run. +KEEP_EXISTING_CONFIG: false + +# Remove config after setup +LDAP_REMOVE_CONFIG_AFTER_SETUP: true + +# ssl-helper environment variables prefix +LDAP_SSL_HELPER_PREFIX: ldap # ssl-helper first search config from LDAP_SSL_HELPER_* variables, before SSL_HELPER_* variables. diff --git a/demos/data/ldap/base/kustomization.yaml b/demos/data/ldap/base/kustomization.yaml new file mode 100644 index 0000000000..6cd10dfadd --- /dev/null +++ b/demos/data/ldap/base/kustomization.yaml @@ -0,0 +1,7 @@ +resources: +- deployment.yaml +- service.yaml +configMapGenerator: +- name: ldap-configmap + files: + - env.startup.txt diff --git a/demos/data/ldap/base/service.yaml b/demos/data/ldap/base/service.yaml new file mode 100644 index 0000000000..5ea479b54e --- /dev/null +++ b/demos/data/ldap/base/service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: ldap + name: ldap-service +spec: + ports: + - port: 389 + selector: + app: ldap diff --git a/demos/data/ldap/base/tests/test.sh b/demos/data/ldap/base/tests/test.sh new file mode 100755 index 0000000000..de5ebd5cd2 --- /dev/null +++ b/demos/data/ldap/base/tests/test.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# This script validates that this package works as expected with kustomize. +# The validation makes sure following steps are correctly executed and the output is as expected +# - deploy a ldap server by the output of kustomize +# - add a user +# - query a user +# - delete a user +# +# This script should be called as +# test.sh +# +# Testing passes if exit code is 0 +# Tesging fails if exit code is 1 +set -x + +function exit_with { + local msg=$1 + echo >&2 ${msg} + exit 1 +} + +# make sure kustomize and kubectl are available +command -v kustomize >/dev/null 2>&1 || { exit_with "Require kustomize but it's not installed. Aborting."; } +command -v kubectl >/dev/null 2>&1 || { exit_with "Require kubectl but it's not installed. Aborting."; } + +# set namespace to default +kubectl config set-context $(kubectl config current-context) --namespace=default + +# run kustomize +# kustomize build $1 | kubectl apply -f - || { exit_with "Failed to run kubectl apply"; } +echo Kustomizing \"$1\" +ls $1 +kustomize build $1 > generatedResources.yaml +[[ $? -eq 0 ]] || { exit_with "Failed to kustomize build"; } +cat generatedResources.yaml +kubectl apply -f generatedResources.yaml +[[ $? -eq 0 ]] || { exit_with "Failed to run kubectl apply"; } +sleep 20 + +# get the pod and namespace +pod=$(kubectl get pods -l app=ldap -o jsonpath='{.items[0].metadata.name}') +namespace=$(kubectl get pods -l app=ldap -o jsonpath='{.items[0].metadata.namespace}') +container="ldap" +[[ -z ${pod} ]] && { exit_with "Pod is not started successfully"; } +[[ -z ${namespace} ]] && { exit_with "Couldn't get namespace for Pod ${pod}"; } + +# create a user ldif file locally +ldiffile="user.ldif" +cat <$ldiffile +dn: cn=The Postmaster,dc=example,dc=org +objectClass: organizationalRole +cn: The Postmaster +EOF +[[ -f ${ldiffile} ]] || { exit_with "Failed to create ldif file locally"; } + +# add a user +pod_ldiffile="/tmp/user.ldif" +kubectl cp $ldiffile ${namespace}/${pod}:${pod_ldiffile} || { exit_with "Failed to copy ldif file to Pod ${pod}"; } +kubectl exec ${pod} -c ${container} -- ldapadd -x -H ldap://localhost -D "cn=admin,dc=example,dc=org" -w admin \ +-f ${pod_ldiffile} || { exit_with "Failed to add a user"; } + +# query the added user +r=$(kubectl exec ${pod} -c ${container} -- ldapsearch -x -H ldap://localhost -b dc=example,dc=org \ +-D "cn=admin,dc=example,dc=org" -w admin) +user_count=$(echo ${r} | grep "cn: The Postmaster" | wc -l) +[[ ${user_count} -eq 0 ]] && { exit_with "Couldn't find the new added user"; } + +# delete the added user +kubectl exec ${pod} -c ${container} -- ldapdelete -v -x -H ldap://localhost "cn=The Postmaster,dc=example,dc=org" \ +-D "cn=admin,dc=example,dc=org" -w admin || { exit_with "Failed to delete the user"; } +r=$(kubectl exec ${pod} -c ${container} -- ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin) +user_count=$(echo ${r} | grep "cn: The Postmaster" | wc -l) +[[ ${user_count} -ne 0 ]] && { exit_with "The user hasn't been deleted."; } + +# kubectl delete +kubectl delete -f generatedResources.yaml +rm $ldiffile \ No newline at end of file diff --git a/demos/data/ldap/overlays/production/deployment.yaml b/demos/data/ldap/overlays/production/deployment.yaml new file mode 100644 index 0000000000..3e535c4921 --- /dev/null +++ b/demos/data/ldap/overlays/production/deployment.yaml @@ -0,0 +1,13 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: ldap +spec: + replicas: 6 + template: + spec: + volumes: + - name: ldap-data + emptyDir: null + gcePersistentDisk: + pdName: ldap-persistent-storage diff --git a/demos/data/ldap/overlays/production/kustomization.yaml b/demos/data/ldap/overlays/production/kustomization.yaml new file mode 100644 index 0000000000..a8dda51ca6 --- /dev/null +++ b/demos/data/ldap/overlays/production/kustomization.yaml @@ -0,0 +1,5 @@ +bases: + - ../../base +patches: + - deployment.yaml +namePrefix: production- diff --git a/demos/data/ldap/overlays/staging/config.env b/demos/data/ldap/overlays/staging/config.env new file mode 100644 index 0000000000..c4032090a0 --- /dev/null +++ b/demos/data/ldap/overlays/staging/config.env @@ -0,0 +1,2 @@ +DB_USERNAME=admin +DB_PASSWORD=somepw diff --git a/demos/data/ldap/overlays/staging/deployment.yaml b/demos/data/ldap/overlays/staging/deployment.yaml new file mode 100644 index 0000000000..792f4d0a29 --- /dev/null +++ b/demos/data/ldap/overlays/staging/deployment.yaml @@ -0,0 +1,7 @@ + +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: ldap +spec: + replicas: 2 diff --git a/demos/data/ldap/overlays/staging/kustomization.yaml b/demos/data/ldap/overlays/staging/kustomization.yaml new file mode 100644 index 0000000000..7688bea730 --- /dev/null +++ b/demos/data/ldap/overlays/staging/kustomization.yaml @@ -0,0 +1,9 @@ +bases: + - ../../base +patches: + - deployment.yaml +nameprefix: staging- +configMapGenerator: + - name: env-config + files: + - config.env From 9da7c617fc67c629290b27309a4398566b69302a Mon Sep 17 00:00:00 2001 From: Jingfang Liu Date: Fri, 4 May 2018 09:29:41 -0700 Subject: [PATCH 30/43] change test script to use ldap from the new location --- test/main.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/main.sh b/test/main.sh index 334ed80810..f93bef9781 100755 --- a/test/main.sh +++ b/test/main.sh @@ -31,10 +31,7 @@ go install ./cmd/kustomize || { exit_with "Failed to install kustomize"; } export PATH=$GOPATH/bin:$PATH home=`pwd` -example_dir="some/default/dir/for/examples" -if [ $# -eq 1 ]; then - example_dir=$1 -fi +example_dir="./cmd/kustomize/demos/data/ldap/base" if [ ! -d ${example_dir} ]; then exit_with "directory ${example_dir} doesn't exist" fi From 5ec94f4cb16967c7b4b8a46099a50caa70f54733 Mon Sep 17 00:00:00 2001 From: Jingfang Liu Date: Fri, 4 May 2018 10:56:50 -0700 Subject: [PATCH 31/43] Add ldap demo --- demos/README.md | 3 + demos/ldap.md | 285 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 288 insertions(+) create mode 100644 demos/ldap.md diff --git a/demos/README.md b/demos/README.md index 834abcc2f8..45d922c850 100644 --- a/demos/README.md +++ b/demos/README.md @@ -7,6 +7,9 @@ They are covered by pre-submit tests. (differently configured) instances of a simple Hello World server. + * [LDAP](ldap.md) - Deploy multiple + (differently configured) instances of a LDAP server. + * [mySql](mySql.md) - Create a MySQL production configuration from scratch. diff --git a/demos/ldap.md b/demos/ldap.md new file mode 100644 index 0000000000..3c7ad5c3c5 --- /dev/null +++ b/demos/ldap.md @@ -0,0 +1,285 @@ +[base]: ../docs/glossary.md#base +[gitops]: ../docs/glossary.md#gitops +[instance]: ../docs/glossary.md#instance +[instances]: ../docs/glossary.md#instance +[kustomization]: ../docs/glossary.md#kustomization +[overlay]: ../docs/glossary.md#overlay +[overlays]: ../docs/glossary.md#overlay + +# Demo: LDAP with instances + +Steps: + + 1. Clone an existing configuration as a [base]. + 1. Customize it. + 1. Create two different [overlays] (_staging_ and _production_) + from the customized base. + 1. Run kustomize and kubectl to deploy staging and production. + +First define a place to work: + + +``` +DEMO_HOME=$(mktemp -d) +``` + +Alternatively, use + +> ``` +> DEMO_HOME=~/ldap +> ``` + +## Establish the base + +To use [overlays] to create [instances], we must +first establish a common [base]. + +To keep this document shorter, the base resources are +off in a supplemental data directory rather than +declared here as HERE documents. Download them: + + +``` +BASE=$DEMO_HOME/base +mkdir -p $BASE + +resources="https://raw.githubusercontent.com/kubernetes/kubectl\ +/master/cmd/kustomize/demos/data/ldap/base\ +/{deployment.yaml,kustomization.yaml,service.yaml,env.startup.txt}" + +curl -s $resources -o "$BASE/#1" +``` + +Look at the directory: + + +``` +tree $DEMO_HOME +``` + +Expect something like: + +> ``` +> /tmp/tmp.IyYQQlHaJP +> └── base +> ├── deployment.yaml +> ├── env.startup.txt +> ├── kustomization.yaml +> └── service.yaml +> ``` + + +One could immediately apply these resources to a +cluster: + +> ``` +> kubectl apply -f $DEMO_HOME/base +> ``` + +to instantiate the _ldap_ service. `kubectl` +would only recognize the resource files. + +### The Base Kustomization + +The `base` directory has a [kustomization] file: + + +``` +more $BASE/kustomization.yaml +``` + +Optionally, run `kustomize` on the base to emit +customized resources to `stdout`: + + +``` +kustomize build $BASE +``` + +### Customize the base + +A first customization step could be to set the name prefix to all resources: + + +``` +cd $BASE +kustomize edit set nameprefix "my-" +``` + +See the effect: + +``` +kustomize build $BASE | grep -C 3 "my-" +``` + +## Create Overlays + +Create a _staging_ and _production_ [overlay]: + + * _Staging_ adds a configMap. + * _Production_ has a higher replica count and a persistent disk. + * [instances] will differ from each other. + + +``` +OVERLAYS=$DEMO_HOME/overlays +mkdir -p $OVERLAYS/staging +mkdir -p $OVERLAYS/production +``` + +#### Staging Kustomization + +Download the staging customization and patch. + +``` +resources="https://raw.githubusercontent.com/kubernetes/kubectl\ +/master/cmd/kustomize/demos/data/ldap/overlays/staging\ +/{config.env,deployment.yaml,kustomization.yaml}" + +curl -s $resources -o "$OVERLAYS/staging/#1" +``` +The staging customization adds a configMap. +> ```cat $OVERLAYS/staging/kustomization.yaml +> (...truncated) +> configMapGenerator: +> - name: env-config +> files: +> - config.env +> ``` +as well as 2 replica +> ```cat $OVERLAYS/staging/deployment.yaml +> apiVersion: apps/v1beta2 +> kind: Deployment +> metadata: +> name: ldap +> spec: +> replicas: 2 +> ``` + +#### Production Kustomization + +Download the production customization and patch. + +``` +resources="https://raw.githubusercontent.com/kubernetes/kubectl\ +/master/cmd/kustomize/demos/data/ldap/overlays/production\ +/{deployment.yaml,kustomization.yaml}" + +curl -s $resources -o "$OVERLAYS/production/#1" +``` + +The production customization adds 6 replica as well as a consistent disk. +> ```cat $OVERLAYS/production/deployment.yaml +> apiVersion: apps/v1beta2 +> kind: Deployment +> metadata: +> name: ldap +> spec: +> replicas: 6 +> template: +> spec: +> volumes: +> - name: ldap-data +> emptyDir: null +> gcePersistentDisk: +> pdName: ldap-persistent-storage +> ``` + +## Compare overlays + + +`DEMO_HOME` now contains: + + - a _base_ directory - a slightly customized clone + of the original configuration, and + + - an _overlays_ directory, containing the kustomizations + and patches required to create distinct _staging_ + and _production_ instances in a cluster. + +Review the directory structure and differences: + + +``` +tree $DEMO_HOME +``` + +Expecting something like: + +> ``` +> /tmp/tmp.IyYQQlHaJP1 +> ├── base +> │   ├── deployment.yaml +> │   ├── env.startup.txt +> │   ├── kustomization.yaml +> │   └── service.yaml +> └── overlays +> ├── production +> │   ├── deployment.yaml +> │   └── kustomization.yaml +> └── staging +> ├── config.env +> ├── deployment.yaml +> └── kustomization.yaml +> ``` + +Compare the output directly +to see how _staging_ and _production_ differ: + + +``` +diff \ + <(kustomize build $OVERLAYS/staging) \ + <(kustomize build $OVERLAYS/production) |\ + more +``` + +The difference output should look something like + +> ```diff +> (...truncated) +> < name: staging-my-ldap-configmap-kftftt474h +> --- +> > name: production-my-ldap-configmap-k27f7hkg4f +> 85c75 +> < name: staging-my-ldap-service +> --- +> > name: production-my-ldap-service +> 97c87 +> < name: staging-my-ldap +> --- +> > name: production-my-ldap +> 99c89 +> < replicas: 2 +> --- +> > replicas: 6 +> (...truncated) +> ``` + + +## Deploy + +The individual resource sets are: + + +``` +kustomize build $OVERLAYS/staging +``` + + +``` +kustomize build $OVERLAYS/production +``` + +To deploy, pipe the above commands to kubectl apply: + +> ``` +> kustomize build $OVERLAYS/staging |\ +> kubectl apply -f - +> ``` + +> ``` +> kustomize build $OVERLAYS/production |\ +> kubectl apply -f - +> ``` + From 55247c62ff669d15804a5f94c31501e3176c4a34 Mon Sep 17 00:00:00 2001 From: AdamDang Date: Wed, 9 May 2018 00:00:05 +0800 Subject: [PATCH 32/43] Typo fix: cluser->cluster cluser->cluster --- docs/glossary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/glossary.md b/docs/glossary.md index 1b25d14f71..9243a024fd 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -238,7 +238,7 @@ environment instances. The configuration of these environments is specified in individual overlays (one per environment) that all refer to a common base that holds common configuration. -One configures the cluser like this: +One configures the cluster like this: > ``` > kustomize build someapp/overlays/staging |\ From bfa105970ac9f93dde02daf9f73f159f0f9119bf Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 8 May 2018 10:16:03 -0700 Subject: [PATCH 33/43] add license --- CONTRIBUTING.md | 40 ++++++ LICENSE | 201 +++++++++++++++++++++++++++++ OWNERS | 8 ++ demos/data/ldap/base/tests/test.sh | 66 +++++++--- docs/kustomization.yaml | 14 ++ 5 files changed, 308 insertions(+), 21 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 OWNERS diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..bd34b6ff7c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,40 @@ +# Contributing guidelines + +[Contributor License Agreement]: https://git.k8s.io/community/CLA.md +[github workflow guide]: https://github.com/kubernetes/community/blob/master/contributors/guide/github-workflow.md +[CNCF code of conduct]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md + +## Contributing A Patch + +1. Kubernetes projects require contributors to sign the + [Contributor License Agreement] before pull requests + can be considered. +1. Submit an issue describing your proposed change to + the repo in question. +1. The [repo owners](OWNERS) will respond to your issue + promptly. +1. If your proposed change is accepted, and you haven't + already done so, sign a Contributor License + Agreement (see details above). +1. Fork the desired repo, develop and test your code. + See the [github workflow guide] for more information. +1. For new features, provide a markdown based demo following + the pattern established in the `demos` directory. + Run `bin/pre-commit.sh` to test your demo. +1. Submit a pull request. + + +## Community, discussion, contribution, and support + +Learn how to engage with the Kubernetes community on +the [community page](http://kubernetes.io/community/). + +You can reach the maintainers of this project at: + +- [Slack](http://slack.k8s.io/) +- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-kustomize) + +## Code of conduct + +Participation in the Kubernetes community is governed +by the [CNCF code of conduct]. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/OWNERS b/OWNERS new file mode 100644 index 0000000000..b19fc37e66 --- /dev/null +++ b/OWNERS @@ -0,0 +1,8 @@ +# See https://github.com/kubernetes/community/blob/master/community-membership.md + +approvers: + - droot + - liujingfang1 + - mengqiy + - monopole + - pwittrock diff --git a/demos/data/ldap/base/tests/test.sh b/demos/data/ldap/base/tests/test.sh index de5ebd5cd2..f7b0c42f4b 100755 --- a/demos/data/ldap/base/tests/test.sh +++ b/demos/data/ldap/base/tests/test.sh @@ -1,17 +1,31 @@ #!/bin/bash - -# This script validates that this package works as expected with kustomize. -# The validation makes sure following steps are correctly executed and the output is as expected +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ---------------------------------------------------- +# +# This script tests the ldap kustomization demo +# against a real cluster. +# # - deploy a ldap server by the output of kustomize # - add a user # - query a user # - delete a user # -# This script should be called as -# test.sh -# -# Testing passes if exit code is 0 -# Tesging fails if exit code is 1 +# This script is a test that (passes|fails) if exit +# code is (0|1). + set -x function exit_with { @@ -21,14 +35,14 @@ function exit_with { } # make sure kustomize and kubectl are available -command -v kustomize >/dev/null 2>&1 || { exit_with "Require kustomize but it's not installed. Aborting."; } -command -v kubectl >/dev/null 2>&1 || { exit_with "Require kubectl but it's not installed. Aborting."; } +command -v kustomize >/dev/null 2>&1 || \ + { exit_with "Require kustomize but it's not installed. Aborting."; } +command -v kubectl >/dev/null 2>&1 || \ + { exit_with "Require kubectl but it's not installed. Aborting."; } # set namespace to default kubectl config set-context $(kubectl config current-context) --namespace=default -# run kustomize -# kustomize build $1 | kubectl apply -f - || { exit_with "Failed to run kubectl apply"; } echo Kustomizing \"$1\" ls $1 kustomize build $1 > generatedResources.yaml @@ -56,23 +70,33 @@ EOF # add a user pod_ldiffile="/tmp/user.ldif" -kubectl cp $ldiffile ${namespace}/${pod}:${pod_ldiffile} || { exit_with "Failed to copy ldif file to Pod ${pod}"; } -kubectl exec ${pod} -c ${container} -- ldapadd -x -H ldap://localhost -D "cn=admin,dc=example,dc=org" -w admin \ --f ${pod_ldiffile} || { exit_with "Failed to add a user"; } +kubectl cp $ldiffile ${namespace}/${pod}:${pod_ldiffile} || \ + { exit_with "Failed to copy ldif file to Pod ${pod}"; } + +kubectl exec ${pod} -c ${container} -- \ + ldapadd -x -H ldap://localhost -D "cn=admin,dc=example,dc=org" -w admin \ + -f ${pod_ldiffile} || { exit_with "Failed to add a user"; } # query the added user -r=$(kubectl exec ${pod} -c ${container} -- ldapsearch -x -H ldap://localhost -b dc=example,dc=org \ --D "cn=admin,dc=example,dc=org" -w admin) +r=$(kubectl exec ${pod} -c ${container} -- \ + ldapsearch -x -H ldap://localhost -b dc=example,dc=org \ + -D "cn=admin,dc=example,dc=org" -w admin) + user_count=$(echo ${r} | grep "cn: The Postmaster" | wc -l) [[ ${user_count} -eq 0 ]] && { exit_with "Couldn't find the new added user"; } # delete the added user -kubectl exec ${pod} -c ${container} -- ldapdelete -v -x -H ldap://localhost "cn=The Postmaster,dc=example,dc=org" \ --D "cn=admin,dc=example,dc=org" -w admin || { exit_with "Failed to delete the user"; } -r=$(kubectl exec ${pod} -c ${container} -- ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin) +kubectl exec ${pod} -c ${container} -- \ + ldapdelete -v -x -H ldap://localhost "cn=The Postmaster,dc=example,dc=org" \ + -D "cn=admin,dc=example,dc=org" -w admin || \ + { exit_with "Failed to delete the user"; } + +r=$(kubectl exec ${pod} -c ${container} -- \ + ldapsearch -x -H ldap://localhost -b dc=example,dc=org \ + -D "cn=admin,dc=example,dc=org" -w admin) user_count=$(echo ${r} | grep "cn: The Postmaster" | wc -l) [[ ${user_count} -ne 0 ]] && { exit_with "The user hasn't been deleted."; } # kubectl delete kubectl delete -f generatedResources.yaml -rm $ldiffile \ No newline at end of file +rm $ldiffile diff --git a/docs/kustomization.yaml b/docs/kustomization.yaml index b0ad1c1b5c..19762dd787 100644 --- a/docs/kustomization.yaml +++ b/docs/kustomization.yaml @@ -1,3 +1,17 @@ +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# # ---------------------------------------------------- # Example kustomization.yaml content. # From 84c392b11b32bc71f2ac24564f5c9446ebf62891 Mon Sep 17 00:00:00 2001 From: Jeff Regan Date: Tue, 8 May 2018 10:44:05 -0700 Subject: [PATCH 34/43] tighten verbiage in contributing.md --- CONTRIBUTING.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bd34b6ff7c..753bdb0d08 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,17 +13,13 @@ the repo in question. 1. The [repo owners](OWNERS) will respond to your issue promptly. -1. If your proposed change is accepted, and you haven't - already done so, sign a Contributor License - Agreement (see details above). -1. Fork the desired repo, develop and test your code. - See the [github workflow guide] for more information. -1. For new features, provide a markdown based demo following - the pattern established in the `demos` directory. +1. Fork the repo, develop and test your code. + See the [github workflow guide]. +1. For _new features_, provide a markdown-based demo following + the pattern established in the [demos](demos) directory. Run `bin/pre-commit.sh` to test your demo. 1. Submit a pull request. - ## Community, discussion, contribution, and support Learn how to engage with the Kubernetes community on From 7a73b590162cb5f95ebcec759aa459010edd086a Mon Sep 17 00:00:00 2001 From: Jeff Regan Date: Tue, 8 May 2018 10:44:56 -0700 Subject: [PATCH 35/43] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 753bdb0d08..6ce71ef843 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ [github workflow guide]: https://github.com/kubernetes/community/blob/master/contributors/guide/github-workflow.md [CNCF code of conduct]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md -## Contributing A Patch +## Contributing a Patch 1. Kubernetes projects require contributors to sign the [Contributor License Agreement] before pull requests From 8739c60d9a6492f622cf376a71fc545fd029d41e Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 8 May 2018 11:40:33 -0700 Subject: [PATCH 36/43] Replace term 'instance' with 'variant'. --- demos/README.md | 4 ++-- demos/breakfast.md | 5 +++-- demos/helloWorld.md | 22 +++++++++++----------- demos/ldap.md | 13 ++++++------- docs/glossary.md | 24 +++++++++++++----------- docs/workflows.md | 6 +++--- 6 files changed, 38 insertions(+), 36 deletions(-) diff --git a/demos/README.md b/demos/README.md index 45d922c850..aef195f517 100644 --- a/demos/README.md +++ b/demos/README.md @@ -4,11 +4,11 @@ These demos assume that `kustomize` is on your `$PATH`. They are covered by pre-submit tests. * [hello world](helloWorld.md) - Deploy multiple - (differently configured) instances of a simple Hello + (differently configured) variants of a simple Hello World server. * [LDAP](ldap.md) - Deploy multiple - (differently configured) instances of a LDAP server. + (differently configured) variants of a LDAP server. * [mySql](mySql.md) - Create a MySQL production configuration from scratch. diff --git a/demos/breakfast.md b/demos/breakfast.md index 4f3dba0a91..f627fb4372 100644 --- a/demos/breakfast.md +++ b/demos/breakfast.md @@ -1,4 +1,5 @@ [kubernetes API object style]: https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/#required-fields +[variant]: ../docs/glossary.md#variant # Demo: configure breakfast @@ -45,8 +46,8 @@ data: EOF ``` -The `name` field merely distinguishes this instance of coffee from others (if -there were any). +The `name` field merely distinguishes this [variant] of +coffee from others (if there were any). Likewise, define _pancakes_: diff --git a/demos/helloWorld.md b/demos/helloWorld.md index 929d8b194a..731e7ce92a 100644 --- a/demos/helloWorld.md +++ b/demos/helloWorld.md @@ -2,14 +2,14 @@ [config]: https://github.com/kinflate/example-hello [gitops]: ../docs/glossary.md#gitops [hello]: https://github.com/monopole/hello -[instance]: ../docs/glossary.md#instance -[instances]: ../docs/glossary.md#instance [kustomization]: ../docs/glossary.md#kustomization [original]: https://github.com/kinflate/example-hello [overlay]: ../docs/glossary.md#overlay [overlays]: ../docs/glossary.md#overlay +[variant]: ../docs/glossary.md#variant +[variants]: ../docs/glossary.md#variant -# Demo: hello world with instances +# Demo: hello world with variants Steps: @@ -36,7 +36,7 @@ Alternatively, use Let's run the [hello] service. -To use [overlays] to create [instances], we must +To use [overlays] to create [variants], we must first establish a common [base]. To keep this document shorter, the base resources are @@ -125,7 +125,7 @@ Create a _staging_ and _production_ [overlay]: * _Staging_ enables a risky feature not enabled in production. * _Production_ has a higher replica count. * Web server greetings from these cluster - [instances] will differ from each other. + [variants] will differ from each other. ``` @@ -144,7 +144,7 @@ defining a new name prefix, and some different labels. cat <<'EOF' >$OVERLAYS/staging/kustomization.yaml namePrefix: staging- commonLabels: - instance: staging + variant: staging org: acmeCorporation commonAnnotations: note: Hello, I am staging! @@ -185,7 +185,7 @@ with a different name prefix and labels. cat <$OVERLAYS/production/kustomization.yaml namePrefix: production- commonLabels: - instance: production + variant: production org: acmeCorporation commonAnnotations: note: Hello, I am production! @@ -224,7 +224,7 @@ EOF - an _overlays_ directory, containing the kustomizations and patches required to create distinct _staging_ - and _production_ instances in a cluster. + and _production_ [variants] in a cluster. Review the directory structure and differences: @@ -276,9 +276,9 @@ something like > --- > > note: Hello, I am production! > 11c11 -> < instance: staging +> < variant: staging > --- -> > instance: production +> > variant: production > 13c13 > (...truncated) > ``` @@ -346,7 +346,7 @@ collected. [patch]: ../docs/glossary.md#patch -The _staging_ instance here has a configMap [patch]: +The _staging_ [variant] here has a configMap [patch]: ``` diff --git a/demos/ldap.md b/demos/ldap.md index 3c7ad5c3c5..ae286c3c72 100644 --- a/demos/ldap.md +++ b/demos/ldap.md @@ -1,12 +1,12 @@ [base]: ../docs/glossary.md#base [gitops]: ../docs/glossary.md#gitops -[instance]: ../docs/glossary.md#instance -[instances]: ../docs/glossary.md#instance [kustomization]: ../docs/glossary.md#kustomization [overlay]: ../docs/glossary.md#overlay [overlays]: ../docs/glossary.md#overlay +[variant]: ../docs/glossary.md#variant +[variants]: ../docs/glossary.md#variant -# Demo: LDAP with instances +# Demo: LDAP with variants Steps: @@ -31,7 +31,7 @@ Alternatively, use ## Establish the base -To use [overlays] to create [instances], we must +To use [overlays] to create [variants], we must first establish a common [base]. To keep this document shorter, the base resources are @@ -118,7 +118,7 @@ Create a _staging_ and _production_ [overlay]: * _Staging_ adds a configMap. * _Production_ has a higher replica count and a persistent disk. - * [instances] will differ from each other. + * [variants] will differ from each other. ``` @@ -195,7 +195,7 @@ The production customization adds 6 replica as well as a consistent disk. - an _overlays_ directory, containing the kustomizations and patches required to create distinct _staging_ - and _production_ instances in a cluster. + and _production_ [variants] in a cluster. Review the directory structure and differences: @@ -282,4 +282,3 @@ To deploy, pipe the above commands to kubectl apply: > kustomize build $OVERLAYS/production |\ > kubectl apply -f - > ``` - diff --git a/docs/glossary.md b/docs/glossary.md index 1b25d14f71..eb5f91d884 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -26,6 +26,8 @@ [resources]: #resource [rpm]: https://en.wikipedia.org/wiki/Rpm_(software) [target]: #target +[variant]: #variant +[variants]: #variant [workflow]: workflows.md ## application @@ -107,7 +109,7 @@ of k8s clusters. * Works with any configuration, be it bespoke, off-the-shelf, stateless, stateful, etc. * Supports common customizations, and creation of - instance variants (dev vs, staging vs. production). + [variants] (dev vs. staging vs. production). * Exposes and teaches native k8s APIs, rather than hiding them. * No friction integration with version control to @@ -123,20 +125,20 @@ 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. -## instance +## variant -An _instance_ is the outcome, in a cluster, of applying +An _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 instances. +> common base to create distinct variants. > -> The _staging_ instance is the set of resources +> 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_ instance is the set of resources +> 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. @@ -179,7 +181,7 @@ It's often abbreviated as _k8s_. 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 instance, and an `apiVersion` +field to identify the variant, and an `apiVersion` field to identify the version (if there's more than one version). @@ -225,15 +227,15 @@ own [overlays] to do further customization. An _overlay_ is a [target] that modifies (and thus depends on) another target. -The [kustomization] in an overlay refers to (via file path, -URI or other method) _some other kustomization_, known as -its [base]. +The [kustomization] in an overlay refers to (via file +path, URI or other method) _some other kustomization_, +known as its [base]. An overlay is unusable without its base. An overlay supports the typical notion of a _development_, _QA_, _staging_ and _production_ -environment instances. +environment variants. The configuration of these environments is specified in individual overlays (one per environment) that all diff --git a/docs/workflows.md b/docs/workflows.md index b94aa45368..ef0f84e8cf 100644 --- a/docs/workflows.md +++ b/docs/workflows.md @@ -3,7 +3,7 @@ [applying]: glossary.md#apply [base]: glossary.md#base [fork]: https://guides.github.com/activities/forking/ -[instances]: glossary.md#instance +[variants]: glossary.md#variant [kustomization]: glossary.md#kustomization [off-the-shelf]: glossary.md#off-the-shelf [overlays]: glossary.md#overlay @@ -59,7 +59,7 @@ The _production_ directory might get a patch that increases the replica count in a deployment specified in the base. -#### 4) bring up [instances] +#### 4) bring up [variants] Run kustomize, and pipe the output to [apply]. @@ -108,7 +108,7 @@ The [overlays] are siblings to each other and to the > ``` -#### 4) bring up instances +#### 4) bring up [variants] > ``` > kustomize ~/ldap/overlays/staging | kubectl apply -f - From 63e811dab18b3deced89aad09c88276beb78894e Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 8 May 2018 12:10:03 -0700 Subject: [PATCH 37/43] reorderGloss --- docs/glossary.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index eb5f91d884..f214f19140 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -125,24 +125,6 @@ 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. -## variant - -An _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. - ## kustomization A _kustomization_ is a file called `kustomization.yaml` that @@ -296,11 +278,12 @@ with clients. ## sub-target / sub-application / sub-package -A _sub-whatever_ is not a thing. There are only [bases] and [overlays]. +A _sub-whatever_ is not a thing. There are only +[bases] and [overlays]. ## target -The _target_ is the argument to `build`, e.g.: +The _target_ is the argument to `kustomize build`, e.g.: > ``` > kustomize build $target @@ -315,3 +298,21 @@ needed to create customized resources to send to the [apply] operation. A target is a [base] or an [overlay]. + +## 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. From a4952390daa01e12a0deaa465d9bf3c882ca3b38 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Tue, 8 May 2018 12:20:26 -0700 Subject: [PATCH 38/43] updateFigs --- docs/base.jpg | Bin 39792 -> 40304 bytes docs/overlay.jpg | Bin 47379 -> 46814 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/base.jpg b/docs/base.jpg index a3e1e76017d47a17825d2f39c35549181c91692d..f3453628949d8777d7a7826dd6031e26516e0891 100644 GIT binary patch delta 14699 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 diff --git a/docs/overlay.jpg b/docs/overlay.jpg index 3cf0d27584511974164c700122c6f0f478789dbb..eea6b6f027a07d83aec9666c81474c0e20316165 100644 GIT binary patch delta 11396 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 z Date: Tue, 8 May 2018 12:25:43 -0700 Subject: [PATCH 39/43] updateFig2 --- docs/overlay.jpg | Bin 46814 -> 45587 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/overlay.jpg b/docs/overlay.jpg index eea6b6f027a07d83aec9666c81474c0e20316165..7298d637ad5142bfc4934df0e9f920b3b92dd1ff 100644 GIT binary patch delta 9548 zcmb7pRaDe*xb2^ik`n3e4(V=b>29REh7JcoPzM-d1QhA60SOsOLXhs%89D_VP#i$| za_&9%u5<3gUF$yVhu_Oy>-&D+`eN@@G&XD-`x8PNR-h#aBi6Ej3G2Y5>{V>_OMk4Y zyOGqT1xXluYR+=1eT2W~zPBftWdphch8v&X0gedeOI)fC8X~WE?|>)OJu5K1Fa>Z4 z1mK0Qk)n`xsx@y3qy=2W2b*l)J|=4Clv+1$TVFq|m6J~LJr%H*tekgC+A`^gwvCuw ziy-ZMVvQgsZezsu#Q9KyKzAup-qOdKyR{c+taS)jS*YTzCYiR0B^FE{jspHz%db*r&5pKK-eUIl){f=xYJL+eBQArELQ5t+8CZuHu# zc1kWvdk^Ep@FI^qao8aToWH-MB2e|hp|TdEtMXo@u88r>vY*zPE4_G(9z0Bu`|pQd zW2#_i8o7Z&m)w0g+&vx@DHU6+Cy(9l$*}YimUkJ9H8Eq~oxI_rM@Hdwb~*oT8)lUG zLul)jcG^z&ps*e>_76s!>B5Fbu)bn;*j2F@OdCoGGlCNT7m&iR>V&}9H93K`^La!V zy~2l9LyUx==YEvG52+W$ZgS9A_O>rhh1f3MAZ4G0o>T3azgV;U5`Ve4zn2N}W7mEw zn3%JDpHRa;MWhK9pPFAA>Q%K!wq`SFqrTyERicftV4XslssP2u7k7ZafaVS^3%P#Y z2&YuX=XX*KyPa*OLS5j9i#%9jdi8dm-?t!3oBW-fKV8|oE>fGLgKD~+GJ{u?hUgAB;fE?2=r*2q<;&S#8Wzbz4@)nqx!wy@ zVE&ryC$24p49%F!)M=3TSc~Wq8>Urw5vf+2UwUISsXDCKQJ^6rTne$u+;xLGp1xs> zy910@-}AhqVz*>4E4dy@lpSVXE*zhJu$X+yH}LUF2t4Tj1Kc7lwRoX*)Oa4ObQbm3 zjKfXGI3E{6OYth5HY#XB5&ipI>x^b8Ey9SAHus_)ebQ8CHi+>KS}!)$g23%#dN>OPFA3%%Wa*6 zIiP&oR$xjUUbW8Pl?bF<=&_NV&t>8`Vz#SD@pN?M*=U=Rb2e+5f!(4TC01k5rtSXm zMvoQx`4@YVsETeXnhh)VutsEWizF*kp}*$GJ(Mmc%n3zCTxPQW7V)wmMR^ zHWA7HH1iqigR=^R>=Pr=^i1gckXjNGKB3u2Vc(Ke4jt2AR~eUrSbXNwR1Ls$#V6-H zIih*EP8cc9N&qlhv0=ZQ1_FU!50nj-jxeZz=E3aQfu@T;b-(Kh?B3%9?-lnl58-e? z#!BL(eY@;yt=_LN({V%Hb7dMRL$&U|H5tp|qlO+&-eHfc28_Y?C{69eq^QjjGQ%Nq=ok<5Hmj_)6xOsm@RWsGl zA1ipb&aN&Smcm=E8c=Beg9hG@LErJfI~h!(eX=XaIGN5)hL4X4+7nB~pEhe1Zfeq5 zTzh{BpWXkdV7Y-xzGC2vw{o$4XH^R2hV3rXnF5S1pEaC(Pd!6AtKlto0D`hxd(*1) zEoTT=!&99XVEF(QKmUX^0R+Kprf{WB#^|h$$VVQtY#DviVS#+Q=BGzXR&>Uyf6eHM z3PJ1xmT`i500_iJaL}gO$MBlTzz5btD#=hR7^KDe;ha@-%k2AZO2`e=~iKNCX(GBrb7#4 zOoWu^^Pe3X_p~I*U!aWH*SWe(>6{4)pHPsSTVMCLNA3@A#wm2e?*MlPushf*QUw`6 z;7VFa42shX7H>Ias_mLZ!?UM!3KWIEg?tDQesFzmtT~yzF*Is-LSVPvAUj9`0$+yZ zgLvX4!=daZw#ktkW5i9Bd9+)KP0Dh>E^qybr%=wbcd@zsSC6lR92nviXQVU_C<gxHsZn&xQERJc5E<(O-Na_oG!L}ZwP5i65eLl5!!(8BtO4U4h!6p zVM|juEh3YH@bP?LOOnpCrsZen6C95Ku;%9oSl3e?*)L|*_EVQ{=$mL`escLNLU*zk zxy;|Xro?M5^8u|aNn3DG0lU3wsGzsS*>63>4!J6&?ig&617N;BEh5H(z=E(D{|*+P^9p|A)&^*MCCYrD_I2l@?gDIt612)){d?T)hO-!K>ock8nitS|RLIcBk$ zNzDT4L8oJ^Y8-wR$`bN73AgYp_TR=w%XwEVt*#IKAL!0yqVEoq-3wGoB>az^tCbNm<2KN0G82CLHTDFp3L()(Ptgavpa{=Q)eGYxmY>SZos zUJtFpE01DO_JS!H{ebH+6Jz$e9v#HZ z?f$ML=PyquWDbxC`VxajrksC;2H>4J89HofZGvDqV1KD!PUB`E=m*1h6Gb&Wos|0e zS^nbKQS8*ZuunsZT1s`Zza(V+F^U?3{;8h_i_f$^=Wf^v61z&F3&l3Tzb#qPB*!bN z!H@BvN3PG6kvIb6PkYv;8ou2B`g|y1N$$asH8Zn|>|lT1HrDiB-ZWm%_c}=y3Og;Y ziplKOO|5+93vyoERMfZ=|Mtt2$KRQKoaeM>B#z0aaI=F~`lT|2mi5lEp0ivkr1Xc4 ziwdDCgTbitDv1gCXZq~O`+1&p zw1o~&^?vKeYbeNHEEo*WjOlwhq;6LHhqN{zQgT_kf$=ZEG!1Bjac~fol-aAS3w5jR zh@M;y@r$&UEs>jzpRq#{Sabaw`pgW6`cmkl-S&=oVP6YRSM#SQ-+5!GxY`xPWR9(+ zrLMvUXnC3+fY94ZErJbkXAGG5(IAop2edUQ=5{GtJj5PP)EI+M!*~ zRGfUEL;bm0)ydacy)yzm+C*iC^SLACv~Og10(b&1Jd+9F-$VC!vW{eIUqnZ_(5)1{ z$TFyl?Kr%W@w$z^NzvQ8kiCc*_ghJ`3o`!+6BS{CnMa7hM%-y(>83)k5mP}hZ%Gb5 zU0)GyNnX|D0i+T{4xCOX9Uy%KM&QDaU4LuO47cO^@b%F#hEiftQI?ShYLb=PbkF%q zoFjDNj|y<}vGcC$#FXiQY7N5x4@IP%!lPr`h^~DD737D91yLuxL5D_h27!e4SyDhW zPkH!xao~`&gJ^rVf^h$?m2+C&uO(Q06ZZ3=dTV+{tH$ADrzD{2Lle z=tZFqEfnteTaMO*JK#A3_=dIxD>Wfy3lc;9*WTb0s-JVVhbW`kU0Fq-XRZz`;b*e+ z%lI?0PpX}0YLDtcT8_8{fej)a{uEgUh-dfnCrD6TkILqNCs#aJQ!Bw6c-+ zZD)yRI`Uu!FIduN`*~H1)ps%4LodXX0n=C0Cba)NQ_>TtJd-RcYv? zSa}>rn)k1w841*co<1a&(u(8I%eCqWnEpur4j zoCqKpsKy1!(%71YcrI^)Th%En=@BiH|}EVgNPRG!P0TUaeJ1BWw(GD*e>-wyi@&;>TY-cRGb*fXs*!=S9h zDK*+E26%@45%oRlZFj(1o;O8~WXLfw3ID|%cR~D*sb%<+G=ERIi)P^NoxdC2K9U$B zZ5-U^bnxW7_!IxiAK8m-K)@L~MTs>sWB(;7+4Za=M5LV1&;J)!TcN4oMdIM?E2cQ% z1zd8SskVOZIZUaG4p)g+Mpg@fkjU-^VejO0+2cX^J;f(jLlRkbc#oJ*tbX7pyKuUdg4jKS*W}G}{O>jF168P@=uw-%6HQ?E~$@ zo>lwhJ9j2&%9w|`VDMllRrqAm-q&=kntU-5YwnKJyk&QaYGQ9fL0cY$uv3{DOF79> zujVzc+ywjbX5M_xgi$x*K-%D7@u8|=_(L!`%I4qdm5El)uN-~;$i@^o0gMw_P+z5Y z$K(z3=E}8Jcr|!T)aXsk2z`|-*Ey-70sfvHzxjMgVa_#kVa-Lpfkdufp^cnfB0 zjxd-MGV)SJ@rTj?0|lxCI&?%61%y+@O#HD*vzl{Vip0@u?S2MktACP^FAPe%75R@E zZ_=J`iPspuxbK zx2`s?#yyR4^lyD(>+2{aqXVazDxc9*q{j)6Dz09;$;E5)bUE2rJ$Z69AgltohF9DH z&emGtfjo0-MdK!9 z>|4}Hl7K13(9_@TZlJ*#f;4lzuFG0$GQhj#sK5xOT1&ZV#pC^o+x#!F#PeRQt%!ze zmJ`uaKW2f4dIBihW{_8SkBfwZEuRS%uInWfWGy)t0kcBPhr~+#2qkRr_bYohCRk+| zhHeumSaw;0W{odt;7dQ8iUljmhltgcR34#=!PAwmeK)TJX)ZgEtILB;obD7Ow9m6v zFBm{WF3?j-8>%{LQTv13oF5k9ZZDrFPYP46BXEKC^WFMo!{S34i;k?*tKJbxFOWBz z^DHG0lOodxgmO?(=ExZ|S6KH+?w$Fzy3ME$&I$~UTRAnz(s2}Yf1a$g)I;o5pwJcI zp0~9rlApUiulb$c0qhUch{t?Gna+7fy!>-SJA^Gqz zBzBifXvB4P#Ht;0vheeQ(j4TBYAim3bHg$F0e=}11y=kH_ii=3VkA9jjFM0m*2i^^ zwzEZ8Yp6_<)ODO?PMD(bMp- zbJ4G11$u=!`#O<9m5x7=f__oXx!-Ad(ndIIayZ)*NwM}9bI)pwcl}oj44aO?JR_sO zaxkNhypm#xwoIVDpSwmg`w>UAI7ySSnxYniFDV1O5m6}?tA3Tpoz>E zJ;G$aQ(SQ%plZ_(RhXq?)TuK#h0S%X^7J32$FyJWDDv{_O=WBLPaDKX{OsXv*Pu*- z!RUp>->H?z<2skcE$J}TvUd{19FM9mpuY-KWCsav}Z6t_9D*cOTs;4s$g{7<3F_~f2uEqh_kx%fi23tc?9VX}WXE$=y znAfaq+X0gxS_1J)W&tvzEMZB3>QY%9?l4nmQKp8Ujv-Ph;LwyGs*s#>Io+T^X=xm1 ztU(F<7r>mF9>7wdPrwgtT;GzyJp@yzC_>y_zT?qJuB}8=eEnrxQ5=Dgg3OFa$V~on z7}g$Ykyl}Qw{H2-ScPe^XOpiudr>cX7`}9u?q9+ zJAjbRk;3PXSI41^YP5F+p~c2lYURMwMuq2ZEE(S57eviFQ1&DZ?i@9QUOecVSM6j8 zaMj_UlYR#P8|HQ}FQZW=c!g0kg&Mg{o80tt;7JaS=WtBd^gfKt2w?__Pu}@s;yU z^JuNeW$%BecaAm?2#_uCVV#sMSGzw&Mw25DBXg*Wuq58xt`hFRAWbTk0@XfRr!{gc6__}XGc^x+7n&V7zn@E+x= z>E4ieH)sF`0siCh>Y<|P#CU&6RWK9SCqE5%Xv7KQdST=8ahLOyMi0=+=IwLbxzWM# zn@?T;eh8Pt!xc4&q9CL@oG`v$h;!vT-y4-#QVhP%uh}L_g79LSh6X;jdUkT5m&g6L z1?alhO`t z50|?X|eZ-Hprqi=IrXuX8gLdnS(T$ZZ&Mihl!X=M#$uv<$`3; zF#I3P$cKfX`bzuaX6iZ-Hs<3Ci}WV>zq$CGHQlKGUy&K3Irh$#Pe`?P&P&B0b0-qY zmjnmO|A4~lsM>=tFPG@;Apt!)sI2i1DGDa4K}`cv1}1$;6Co7FInc|lT7%L&6PEEw z9E|n5Uua;A_>n?WqzbRA%4u?6Q>kApB-l-l!>vR4SEu3|* zNTEi8_4uHd(9^{T@IVJiMPa#mb?=Ejj$b5hq$s=Y9QWMqTq{`-^Qpty0DagYiGfdb z;zW5$>x3&ir|!gVFoO&c>f{G_uK_Pkwz%}bedJg(Km5$hXhJy?1t=2wx=?wGka~-h z*n7{S3`y$vQyIDhsr@D?ANaqn2NUI(F1cna$_gI2nI{-fXY#FsI-_3x1liIjHJ8~{ zz$Iu*zYLbOZpskLSgDCol0BEyfK0Fe4s2jD<@Mwlr%?k+WKry%38k z{CH0qincm);5$)px=b8s)^|Fe3LcI0O&?{!g{lM?&&G*z&z#Ep4AZ^~}59a+$A}p_W#S4eqxLZOe^=o%| ziRtVz`{D-ipXH`_+nBd@H+yBGkiBO~0`Rk=-@1G9@7TD$W+1v%@oDcv?5x%M$dJ?8 z8E?h&%pYpTKbDb^9{Wa;#Pcw%Vx(pm`OID3r1s=*>XjzCnD8xIxCb5QW^>iOctZRC zr9qIEeia+djykX@??MFIuqN?+ed5fm76|WS#g4|ntKjhMh0}+%)^$%CHN2bqh^Z&x zd}-%(6^0o`PvjwgvM~*cC2@+>i>p(&6hdK(qeudH!4>)15SZ~XCt>z_SzcsJLb}$< z@odTOYn#ySw1+}1HVN?M+L$-#jhUhd&+$SrK88f|t4c~O}52Z4KAX?8}UuV%GHP=u(?ZR&^6t8rPJbZZsHQ=W^(S9C3w z=AaD$Ke<>VZ@Iiib*IHGQRH!^su+#qyEY&WPgUk{3P-@F#MbJ79{p;rY)R@YvxN&C zURtET(YH#ZBnoAqlfW7^wztSBwmxX>;QCq(6%XR1hvD%MB}}ZLufSjW(~jsf$?#*l z`vPWmT4{pDg8XP-$7n;W9z;HLecbZ04_(lLH9TXF+ksaYP-#06R2LZ@E~RM8pf zWsiWA&q&g`etG{?m0g`)o%L=0{L3+_=ZLDG5k;hGFk>M`k(Sfr3j&Qhz`>&D(vZpB zqTtINz(&w>IJ$HP=xo)k{h=wndFY69>RA0jgVN#^Y}i!jUMBqPuOMG-GZhfPuOjS` z;cP{{E0tm0foJr?q32slcoA`pfb-VZ%Wo~|nrAP|3IfS;Mz*JML(In>$_Rg($-QK7 zMGFt>6D3U0j0rh+0G+x!!Z6;A#VDVd$aq93Y*r! zi*6FTCgrvgh|Vyt_06dGXT&Shw%`h0j(z&5Kp8Kc?%AFsB0PxtL%k=`N5(3ooqYMpcI3AN-3UytVVQHBEb60|kT7Swagr9;l{18s zk@1Dupr$5r)a>#R zxPP`U)<+RthQQNo@5nUQVADs9-FWNSye8Q>J!%kbpa&MN+#=Nhe}m8>zh~PDd~$ zxE=hx_xb_g3^Q)x1^;(@^#A3S{x5Zxw}?d1^j7s!0k(h7oP?@4!hIfR5rWHF*v`;V! z?@R|I%Fce}OZ|W+IE0$g^{Oa^(Qm8Lrrc*Uc`UkftX&8#TrVO`=vpAAL;Pg)i3$K+ zc&h<;+eE~l4UU;Kx1N+H7!BpV6h~BD#LBok78i$(^fWs+79eLg*fg~{a}~OD2Qsm6 zgEF-z19j>;c(EsTu9vF4oBh7Eu!9NCQeui=Q{7ezh$WueF_>Wza&eU}i#iMD`)wpz9nDH2NS=zdEjg{ w0%ATPoZOUU3TIr@pu`dyU-N9w4B(eR_Q^m$%s;Xe*>I}_#(J=Y{0l$!ke*gdg delta 10813 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 From 26960efd6b1d2e932555d532353ea4adfdfab8aa Mon Sep 17 00:00:00 2001 From: Jeff Regan Date: Tue, 8 May 2018 16:51:40 -0700 Subject: [PATCH 40/43] Update breakfast.md --- demos/breakfast.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/breakfast.md b/demos/breakfast.md index f627fb4372..d6115d95cd 100644 --- a/demos/breakfast.md +++ b/demos/breakfast.md @@ -46,7 +46,7 @@ data: EOF ``` -The `name` field merely distinguishes this [variant] of +The `name` field merely distinguishes this instance of coffee from others (if there were any). Likewise, define _pancakes_: @@ -61,7 +61,7 @@ topping: none EOF ``` -Make a custom version of breakfast for Alice, who +Make a custom [variant] of breakfast for Alice, who likes her coffee hot: From 78370e8a6afedcd6ac8d2989fb4fe01d3dd5ed85 Mon Sep 17 00:00:00 2001 From: Jeff Regan Date: Tue, 8 May 2018 16:52:11 -0700 Subject: [PATCH 41/43] Update breakfast.md --- demos/breakfast.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/breakfast.md b/demos/breakfast.md index d6115d95cd..de902c8855 100644 --- a/demos/breakfast.md +++ b/demos/breakfast.md @@ -85,7 +85,7 @@ temperature: hot! EOF ``` -And likewise for Bob, who wants _five_ pancakes, with strawberries: +And likewise a [variant] for Bob, who wants _five_ pancakes, with strawberries: ``` From b860318d29b1e14494b8b9d74d14a6c9c5a446a8 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Fri, 11 May 2018 11:10:14 -0700 Subject: [PATCH 42/43] add code of conduct --- README.md | 8 +++++++- code-of-conduct.md | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 code-of-conduct.md diff --git a/README.md b/README.md index 89ea920374..0221977ab8 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,12 @@ [demos]: demos/README.md [imageBase]: docs/base.jpg [imageOverlay]: docs/overlay.jpg +[kubernetes style]: docs/glossary.md#kubernetes-style-object [kustomization]: docs/glossary.md#kustomization [overlay]: docs/glossary.md#overlay [resources]: docs/glossary.md#resource +[sig-cli]: https://github.com/kubernetes/community/blob/master/sig-cli/README.md [workflows]: docs/workflows.md -[kubernetes style]: docs/glossary.md#kubernetes-style-object `kustomize` is a command line tool supporting template-free customization of YAML (or JSON) objects @@ -56,3 +57,8 @@ Run `kustomize` on your overlay. The result is printed to `stdout` as a set of complete resources, ready to be [applied] to a cluster. See the [demos]. + + +## About + +This project sponsored by [sig-cli]. diff --git a/code-of-conduct.md b/code-of-conduct.md new file mode 100644 index 0000000000..98e34bc24b --- /dev/null +++ b/code-of-conduct.md @@ -0,0 +1,6 @@ +[Kubernetes Community Code of Conduct]: https://git.k8s.io/community/code-of-conduct.md + +# Code of Conduct + +This project has adopted the +[Kubernetes Community Code of Conduct]. From 5b7eded0258874394971c1f9c17325c50e444270 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Fri, 11 May 2018 11:33:39 -0700 Subject: [PATCH 43/43] owner mods --- OWNERS | 8 ++------ OWNERS_ALIASES | 12 ++++++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 OWNERS_ALIASES diff --git a/OWNERS b/OWNERS index b19fc37e66..439aa2aa59 100644 --- a/OWNERS +++ b/OWNERS @@ -1,8 +1,4 @@ # See https://github.com/kubernetes/community/blob/master/community-membership.md - approvers: - - droot - - liujingfang1 - - mengqiy - - monopole - - pwittrock + - kustomize-admins + - kustomize-maintainers diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES new file mode 100644 index 0000000000..1688ed754d --- /dev/null +++ b/OWNERS_ALIASES @@ -0,0 +1,12 @@ +aliases: + kustomize-admins: + - grodrigues3 + - monopole + - pwittrock + kustomize-maintainers: + - droot + - justinsb + - liujingfang1 + - mengqiy + - monopole + - pwittrock