【问题标题】:Openshift application lifecycle events - application creation event?Openshift 应用程序生命周期事件 - 应用程序创建事件?
【发布时间】:2017-08-26 18:29:23
【问题描述】:

我正在尝试在 OpenShift 中挂钩应用程序创建的事件 - 如果存在这样的事件。

原因是,我想运行一个命令(最好在新的 pod 中),以创建数据库模式。在应用程序映像中包含它没有意义,因为我只需要运行一次 - 在创建应用程序时。 我研究了 pod 生命周期钩子 (https://docs.openshift.com/enterprise/3.1/dev_guide/deployments.html#pod-based-lifecycle-hook),但是每次有新部署时都会发生这些事件。所以这对于我的用例来说也太常见了。

有没有办法在创建 Openshift 应用程序时只运行一次映像?

【问题讨论】:

  • 人们仍然为此使用生命周期挂钩,但会在持久卷中使用标志,或者检查数据库的内容以确定是否需要首次初始化数据库。不过,如果这是永久部署,最安全的方法是手动运行该步骤。
  • 谢谢,是的,同意。我也在考虑使用工作 (docs.openshift.com/container-platform/3.5/dev_guide/jobs.html)。如果作业可以成为模板的一部分,那就太好了。
  • 它们应该能够作为模板的一部分创建。你想做什么,你认为你不能把它们放在模板中?
  • 我还没有尝试将作业添加到模板中。但是在阅读了关于模板对象的 openshift 文档后,我没有看到关于工作的提及,所以认为这是不可能的。
  • 关于作业的唯一不明显的事情是如何让它引用图像流,而不是像原始 Kubernetes 对象所期望的那样引用图像注册表中的图像。有关如何使用图像流参考的详细信息,请参阅stackoverflow.com/a/45227960/128141

标签: openshift


【解决方案1】:

您在这里的 cmets 中走在正确的轨道上。在 OpenShift v2 时代,同样的场景存在生命周期钩子。

例如,对于 OpenShift v2 中的 WordPress 快速入门,我们会检查是否在每次新部署时都已创建数据库。如果不是,我们初始化一个与应用程序同名的空数据库(在这种情况下,让 WordPress 之后创建模式,但这里需要的想法相同):OpenShift v2 WordPress deploy action hook

在 OpenShift v3 中,有几种方法可以实现类似的生命周期挂钩,但我们现在在模板中使用的常见模式是利用执行新 pod 的能力来运行数据库设置步骤之前的部署阶段:OpenShift v3 CakePHP pre deploy lifecycle hook

按照此模式,您将添加代码以在源代码库中的 v3 CakePHP migrate-database.sh 之类的文件中生成数据库架构,并使用预部署生命周期挂钩(通过 execNewPod)执行脚本,首先检查是否数据库/模式(从 someknowntable 限制 1 中选择 *)在加载模式之前存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多