diff --git a/examples/README.md b/examples/README.md index 053d3266e..e94221e7d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -36,3 +36,5 @@ go get github.com/kubernetes-sigs/kustomize * [container args](wordpress/README.md) - Injecting k8s runtime data into container arguments (e.g. to point wordpress to a SQL service). * [image tags](imageTags.md) - Updating image tags without applying a patch. + + * [multibases](multibases/README.md) - Composing three variants (dev, staging, production) with a common base. \ No newline at end of file diff --git a/examples/multibases/README.md b/examples/multibases/README.md new file mode 100644 index 000000000..4098736ef --- /dev/null +++ b/examples/multibases/README.md @@ -0,0 +1,122 @@ +# Demo: multibases with a common base + +When managing application in different environment, many Kustomize users have seen this scenario. There is a base _Kustomization_ for this application. On top of this base, there are several variants such as dev, staging and production variants. In each of those variants, a different _namePrefix_ is applied. Users sometimes need to create another _kustomization_ compsing all three variants, applying the same _namePrefix_, _commonLables_ or _commonAnnotations_ and deploying them together with one `kubectl` command. + +Kustomize supports composing multiple variants like that in the same `kustomization.yaml`. This demo shows how this works with a pod object. + +Define a place to work: + + +``` +DEMO_HOME=$(mktemp -d) +``` + +Define a common base: + +``` +BASE=$DEMO_HOME/base +mkdir $BASE + +cat <$BASE/kustomization.yaml +resources: +- pod.yaml +EOF + +cat <$BASE/pod.yaml +apiVersion: v1 +kind: Pod +metadata: + name: myapp-pod + labels: + app: myapp +spec: + containers: + - name: nginx + image: nginx:1.7.9 +EOF +``` + +Define a dev variant overlaying base: + +``` +DEV=$DEMO_HOME/dev +mkdir $DEV + +cat <$DEV/kustomization.yaml +bases: +- ./../base +namePrefix: dev- +EOF +``` + +Define a staging variant overlaying base: + +``` +STAG=$DEMO_HOME/staging +mkdir $STAG + +cat <$STAG/kustomization.yaml +bases: +- ./../base +namePrefix: stag- +EOF +``` + +Define a production variant overlaying base: + +``` +PROD=$DEMO_HOME/production +mkdir $PROD + +cat <$PROD/kustomization.yaml +bases: +- ./../base +namePrefix: prod- +EOF +``` + +Then define a _Kustomization_ composing three variants together: + +``` +cat <$DEMO_HOME/kustomization.yaml +bases: +- ./dev +- ./staging +- ./production + +namePrefix: cluster-a- +EOF +``` + +Now the workspace has following directories +> ``` +> . +> ├── base +> │   ├── kustomization.yaml +> │   └── pod.yaml +> ├── dev +> │   └── kustomization.yaml +> ├── kustomization.yaml +> ├── production +> │   └── kustomization.yaml +> └── staging +> └── kustomization.yaml +> ``` + +Confirm that the `kustomize build` output contains three pod objects from dev, staing and production variants. + + +``` +test 1 == \ + $(kustomize build $DEMO_HOME | grep cluster-a-dev-myapp-pod | wc -l); \ + echo $? + +test 1 == \ + $(kustomize build $DEMO_HOME | grep cluster-a-stag-myapp-pod | wc -l); \ + echo $? + +test 1 == \ + $(kustomize build $DEMO_HOME | grep cluster-a-prod-myapp-pod | wc -l); \ + echo $? +``` + diff --git a/examples/multibases/base/kustomization.yaml b/examples/multibases/base/kustomization.yaml new file mode 100644 index 000000000..d577d5e5f --- /dev/null +++ b/examples/multibases/base/kustomization.yaml @@ -0,0 +1,2 @@ +resources: +- pod.yaml \ No newline at end of file diff --git a/examples/multibases/base/pod.yaml b/examples/multibases/base/pod.yaml new file mode 100644 index 000000000..fe5ee411a --- /dev/null +++ b/examples/multibases/base/pod.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: myapp-pod + labels: + app: myapp +spec: + containers: + - name: nginx + image: nginx:1.7.9 diff --git a/examples/multibases/dev/kustomization.yaml b/examples/multibases/dev/kustomization.yaml new file mode 100644 index 000000000..d92695ed7 --- /dev/null +++ b/examples/multibases/dev/kustomization.yaml @@ -0,0 +1,4 @@ +bases: +- ./../base + +namePrefix: dev- \ No newline at end of file diff --git a/examples/multibases/kustomization.yaml b/examples/multibases/kustomization.yaml new file mode 100644 index 000000000..387ca23ae --- /dev/null +++ b/examples/multibases/kustomization.yaml @@ -0,0 +1,6 @@ +bases: +- ./dev +- ./staging +- ./production + +namePrefix: cluster-a- diff --git a/examples/multibases/production/kustomization.yaml b/examples/multibases/production/kustomization.yaml new file mode 100644 index 000000000..f6ae0c76d --- /dev/null +++ b/examples/multibases/production/kustomization.yaml @@ -0,0 +1,4 @@ +bases: +- ./../base + +namePrefix: prod- diff --git a/examples/multibases/staging/kustomization.yaml b/examples/multibases/staging/kustomization.yaml new file mode 100644 index 000000000..0606f73c9 --- /dev/null +++ b/examples/multibases/staging/kustomization.yaml @@ -0,0 +1,4 @@ +bases: +- ./../base + +namePrefix: staging-