本文中我将通过shell命令将一整个namespaces的crojob 先制成yaml文件。解决这个问题的办法有很多,不一定要局限于我这一种,我的集群环境和当时的工具环境不一定和大多数人一样。
先尝试了几种立马能想到的方法,如
kubectl get cronjob -o yaml
这种方法获取到的是一个cronjob列表,像下面这样:
apiVersion: v1
items:
- apiVersion: batch/v1beta1
kind: CronJob
metadata:
creationTimestamp: "2020-05-09T10:14:53Z"
labels:
com.qunhe.i18n.cron/type: HD_RENDER
name: monthly-add-hd-ticket-55001
namespace: i18n-cron
resourceVersion: "19143308"
selfLink: /apis/batch/v1beta1/namespaces/i18n-cron/cronjobs/monthly-add-hd-ticket-55001
uid: ff7f9ad9-1010-486a-a27c-d780df725615
spec:
我直接apply 会报错,然后换了几个思路都不行。
然后我想了一下,既然一部不行,我就差分几步来做。我知道如果直接针对某一个特定的cronjob是可行的,那我把整个cronjob name的名字拉下来即可。
于是一番搜索,得出这样一个方法
kubectl get cronjobs --no-headers -n i18n-cron -o custom-columns=":metadata.name"
之后通过shell进行数组便利即可
#!/bin/sh
CRONJOB_NAMES=$(kubectl get cronjobs --no-headers -n i18n-cron -o custom-columns=":metadata.name")
arrays=($(echo $CRONJOB_NAMES | tr ' ' '\n'))
for cronjob in ${arrays[@]}
do
kubectl get cronjob $cronjob -n i18n-cron -o yaml > ./$cronjob.yaml
done