【发布时间】:2021-12-23 16:00:37
【问题描述】:
我在 terraform 管理的 aws 上运行 kubernetes 集群。我想定期(可能每周)自动重启集群中的 Pod。由于整个集群都是由 terraform 管理的,所以我也想通过 terraform 运行自动重启命令。
起初我以为 kubernetes 会为其 pod 提供某种 ttl,但事实似乎并非如此。
在 SO 的其他地方,我看到了使用由 kubernetes 管理的 cron 作业运行自动重启的能力(例如:How to schedule pods restart)。 Terraform 有一个相关的资源——kubernetes_cron_job——但我无法完全理解如何设置它并获得实际运行所需的权限。
希望得到一些反馈!
以下是我尝试过的:
resource "kubernetes_cron_job" "deployment_restart" {
metadata {
name = "deployment-restart"
}
spec {
concurrency_policy = "Forbid"
schedule = "0 8 * * *"
starting_deadline_seconds = 10
successful_jobs_history_limit = 10
job_template {
metadata {}
spec {
backoff_limit = 2
active_deadline_seconds = 600
template {
metadata {}
spec {
service_account_name = var.service_account.name
container {
name = "kubectl"
image = "bitnami/kubectl"
command = ["kubectl rollout restart deploy"]
}
}
}
}
}
}
}
resource "kubernetes_role" "deployment_restart" {
metadata {
name = "deployment-restart"
}
rule {
api_groups = ["apps", "extensions"]
resources = ["deployments"]
verbs = ["get", "list", "patch", "watch"]
}
}
resource "kubernetes_role_binding" "deployment_restart" {
metadata {
name = "deployment-restart"
}
role_ref {
api_group = "rbac.authorization.k8s.io"
kind = "Role"
name = kubernetes_role.deployment_restart.metadata[0].name
}
subject {
kind = "ServiceAccount"
name = var.service_account.name
api_group = "rbac.authorization.k8s.io"
}
}
这是基于Granting RBAC roles in k8s cluster using terraform 和How to schedule pods restart 的组合。
目前出现以下错误:
Error: RoleBinding.rbac.authorization.k8s.io "deployment-restart" is invalid: subjects[0].apiGroup: Unsupported value: "rbac.authorization.k8s.io": supported values: ""
【问题讨论】:
-
那么,您在运行时收到错误消息?或者你错过了什么?
-
@FritzDuchardt 更新了我的尝试和遇到的错误
标签: kubernetes cron terraform scheduling kubernetes-pod