【发布时间】:2020-10-16 12:53:24
【问题描述】:
我在我的 Gcloud 项目中创建了一个计划配置来创建一堆虚拟磁盘的快照。
现在我想将我的计划配置添加到我的磁盘中,但我不知道如何以自动方式进行,因为我有超过 1200 个磁盘。
我尝试使用内部带有 cron 的 POD,但我无法执行 kubectl 命令来列出我所有的持久卷:
kubectl describe pv | grep "Name" | awk 'NR % 2 == 1' | awk '{print $2}'
我想将此列表与循环中的下一个命令一起使用,以自动将我的编程计划添加到我的磁盘:
gcloud compute disks add-resource-policies [DISK_NAME] --resource-policies [SCHEDULE_NAME] --zone [ZONE]
提前感谢您的帮助。
编辑1:在一些cmets之后,我更改了代码以添加Kubernetes CronJob,但结果相同,代码不起作用(创建了pod,但它给了我一个错误:ImagePullBackOff):
resource "kubernetes_cron_job" "schedulerdemo" {
metadata {
name = "schedulerdemo"
}
spec {
concurrency_policy = "Replace"
failed_jobs_history_limit = 5
schedule = "*/5 * * * *"
starting_deadline_seconds = 10
successful_jobs_history_limit = 10
job_template {
metadata {}
spec {
backoff_limit = 2
ttl_seconds_after_finished = 10
template {
metadata {}
spec {
container {
name = "scheduler"
image = "imgscheduler"
command = ["/bin/sh", "-c", "date; kubectl describe pv | grep 'Name' | awk 'NR % 2 == 1' | awk '{print $2}'"]
}
}
}
}
}
}
}
【问题讨论】:
-
“我无法执行 kubectl 命令”是什么意思?另外,最好不要在 pod 内运行 cron,而是使用 kubernetes
CronJobressource (kubernetes.io/docs/concepts/workloads/controllers/cron-jobs)。 -
kubectl 可能无法工作的原因是因为您没有给它一个 ServiceAccount,这就是 kubectl 无法通过您的集群进行身份验证的原因。但是,按照 Markus 的解决方案,我还宁愿使用 Cronjob 资源并运行发出 gcloud 命令的 shell 脚本。要完全解决这个问题,您只需要一个可以列出和描述永久性磁盘的 ServiceAccount,还需要使用同一个服务帐号将其链接到 GCP 中的 IAM 实体。
-
我关注了您的 cmets,并更改了 terraform 代码中的代码以创建 CronJob:我将代码粘贴到问题中。
-
ImagePullBackOff错误意味着它无法找到image属性中指定的图像。此映像是否在您的容器注册表中? -
好吧,不好意思,图片名称错误。现在我在容器日志中有一个错误:/bin/sh: kubectl: not found
标签: kubernetes cron google-kubernetes-engine persistent-volumes