使用 terraform 在 kubernetes 上计划重启
Posted
技术标签:
【中文标题】使用 terraform 在 kubernetes 上计划重启【英文标题】:Scheduled restarts on kubernetes using terraform 【发布时间】: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 更新了我的尝试和遇到的错误 【参考方案1】:根据官方文档rolebinding.subjects.apiGroup
服务帐户应该是空的。
kubectl explain rolebinding.subjects.apiGroup
种类:角色绑定版本:rbac.authorization.k8s.io/v1
字段:apiGroup
说明: APIGroup 保存引用主题的 API 组。默认为“” ServiceAccount 科目。用户默认为“rbac.authorization.k8s.io” 和组主题。
【讨论】:
以上是关于使用 terraform 在 kubernetes 上计划重启的主要内容,如果未能解决你的问题,请参考以下文章
在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源
使用 AWS 和 Kubernetes 提供商的 Terraform 循环
如何使用 Terraform 将 GKE 凭证传递给 Kubernetes 提供者?
使用 Flux 和 Terraform 的 Kubernetes 秘密