使用 Cron Job,但不是运行你的 Pod,而是安排一个 Kubernetes API 命令,该命令将每天重新启动部署(kubectl rollout restart)。这样,如果出现问题,旧的 Pod 就不会被关闭或删除。
还要确保您指定了正确的命名空间,并且 pod 具有与 k8s API 交互的正确权限。因为 k8s API 对 pod 的授权通常是通过服务帐户完成的。此外,您还需要授予它访问 API 的权限,这意味着创建一个 ServiceAccount 和一些 RBAC 策略对象(Role、RoleBinding),然后在您的 pod 规范中设置serviceAccountName。
不建议将虚拟机上的 Cron 作业用于容器,因为在虚拟机上运行 Cron 作业本身会在作业和虚拟机之间建立直接依赖关系。这意味着如果虚拟机重新启动,我们就会失去 Cron 作业。容器可以重新启动或销毁而不会影响整体应用程序状态,而虚拟机上的 Cron 作业不尊重这种行为。因此,虚拟机上的 Cron 作业本身并不适用于容器部署,因为它与虚拟机绑定,而不是与容器本身绑定。
您可以在 Kubernetes 中设置 Cron Job,这是一项内置功能,因此它将有助于重新启动 Pod。有关更多详细信息,请参阅使用 CronJob 运行自动化任务。
使用 Cron Job,但不是运行你的 Pod,而是安排一个 Kubernetes API 命令,该命令将每天重新启动部署(kubectl rollout restart)。这样,如果出现问题,旧的 Pod 就不会被关闭或删除。
还要确保您指定了正确的命名空间,并且 pod 具有与 k8s API 交互的正确权限。因为 k8s API 对 pod 的授权通常是通过服务帐户完成的。此外,您还需要授予它访问 API 的权限,这意味着创建一个 ServiceAccount 和一些 RBAC 策略对象(Role、RoleBinding),然后在您的 pod 规范中设置serviceAccountName。
要每天重启 pod,请执行以下操作,
其中 86400 是所需的秒数(本例中为每天重启 1 次)。
与上述类似,您也可以使用其他解决方法,例如:
Stackdriver Monitoring:根据自定义指标提供灵活的重启调度。Google Cloud Run:对于无状态、可扩展的应用程序来说,简单而高效。
评估安排虚拟机实例的启动和停止。
重新启动 COS VM 将重新启动容器。只要容器被定义为实例配置的一部分(即
--container-image
等),并且在镜像运行时不作为临时容器运行。