【问题标题】:Kubernetes: run a job on node reboot only onceKubernetes:仅在节点重启时运行一次作业
【发布时间】:2020-05-21 17:49:38
【问题描述】:

有没有办法在 Kubernetes 中机器重启后只运行一次作业?

想过将 cronjob 作为静态 pod 运行,但 kubelet 似乎不喜欢它。

编辑:根据回复,我想澄清一下。我只是想通过原生 Kubernetes 来做这件事。我可以在 Kubernetes 中编写一个 cronjob,但我只需要在节点重启时运行一次。

【问题讨论】:

    标签: kubernetes cron jobs kubernetes-pod kubelet


    【解决方案1】:

    不确定你的平台。

    例如,在 AWS 中,ec2 实例有user_data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)

    它会在启动时在您的 Linux/Windows 实例上运行命令

    您应该可以为其他云提供商或本地服务器找到类似的解决方案。

    【讨论】:

      【解决方案2】:

      如果我理解正确,您应该考虑使用DaemonSet

      DaemonSet 确保所有(或部分)节点运行 Pod 的副本。作为 节点被添加到集群中,Pod 被添加到它们。由于节点是 从集群中移除后,这些 Pod 将被垃圾回收。删除一个 DaemonSet 将清理它创建的 Pod。

      这样您就可以创建一个容器,其中的作业将从DaemonSet 运行。

      或者你可以考虑DaemonJob:

      这是一个示例CompositeController,与 Job 类似,除了 每个节点都会调度一个 pod,类似于DaemonSet

      还有:

      Kubebuilder 是一个使用自定义构建 Kubernetes API 的框架 资源定义 (CRD)。

      和:

      Metacontroller 是 Kubernetes 的一个附加组件,可以轻松编写 并以简单脚本的形式部署自定义控制器。

      但在我看来,我提供的第一个选项会更容易实现。

      如果有帮助,请告诉我。

      【讨论】:

        【解决方案3】:

        考虑为此使用 CronJob。它采用与 linux 上的普通 cron 调度程序相同的格式。 除了广泛用于指示计划的常用格式(分钟/小时/月/月/周)之外,cron 调度程序还允许使用@reboot。 该指令后跟脚本的绝对路径,将使其在机器启动时运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-15
          • 1970-01-01
          • 1970-01-01
          • 2018-06-12
          • 2020-08-06
          • 1970-01-01
          • 1970-01-01
          • 2021-04-07
          相关资源
          最近更新 更多