mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-09-15 12:18:57 +00:00
Add example for multibases
This commit is contained in:
@@ -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).
|
* [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.
|
* [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.
|
||||||
122
examples/multibases/README.md
Normal file
122
examples/multibases/README.md
Normal file
@@ -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:
|
||||||
|
|
||||||
|
<!-- @makeWorkplace @test -->
|
||||||
|
```
|
||||||
|
DEMO_HOME=$(mktemp -d)
|
||||||
|
```
|
||||||
|
|
||||||
|
Define a common base:
|
||||||
|
<!-- @makeBase @test -->
|
||||||
|
```
|
||||||
|
BASE=$DEMO_HOME/base
|
||||||
|
mkdir $BASE
|
||||||
|
|
||||||
|
cat <<EOF >$BASE/kustomization.yaml
|
||||||
|
resources:
|
||||||
|
- pod.yaml
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >$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:
|
||||||
|
<!-- @makeDev @test -->
|
||||||
|
```
|
||||||
|
DEV=$DEMO_HOME/dev
|
||||||
|
mkdir $DEV
|
||||||
|
|
||||||
|
cat <<EOF >$DEV/kustomization.yaml
|
||||||
|
bases:
|
||||||
|
- ./../base
|
||||||
|
namePrefix: dev-
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Define a staging variant overlaying base:
|
||||||
|
<!-- @makeStaging @test -->
|
||||||
|
```
|
||||||
|
STAG=$DEMO_HOME/staging
|
||||||
|
mkdir $STAG
|
||||||
|
|
||||||
|
cat <<EOF >$STAG/kustomization.yaml
|
||||||
|
bases:
|
||||||
|
- ./../base
|
||||||
|
namePrefix: stag-
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Define a production variant overlaying base:
|
||||||
|
<!-- @makeProd @test -->
|
||||||
|
```
|
||||||
|
PROD=$DEMO_HOME/production
|
||||||
|
mkdir $PROD
|
||||||
|
|
||||||
|
cat <<EOF >$PROD/kustomization.yaml
|
||||||
|
bases:
|
||||||
|
- ./../base
|
||||||
|
namePrefix: prod-
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Then define a _Kustomization_ composing three variants together:
|
||||||
|
<!-- @makeTopLayer @test -->
|
||||||
|
```
|
||||||
|
cat <<EOF >$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.
|
||||||
|
|
||||||
|
<!-- @confirmVariants @test -->
|
||||||
|
```
|
||||||
|
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 $?
|
||||||
|
```
|
||||||
|
|
||||||
2
examples/multibases/base/kustomization.yaml
Normal file
2
examples/multibases/base/kustomization.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
resources:
|
||||||
|
- pod.yaml
|
||||||
10
examples/multibases/base/pod.yaml
Normal file
10
examples/multibases/base/pod.yaml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: myapp-pod
|
||||||
|
labels:
|
||||||
|
app: myapp
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.7.9
|
||||||
4
examples/multibases/dev/kustomization.yaml
Normal file
4
examples/multibases/dev/kustomization.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
bases:
|
||||||
|
- ./../base
|
||||||
|
|
||||||
|
namePrefix: dev-
|
||||||
6
examples/multibases/kustomization.yaml
Normal file
6
examples/multibases/kustomization.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
bases:
|
||||||
|
- ./dev
|
||||||
|
- ./staging
|
||||||
|
- ./production
|
||||||
|
|
||||||
|
namePrefix: cluster-a-
|
||||||
4
examples/multibases/production/kustomization.yaml
Normal file
4
examples/multibases/production/kustomization.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
bases:
|
||||||
|
- ./../base
|
||||||
|
|
||||||
|
namePrefix: prod-
|
||||||
4
examples/multibases/staging/kustomization.yaml
Normal file
4
examples/multibases/staging/kustomization.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
bases:
|
||||||
|
- ./../base
|
||||||
|
|
||||||
|
namePrefix: staging-
|
||||||
Reference in New Issue
Block a user