伞形图中的Helm Subchart执行顺序

Z Y*_*Y . 12 kubernetes kubernetes-helm

我有一个包含多个子图表的总体图表,我只是想确保subchart1在subchart2之前运行,等等。我们如何定义子图表的执行顺序?

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

VAS*_*VAS 7

这是与图表的执行顺序有关的Helm 文档的一部分:

以上各节说明了如何指定图表依赖关系,但这如何影响使用头盔安装和头盔升级的图表安装?

假设一个名为“ A”的图表创建了以下Kubernetes对象

命名空间“ A-Namespace”
statefulset“ A-StatefulSet”
服务“ A-Service”

此外,A依赖于创建对象的图表B

命名空间“ B-Namespace”
副本集“ B-ReplicaSet”
服务“ B-Service”

在安装/升级图表A之后,将创建/修改单个Helm版本。该发行版将按以下顺序创建/更新上述所有Kubernetes对象:

A-命名空间
B-命名空间
A-StatefulSet
B-ReplicaSet
A服务
B服务

这是因为当Helm安装/升级图表时,图表中的Kubernetes对象及其所有依赖项都聚集到一个集合中。然后按类型和名称排序;然后以该顺序创建/更新。
因此,将使用图表的所有对象及其依存关系创建一个发行版。

Kubernetes类型的安装顺序由kind_sorter.go中的枚举InstallOrder给出(请参阅Helm源文件)。

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",
}
Run Code Online (Sandbox Code Playgroud)

有一个解决方法可以更改默认行为,此问题elementalvoid共享:

我已经将我的服务,机密和configmap设置为预安装挂钩,以实现此行为。

例:

apiVersion: v1
kind: Service
metadata:
  name: foo
  annotations:
    "helm.sh/hook": "pre-install"
Run Code Online (Sandbox Code Playgroud)

-

可以为挂钩定义权重,这将有助于建立确定性的执行顺序。权重使用以下注释定义:

  annotations:
    "helm.sh/hook-weight": "5"
Run Code Online (Sandbox Code Playgroud)

挂钩权重可以为正数或负数,但必须表示为字符串。当Tiller开始执行特定种类的钩子的执行周期时,它将以升序对这些钩子进行排序。

有关钩子的更多详细信息,请参见此处和源文件hooks.go中。


tal*_*952 5

虽然您无法下订单,但您可以使用 Init Containers 来验证您的 Pod 在实际运行之前是否具备运行所需的一切:https : //kubernetes.io/docs/concepts/workloads/pods/init-containers/


小智 2

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