kubernetes - 在 GKE 的 cronjob 中使用 rollout restart 命令
问题描述
我想使用 k8s cronjob 定期重新启动部署。
请检查yaml文件有什么问题。
当我从本地命令行执行命令时,部署会正常重启,但似乎使用 cronjob 无法重启。例如 $ kubectl rollout restart deployment my-ingress -n my-app
我的 cronjob yaml 文件
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: deployment-restart
namespace: my-app
spec:
schedule: '0 8 */60 * *'
jobTemplate:
spec:
backoffLimit: 2
activeDeadlineSeconds: 600
template:
spec:
serviceAccountName: deployment-restart
restartPolicy: Never
containers:
- name: kubectl
image: bitnami/kubectl:latest
command:
- 'kubectl'
- 'rollout'
- 'restart'
- 'deployment/my-ingress -n my-app'
解决方案
正如大卫建议的那样,运行kubectl的 cron 就像执行命令一样
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
serviceAccountName: sa-jp-runner
containers:
- name: hello
image: bitnami/kubectl:latest
command:
- /bin/sh
- -c
- kubectl rollout restart deployment my-ingress -n my-app
restartPolicy: OnFailure
我还建议您检查角色和服务帐户权限
参考示例:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: kubectl-cron
rules:
- apiGroups:
- extensions
- apps
resources:
- deployments
verbs:
- 'patch'
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: kubectl-cron
namespace: default
subjects:
- kind: ServiceAccount
name: sa-kubectl-cron
namespace: default
roleRef:
kind: Role
name: kubectl-cron
apiGroup: ""
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa-kubectl-cron
namespace: default
---
推荐阅读
- java - 媒体播放器问题
- c# - 如何在 xamarin.ios 中动态添加和删除 UITableview 中的行
- java - 我可以在没有硬编码的情况下在 Windows 上运行的 Java 中构建 Linux 路径吗?
- c# - 泛型类不打印第二个参数
- google-bigquery - 从 java 更新 bigquery 数据集访问
- node.js - 贝宝无效的负面测试输入
- google-chrome - 铬 67 日期与铬 66 日期
- .htaccess - 使用 htaccess 从 URL 中删除 en
- html - Instagram 通过 API 或其他方式进行分析
- javascript - 使用 redux 表单添加和编辑多个主题