我有一个包含多个子图表的伞形图,我只想确保子图1在子图2之前运行,等等。我们如何定义子图执行的顺序?
似乎钩子权重仅适用于声明它们的图表。
答案 0 :(得分:4)
以下是与图表执行顺序相关的Helm documentation的一部分:
上面的部分解释了如何指定图表依赖关系,但是如何指定 这会影响使用helm install和helm安装图表 升级吗?
假设名为“A”的图表创建以下Kubernetes 对象
命名空间“A-Namespace”
有状态的“A-StatefulSet”
服务“A-Service”此外,A依赖于创建的图表B. 对象
命名空间“B-Namespace”
replicaset“B-ReplicaSet”
服务“B-Service”
安装/升级图表A后,单个Helm版本就是 创建/修改。该版本将创建/更新以上所有内容 Kubernetes按以下顺序对象:
A-Namespace
B-Namespace
A-StatefulSet
B-ReplicaSet
A服务
B-服务
这是因为当Helm安装/升级图表时,Kubernetes 图表中的对象及其所有依赖项被聚合到一个集合中;然后按类型排序,后跟名称; 然后按该顺序创建/更新。
因此,使用图表及其依赖项的所有对象创建单个版本。Kubernetes类型的安装顺序由枚举给出 Install_sorter.go中的InstallOrder(参见the Helm source file)。
helm / kind_sorder.go的一部分与安装图表有关:
var InstallOrder SortOrder = []string{
"Namespace",
"ResourceQuota",
"LimitRange",
"PodSecurityPolicy",
"Secret",
"ConfigMap",
"StorageClass",
"PersistentVolume",
"PersistentVolumeClaim",
"ServiceAccount",
"CustomResourceDefinition",
"ClusterRole",
"ClusterRoleBinding",
"Role",
"RoleBinding",
"Service",
"DaemonSet",
"Pod",
"ReplicationController",
"ReplicaSet",
"Deployment",
"StatefulSet",
"Job",
"CronJob",
"Ingress",
"APIService",
}
有一种解决方法,可以更改此issue中 elementalvoid 共享的默认行为:
我一直在设置我的服务,机密和配置图作为预安装 钩子来实现这种行为。
示例:
apiVersion: v1 kind: Service metadata: name: foo annotations: "helm.sh/hook": "pre-install"
-
可以为钩子定义一个重量来帮助构建一个 确定性执行顺序。权重使用以下定义 注释:
annotations: "helm.sh/hook-weight": "5"
钩子的重量可以是正数或负数,但必须是 表示为字符串。当Tiller开始执行周期时 特定种类的钩子它将按升序排序这些钩子 顺序。
答案 1 :(得分:2)
你无法下订单,我认为你不需要它。您可以依赖健康检查,因此如果一个图表依赖于另一个图表,它可能会失败并重新启动,直到健康检查通过。
答案 2 :(得分:1)
虽然无法下订单,但是可以使用Init容器来验证Pod是否具有在实际运行它们之前需要运行的所有内容: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/