首页 > 解决方案 > Helm 图表部署排序

问题描述

我创建了一个包含 2 个 podPreset 和 2 个部署的新图表,当我运行 helm install 时,首先创建了部署(pod)对象,然后创建了 podPresets,因此来自 podPreset 的值不会应用于 pod,但是当我首先手动创建 podPreset然后部署正确应用预设,有没有一种方法可以在 helm 中指定应该首先创建哪个对象。

标签: kuberneteskubernetes-helmkubernetes-pod

解决方案


将其发布为社区 Wiki 以获得更好的可见性,因为答案在@Rastko 的另一个答案下方的评论中提供。

PodPresents

Pod Preset 是一种 API 资源,用于在创建时向 Pod 注入额外的运行时需求。使用 Pod 预设允许 pod 模板作者不必为每个 pod 显式提供所有信息。这样,使用特定服务的 pod 模板的作者不需要了解有关该服务的所有详细信息。

更多信息,请查看官方文档

Helm 中部署对象的顺序

部署顺序是硬编码的Helm。列表可以在这里找到。

此外,如果资源不在列表中,它将作为最后一个执行。

从评论中回答问题*

回答您的问题 - 要实现与默认顺序不同的顺序,您可以创建两个掌舵图表,其中一个带有部署的图表随后preinstall hook在确保预设存在的情况下执行。

预安装钩子注释允许在模板渲染之后,但在任何资源创建之前执行。

Github线程上提到了此解决方法。服务示例:

apiVersion: v1
kind: Service
metadata:
  name: foo
  annotations:
    "helm.sh/hook": "pre-install"

作为附加信息,可以为钩子定义权重,这将有助于建立确定性的执行顺序。

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

有关此注释的更多详细信息,请查看此Stackoverflow 问题


推荐阅读