kustomize
鼓励定义多个 variants:例如在通用的 base 上使用 dev、staging 和 prod overlay。
可以创建其他 overlay 来将这些 variants 组合在一起:只需将 overlay 声明为新 kustomization 的 base 即可。
如果 base 由于某种原因无法控制,将多个 variants 组合在一起也可以为他们添加通用的 label 或 annotation。
下面使用一个 pod 作为 base 来进行演示。
首先创建一个工作空间:
DEMO_HOME=$(mktemp -d)
定义一个通用的 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
定义 dev variant:
DEV=$DEMO_HOME/dev
mkdir $DEV
cat <<EOF >$DEV/kustomization.yaml
resources:
- ./../base
namePrefix: dev-
EOF
定义 staging variant:
STAG=$DEMO_HOME/staging
mkdir $STAG
cat <<EOF >$STAG/kustomization.yaml
resources:
- ./../base
namePrefix: stag-
EOF
定义 production variant:
PROD=$DEMO_HOME/production
mkdir $PROD
cat <<EOF >$PROD/kustomization.yaml
resources:
- ./../base
namePrefix: prod-
EOF
然后定义一个 Kustomization,将三个 variants 组合在一起:
cat <<EOF >$DEMO_HOME/kustomization.yaml
resources:
- ./dev
- ./staging
- ./production
namePrefix: cluster-a-
EOF
现在工作空间有如下目录:
. ├── base │ ├── kustomization.yaml │ └── pod.yaml ├── dev │ └── kustomization.yaml ├── kustomization.yaml ├── production │ └── kustomization.yaml └── staging └── kustomization.yaml
输出包含三个 pod 对象,分别来自 dev、staging 和 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 $?
与在不同的 variants 中添加不同的 namePrefix
类似,也可以添加不同的 namespace
并在一个 kustomization 中组成这些 variants。更多的详细信息,请查看multi-namespaces。