Helm Subchart在伞形图中执行的顺序

时间:2018-05-23 15:36:40

标签: kubernetes kubernetes-helm

我有一个包含多个子图表的伞形图,我只想确保子图1在子图2之前运行,等等。我们如何定义子图执行的顺序?

似乎钩子权重仅适用于声明它们的图表。

3 个答案:

答案 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开始执行周期时   特定种类的钩子它将按升序排序这些钩子   顺序。

有关挂钩的更多详细信息,请参见here和源文件hooks.go

答案 1 :(得分:2)

你无法下订单,我认为你不需要它。您可以依赖健康检查,因此如果一个图表依赖于另一个图表,它可能会失败并重新启动,直到健康检查通过。

答案 2 :(得分:1)

虽然无法下订单,但是可以使用Init容器来验证Pod是否具有在实际运行它们之前需要运行的所有内容: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/