Kubernetes CronJob 定时重启 Pod 的最佳实践

在 Kubernetes 集群中,应用长时间运行可能会出现 资源泄漏、内存溢出、连接阻塞 等问题,影响服务稳定性。为了解决这些问题,我们可以使用 Kubernetes CronJob 定期 自动重启 Pod,确保服务持续稳定运行。

本文将介绍如何使用 Kubernetes CronJob定时重启 nginx Deployment,并通过 RBAC(基于角色的访问控制) 限制 kubectl 命令的权限,避免安全隐患。

🔹 特点:

定时重启:每天自动执行 kubectl rollout restart 命令

最小权限:仅赋予 patch 权限,确保安全

自动清理:不保留执行历史,防止资源浪费

无缝更新:滚动重启,保证业务不中断

适用于 微服务应用、定期重启任务、K8s 运维自动化 等场景。 🚀

# 定义一个 CronJob 定时任务
apiVersion: batch/v1
kind: CronJob
metadata:
  name: restart-my-pod  # CronJob 名称
spec:
  schedule: "58 10 * * *"  # 每天 10:58 执行一次(UTC 时间)
  successfulJobsHistoryLimit: 0  # 不保留成功执行的 Job 记录
  # failedJobsHistoryLimit: 0  # 可选,不保留失败的 Job 记录
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: restart-sa  # 绑定 ServiceAccount,以便有权限执行 kubectl 命令
          containers:
            - name: kubectl  # 容器名称
              image: xxx.service.xxx.cn/sre-paas/bitnami/kubectl:latest  # 选择 Bitnami 的 kubectl 镜像
              command: ["/bin/sh", "-c"]  # 运行 Shell 命令
              args:
                - kubectl rollout restart deployment nginx -n default && sleep 30
                # 1. 运行 `kubectl rollout restart` 命令重启 nginx 部署
                # 2. `sleep 30` 确保命令执行完毕,防止 Job 过快退出
          restartPolicy: Never  # 任务执行一次后不重启
          imagePullSecrets:
            - name: xxx-registry  # 需要拉取私有镜像时使用的镜像密钥
---
# 定义 ServiceAccount,供 CronJob 使用
apiVersion: v1
kind: ServiceAccount
metadata:
  name: restart-sa  # ServiceAccount 名称
  namespace: default  # 作用于 default 命名空间
---
# 定义 Role,授权操作 Deployment 的权限
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: restart-role  # 角色名称
  namespace: default  # 仅作用于 default 命名空间
rules:
  - apiGroups: ["apps"]  # 作用于 apps 组(用于管理 Deployment 资源)
    resources: ["deployments"]  # 目标资源:Deployment
    verbs: ["get", "list", "patch"]  # 允许执行 get、list、patch 操作(patch 用于 rollout restart)
---
# 绑定 ServiceAccount 与 Role,授予权限
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: restart-rolebinding  # 绑定名称
  namespace: default  # 作用域仍然是 default 命名空间
subjects:
  - kind: ServiceAccount
    name: restart-sa  # 绑定上面创建的 ServiceAccount
    namespace: default
roleRef:
  kind: Role
  name: restart-role  # 绑定上面创建的 Role
  apiGroup: rbac.authorization.k8s.io

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloud孙文波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值