我想在特定命名空间中的 Pod 上运行循环,但诀窍是在 cronJob 中执行此操作,是否可以内联?
kubectl get pods -n foo
这里的技巧是在你获得 Pod 列表后,我需要循环并在 15 秒的超时时间内将每个 Pod 删除,是否可以在 cronJob 中执行此操作?
apiVersion: batch/v1
kind: CronJob
metadata:
name: restart
namespace: foo
spec:
concurrencyPolicy: Forbid
schedule: "*/1 * * * *"
jobTemplate:
spec:
backoffLimit: 2
activeDeadlineSeconds: 600
template:
spec:
serviceAccountName: pod-exterminator
restartPolicy: Never
containers:
- name: kubectl
image: bitnami/kubectl:1.22.3
command:
- 'kubectl'
- 'get'
- 'pods'
- '--namespace=foo'
当运行上面的脚本时它可以工作,但是当你想运行循环时它会变得复杂,我怎样才能内联完成它?
最佳答案
在你的情况下,你可以使用这样的东西:
apiVersion: batch/v1
kind: CronJob
metadata:
name: restart
namespace: foo
spec:
concurrencyPolicy: Forbid
schedule: "*/1 * * * *"
jobTemplate:
spec:
backoffLimit: 2
activeDeadlineSeconds: 600
template:
spec:
serviceAccountName: pod-exterminator
restartPolicy: Never
containers:
- name: kubectl
image: bitnami/kubectl:1.22.3
command:
- /bin/sh
- -c
- kubectl get pods -o name | while read -r POD; do kubectl delete "$POD"; sleep 15; done
但是,你真的需要等待15秒吗?如果你想在删除下一个 Pod 之前确保该 Pod 已经消失,可以使用 --wait=true
,所以命令将变为:
kubectl get pods -o name | while read -r POD; do kubectl delete "$POD" --wait; done
关于bash - k8s CronJob 在 pod 列表上循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71148660/