【问题标题】:K8s Cronjob Rolling Restart Every DayK8s Cronjob 每天滚动重启
【发布时间】:2021-07-29 02:39:55
【问题描述】:

我有一个 pod,我想每天自动重启一次。我查看了 Cronjob 文档,我想我已经接近了,但我不断收到退出代码 1 错误。我不确定我的 .yaml 中是否存在明显错误。如果没有,我也可以发布错误日志。这是我的代码:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-deployment-restart
spec:
  schedule: "0 20 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: kubectl
              image: bitnami/kubectl 
              command:
                - 'kubectl'
                - 'rollout'
                - 'restart'
                - 'deployment my-deployment'

【问题讨论】:

  • 是否正在创建作业吊舱?如果是这样,该 pod 的日志说明了什么?
  • 作业 pod 确实创建了。这是错误消息:``` 容器:kubectl:容器 ID:docker://f0 映像:bitnami/kubectl 映像 ID:docker-pullable://bitnami/kubectl 端口: 主机端口: 命令: kubectl rollout restart deployment course-service-deployment 状态:已终止 原因:错误 退出代码:1 开始:2021 年 5 月 5 日,星期三 13:00:46 -0700 完成:2021 年 5 月 5 日,星期三 13:00:47 -0700 就绪:假```
  • 来自kubectl logs <your_pod>?它看起来更像是 pod 的 describe 输出。
  • 对不起,我刚刚检查过了,我从日志中得到的唯一消息是这个错误:服务器没有资源类型“部署我的部署”所以做“部署”和'我的部署需要在不同的行上?
  • 这意味着要么你没有指定正确的命名空间,要么 pod 没有正确的权限来与 k8s API 交互。对 pod 的 k8s API 授权通常是通过服务帐户完成的。

标签: kubernetes kubernetes-cronjob


【解决方案1】:

您需要授予它访问 API 的权限,这意味着创建一个 ServiceAccount 和一些 RBAC 策略对象(Role、RoleBinding),然后在您的 pod 规范中设置 serviceAccountName

【讨论】:

  • 谢谢!这给了我一个很好的起点。似乎以设定的时间间隔对 pod 进行滚动更新将是您可以在 pod 本身的部署与单独的 Cronjob 之间指定的内容,但这是一个完全不同的问题。 ;)
  • 您可能希望查看能够更安全、更有效地实现此功能的生态系统工具。对于一种情况,这很好,但如果你最终做了一堆,有许多“收割者”风格的工具可以在 N 秒后删除一个 pod(在这种情况下为 86400)。
猜你喜欢
  • 2021-07-11
  • 2021-09-10
  • 2012-05-13
  • 2021-11-30
  • 2019-12-09
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多