Z Y*_*Y . 12 kubernetes kubernetes-helm
我有一个包含多个子图表的总体图表,我只是想确保subchart1在subchart2之前运行,等等。我们如何定义子图表的执行顺序?
似乎挂钩权重仅适用于声明它们的图表。
这是与图表的执行顺序有关的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设置为预安装挂钩,以实现此行为。
例:
Run Code Online (Sandbox Code Playgroud)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"
挂钩权重可以为正数或负数,但必须表示为字符串。当Tiller开始执行特定种类的钩子的执行周期时,它将以升序对这些钩子进行排序。
有关钩子的更多详细信息,请参见此处和源文件hooks.go中。
虽然您无法下订单,但您可以使用 Init Containers 来验证您的 Pod 在实际运行之前是否具备运行所需的一切:https : //kubernetes.io/docs/concepts/workloads/pods/init-containers/
归档时间: |
|
查看次数: |
6440 次 |
最近记录: |