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 <<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:
DEV=$DEMO_HOME/dev
mkdir $DEV
cat <<EOF >$DEV/kustomization.yaml
bases:
- ./../base
namePrefix: dev-
EOF
Define a staging variant overlaying base:
STAG=$DEMO_HOME/staging
mkdir $STAG
cat <<EOF >$STAG/kustomization.yaml
bases:
- ./../base
namePrefix: stag-
EOF
Define a production variant overlaying base:
PROD=$DEMO_HOME/production
mkdir $PROD
cat <<EOF >$PROD/kustomization.yaml
bases:
- ./../base
namePrefix: prod-
EOF
Then define a Kustomization composing three variants together:
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.
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 $?