如何解决创建多个 kubernetes 作业清单的自动化方法
Cron 模板
kind: CronJob
metadata:
name: some-example
namespace: some-example
spec:
schedule: "* 12 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: some-example
image: gcr.io/some-example/some-example
imagePullPolicy: Always
env:
- name: REPO_URL
value: https://example.com/12/some-example
我需要使用 REPO_URL
的不同 URL 创建多个作业文件,保存在一个文件中的时间超过 100 秒。我正在寻找一种解决方案,我可以在其中设置作业模板并从另一个文件中获取所需的键:值。
到目前为止,我已经尝试过 discussion about the change、https://kustomize.io/ 和 https://ballerina.io/。但我找不到适合这种情况的好例子。
解决方法
这对于 yq
和 shell 脚本来说是非常简单的。假设
您的模板在 cronjob.yml
中,我们可以这样写:
let count=0
while read url; do
yq -y '
.metadata.name = "some-example-'"$count"'"|
.spec.jobTemplate.spec.template.spec.containers[0].env[0].value = "'"$url"'"
' cronjob.yml
echo '---'
let count++
done < list_of_urls.txt | kubectl apply -f-
例如,如果我的 list_of_urls.txt
包含:
https://google.com
https://stackoverflow.com
上面的脚本会产生:
[...]
metadata:
name: some-example-0
namespace: some-example
spec:
[...]
env:
- name: REPO_URL
value: https://google.com
---
[...]
metadata:
name: some-example-1
namespace: some-example
spec:
[...]
env:
- name: REPO_URL
value: https://stackoverflow.com
如果您只想查看 输出而不是实际创建资源。
或者对于更结构化的方法,我们可以使用 Ansible 的 k8s 模块:
| kubectl apply -f-
假设以上内容存储在 - hosts: localhost
gather_facts: false
tasks:
- k8s:
state: present
definition:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: "some-example-{{ count }}"
namespace: some-example
spec:
schedule: "* 12 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: some-example
image: gcr.io/some-example/some-example
imagePullPolicy: Always
env:
- name: REPO_URL
value: "{{ item }}"
loop:
- https://google.com
- https://stackoverflow.com
loop_control:
index_var: count
中,运行它
playbook.yml
将创建与
较早的 shell 脚本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。