【问题标题】:Deploying a kubernetes pods after a job is completed - helm作业完成后部署 kubernetes pod - helm
【发布时间】:2020-06-02 07:53:36
【问题描述】:

目标 - 使用 helm 完成特定作业时开始部署 pod。

目前我正在使用 helm 来部署 configmap/pods/jobs。当我执行“helm install”时,所有东西都会同时部署。 我可以添加延迟/触发器来说明特定作业何时完成然后只部署其他 pod。

我尝试使用“init container”,但很难在“init container”中获取作业状态

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    这有点脱离了 Helm 的驾驶室。您可以使用 Hooks 来获得一些相对简单的形式,但是随着复杂性的增加,许多人发现它们令人沮丧。这种模式更完整的形式需要编写一个运算符。

    【讨论】:

    • @codernger - 你能指导我如何实现自定义运算符或任何链接也应该没问题。
    • 不,这超出了评论的范围,您必须自己进行研究
    【解决方案2】:

    Helm chart hooks 可以做到这一点。 Helm 可以在一系列点上一次部署一组资源并等待它们准备好或完成。

    对于您所描述的,使用注释将作业标记为预安装钩子就足够了:

    apiVersion: batch/v1
    kind: Job
    metadata:
      annotations:
        "helm.sh/hook": pre-install
    

    在钩子成功执行之前,不会部署图表中的任何其他资源。如果 Job 失败,它将阻止部署任何其他资源。这个pre-install 挂钩仅在首次安装时运行,但如果您希望挂钩在升级或回滚时运行,则有相应的挂钩可以做到这一点。

    仍有一些工作流程很难以这种方式表达。例如,如果您的服务包含一个数据库,并且您想要一个作业来运行迁移或种子数据,那么您不能真正部署数据库 StatefulSet,然后阻塞作业挂钩,然后部署其他所有内容;您的应用程序仍然需要容忍可能未处于预期状态的情况。

    【讨论】:

    • This recent question 是钩子无法正常工作的一个很好的例子:设置作业和主 pod 相互依赖,因此调用者不希望部署“成功” " 直到工作完成,但您不能明确指定它在部署的其余部分之前或之后运行。
    • 我想要实现的是——先运行几个 pod 部署,然后运行作业,当作业状态完成后运行其余的 pod 部署。
    • 好的,那么正如@coderanger 在他们的回答中所说,您可能处于“编写自定义运算符”领域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2018-05-19
    • 2023-03-13
    • 1970-01-01
    • 2016-08-31
    • 2020-07-19
    • 2020-05-06
    相关资源
    最近更新 更多