首页 > 解决方案 > 如何让预安装钩子等待前一个钩子完成?

问题描述

我有 2 个应该按顺序运行的预安装脚本。它们具有明显不同的权重 第二个脚本必须有第一个才能完成运行。反正有没有让 helm 支持这种行为?

而且为了奖励点,您可以制作一个预安装挂钩来阻止直到对象准备好?

场景如下:

您有一个数据库和一个应用程序。

设置是:

  1. 创建数据库(部署),
  2. 创建数据库(服务),
  3. 运行了一个在该数据库(作业)上创建所有数据库用户的脚本
  4. 启动应用程序服务器(部署)。

标签: kuberneteskubernetes-helm

解决方案


首先,您需要正确设置挂钩重量。例如:

  annotations:
    "helm.sh/hook-weight": "5"

挂钩权重可以是正数或负数,但必须表示为字符串。当 Tiller 开始执行特定类型的钩子(例如pre-install钩子或post-install 钩子等)时,它将按升序对这些钩子进行排序。

根据Hooks 和 release 生命周期,默认情况下,Tiller 会等到一个钩子“就绪”后再执行下一个钩子。问题是:处理由钩子管理的脚本时,您需要将资源创建为Job

等到钩子准备好是什么意思?这取决于钩子中声明的资源。如果资源是 Job 类型,Tiller 将等到作业成功运行完成。如果作业失败,发布也会失败。这是一个阻塞操作,因此 Helm 客户端会在 Job 运行时暂停。

如果要运行依赖于准备就绪的数据库或应用程序的作业,最好将钩子 aspost-install--wait标志结合使用。post-install设置此标志后,Tiller 将等待直到所有发布资源都部署完毕并处于就绪状态,并且在它们就绪之前不会运行钩子。


推荐阅读