【发布时间】:2021-07-07 04:04:54
【问题描述】:
假设我有cronjob、service 和deployment,如下所示:
# Create a directory to hold the base
mkdir base
# Create a base/deployment.yaml
cat <<EOF > base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
EOF
# Create a base/service.yaml file
cat <<EOF > base/service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
EOF
# Create a base/cronjob.yaml file
cat <<EOF > base/cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
EOF
# Create a base/kustomization.yaml
cat <<EOF > base/kustomization.yaml
resources:
- deployment.yaml
- service.yaml
- cronjob.yaml
EOF
通常,一切正常,但有时我的项目不需要运行 cronjob,所以我想禁用 cronjob.yaml 导入。
那么,有没有办法做到这一点?例如像jinja2,
- deployment.yaml
- service.yaml
{{ IF set CRONJOB }}
- cronjob.yaml
{{ ENDIF }}
我了解@AniAggarwal 发布的内容,我可以在运行kubectl apply -f 之前使用过滤器,但这对我的项目来说不是很好。
欢迎提出任何建议。
【问题讨论】:
-
您是否对 cronjob.yaml 进行了更改?如果是这样,它将被更改..如果您想有选择地应用资源,那么您可能也需要考虑使用一些 yml 模板,例如 ytt。你可以在那里传递一个标志,然后应用你想要的资源。
-
@AniAggarwal 哦,真的吗?怎么做?对我来说,有时我希望我的模板只支持服务和部署。
-
查看以下项目:github.com/Agilicus/yaml_filter 或 carvel.dev。更具体地看看这个例子carvel.dev/ytt/#example:example-if
-
@AniAggarwal 我试过你的方法,但对我不好,有什么好主意吗?例如,我可以使用 patchStrategicMerge 吗?
-
你能再解释一下用例吗?我想了解一下您要实现的目标是什么?
标签: kubernetes yaml kustomize