From 60a81ddb73ee286eea511ef6c28932baa9031942 Mon Sep 17 00:00:00 2001 From: peng9808 Date: Mon, 23 Sep 2024 17:35:44 +0800 Subject: [PATCH] update hwameistor-operator v0.15.0 Signed-off-by: peng9808 --- charts/hwameistor-operator/config | 2 +- .../hwameistor-operator/.relok8s-images.yaml | 18 +- .../hwameistor-operator/Chart.yaml | 8 +- .../crds/hwameistor.io_clusters.yaml | 1349 ++++++++++++++++- .../templates/_helpers.tpl | 10 + .../templates/hwameistorcluster.yaml | 32 +- .../values.extra.prod.yaml | 19 + .../hwameistor-operator/values.yaml | 217 +-- 8 files changed, 1443 insertions(+), 212 deletions(-) diff --git a/charts/hwameistor-operator/config b/charts/hwameistor-operator/config index 460f6e0..1bbc9ad 100644 --- a/charts/hwameistor-operator/config +++ b/charts/hwameistor-operator/config @@ -4,7 +4,7 @@ export USE_OPENSOURCE_CHART=true export REPO_URL=http://hwameistor.io/hwameistor-operator export REPO_NAME=hwameistor-operator export CHART_NAME=hwameistor-operator -export VERSION=v0.14.4 +export VERSION=v0.15.0 # push to daocloud repo export DAOCLOUD_REPO_PROJECT=addon diff --git a/charts/hwameistor-operator/hwameistor-operator/.relok8s-images.yaml b/charts/hwameistor-operator/hwameistor-operator/.relok8s-images.yaml index 22f3a2b..ea8789d 100644 --- a/charts/hwameistor-operator/hwameistor-operator/.relok8s-images.yaml +++ b/charts/hwameistor-operator/hwameistor-operator/.relok8s-images.yaml @@ -24,12 +24,14 @@ - "{{ .global.hwameistorImageRegistry }}/{{ .ui.imageRepository }}:{{ .ui.tag }}" - "{{ .global.hwameistorImageRegistry }}/{{ .operator.imageRepository }}:{{ .operator.tag }}" - "{{ .global.hwameistorImageRegistry }}/{{ .preHookJob.imageRepository }}:{{ .preHookJob.tag }}" -- "{{ .global.hwameistorImageRegistry }}/{{ .ha.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.0" -- "{{ .global.hwameistorImageRegistry }}/{{ .drbdRhel7.imageRepository }}:{{ .ha.drbdVersion }}" -- "{{ .global.hwameistorImageRegistry }}/{{ .drbdRhel8.imageRepository }}:{{ .ha.drbdVersion }}" -- "{{ .global.hwameistorImageRegistry }}/{{ .drbdRhel9.imageRepository }}:{{ .ha.drbdVersion }}" -- "{{ .global.hwameistorImageRegistry }}/{{ .drbdKylin10.imageRepository }}:{{ .ha.drbdVersion }}" -- "{{ .global.hwameistorImageRegistry }}/{{ .drbdBionic.imageRepository }}:{{ .ha.drbdVersion }}" -- "{{ .global.hwameistorImageRegistry }}/{{ .drbdFocal.imageRepository }}:{{ .ha.drbdVersion }}" - +- "{{ .global.hwameistorImageRegistry }}/{{ .ha.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .drbdRhel7.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .drbdRhel8.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .drbdRhel9.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .drbdKylin10.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .drbdBionic.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .drbdFocal.imageRepository }}:{{ .ha.drbdVersion }}_v0.4.2" +- "{{ .global.hwameistorImageRegistry }}/{{ .dataLoadManager.imageRepository }}:{{ .dataLoadManager.tag }}" +- "{{ .global.hwameistorImageRegistry }}/{{ .dataSetManager.imageRepository }}:{{ .dataSetManager.tag }}" +- "{{ .global.hwameistorImageRegistry }}/{{ .dataLoadInit.imageRepository }}:{{ .dataLoadInit.tag }}" # - "{{ .global.hwameistorImageRegistry }}/{{ .ha.imageRepoOwner }}/drbd9-jammy:v9.1.11" diff --git a/charts/hwameistor-operator/hwameistor-operator/Chart.yaml b/charts/hwameistor-operator/hwameistor-operator/Chart.yaml index d5c375b..e90aa8f 100644 --- a/charts/hwameistor-operator/hwameistor-operator/Chart.yaml +++ b/charts/hwameistor-operator/hwameistor-operator/Chart.yaml @@ -1,11 +1,7 @@ apiVersion: v2 -appVersion: v0.14.4 +appVersion: v0.15.0 description: A Helm chart for Hwameistor Operator icon: https://hwameistor.io/img/logo.svg name: hwameistor-operator type: application -version: v0.14.4 -keywords: - - storage - - local - - block +version: v0.15.0 diff --git a/charts/hwameistor-operator/hwameistor-operator/crds/hwameistor.io_clusters.yaml b/charts/hwameistor-operator/hwameistor-operator/crds/hwameistor.io_clusters.yaml index 92ef056..903d9bb 100644 --- a/charts/hwameistor-operator/hwameistor-operator/crds/hwameistor.io_clusters.yaml +++ b/charts/hwameistor-operator/hwameistor-operator/crds/hwameistor.io_clusters.yaml @@ -1930,6 +1930,1254 @@ spec: required: - replicas type: object + dataLoadManager: + properties: + common: + properties: + nodeAffinity: + description: Node affinity is a group of node affinity scheduling + rules. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Pod affinity is a group of inter pod affinity + scheduling rules. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + priorityClassName: + type: string + tolerations: + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule and + NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. If the + key is empty, operator must be Exists; this combination + means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent to wildcard + for value, so that a pod can tolerate all taints of + a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period + of time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the + taint forever (do not evict). Zero and negative values + will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value should + be empty, otherwise just a regular string. + type: string + type: object + type: array + type: object + dataLoadManagerContainer: + properties: + image: + properties: + registry: + type: string + repository: + type: string + tag: + type: string + type: object + resources: + description: ResourceRequirements describes the compute resource + requirements. + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of + compute resources required. If Requests is omitted for + a container, it defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined value. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + type: object + disable: + type: boolean + type: object + dataSetManager: + properties: + common: + properties: + nodeAffinity: + description: Node affinity is a group of node affinity scheduling + rules. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Pod affinity is a group of inter pod affinity + scheduling rules. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + priorityClassName: + type: string + tolerations: + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, + allowed values are NoSchedule, PreferNoSchedule and + NoExecute. + type: string + key: + description: Key is the taint key that the toleration + applies to. Empty means match all taint keys. If the + key is empty, operator must be Exists; this combination + means to match all values and all keys. + type: string + operator: + description: Operator represents a key's relationship + to the value. Valid operators are Exists and Equal. + Defaults to Equal. Exists is equivalent to wildcard + for value, so that a pod can tolerate all taints of + a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period + of time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the + taint forever (do not evict). Zero and negative values + will be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration + matches to. If the operator is Exists, the value should + be empty, otherwise just a regular string. + type: string + type: object + type: array + type: object + dataSetManagerContainer: + properties: + image: + properties: + registry: + type: string + repository: + type: string + tag: + type: string + type: object + resources: + description: ResourceRequirements describes the compute resource + requirements. + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of + compute resources required. If Requests is omitted for + a container, it defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined value. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + type: object + disable: + type: boolean + type: object + datasetDefaultPoolClass: + type: string diskReserveConfigurations: items: properties: @@ -1946,18 +3194,6 @@ spec: type: array drbd: properties: - shipper: - properties: - image: - properties: - registry: - type: string - repository: - type: string - tag: - type: string - type: object - type: object chartVersion: type: string checkHostName: @@ -1970,10 +3206,6 @@ spec: type: string imagePullPolicy: type: string - imageRegistry: - type: string - imageRepoOwner: - type: string nodeAffinity: description: Node affinity is a group of node affinity scheduling rules. @@ -2178,6 +3410,15 @@ spec: - nodeSelectorTerms type: object type: object + shipper: + properties: + registry: + type: string + repository: + type: string + tag: + type: string + type: object upgrade: type: string useAffinity: @@ -9874,6 +11115,82 @@ spec: - workloadType type: object type: object + dataLoadManager: + properties: + health: + type: string + instances: + properties: + availablePodCount: + format: int32 + type: integer + desiredPodCount: + format: int32 + type: integer + pods: + items: + properties: + name: + type: string + node: + type: string + status: + type: string + required: + - name + - node + - status + type: object + type: array + workloadName: + type: string + workloadType: + type: string + required: + - availablePodCount + - desiredPodCount + - workloadName + - workloadType + type: object + type: object + dataSetManager: + properties: + health: + type: string + instances: + properties: + availablePodCount: + format: int32 + type: integer + desiredPodCount: + format: int32 + type: integer + pods: + items: + properties: + name: + type: string + node: + type: string + status: + type: string + required: + - name + - node + - status + type: object + type: array + workloadName: + type: string + workloadType: + type: string + required: + - availablePodCount + - desiredPodCount + - workloadName + - workloadType + type: object + type: object evictor: properties: health: diff --git a/charts/hwameistor-operator/hwameistor-operator/templates/_helpers.tpl b/charts/hwameistor-operator/hwameistor-operator/templates/_helpers.tpl index 1b06be5..74f60c2 100644 --- a/charts/hwameistor-operator/hwameistor-operator/templates/_helpers.tpl +++ b/charts/hwameistor-operator/hwameistor-operator/templates/_helpers.tpl @@ -125,3 +125,13 @@ Create the name of the service account to use {{- define "hwameistor.uiImageTag" -}} {{- default .Values.global.hwameistorVersion .Values.ui.tag -}} {{- end -}} + +{{/* Allow dataLoadManager image tag to be overridden. */}} +{{- define "hwameistor.dataLoalManagerImageTag" -}} + {{- default .Values.global.hwameistorVersion .Values.dataLoadManager.tag -}} +{{- end -}} + +{{/* Allow dataSetManager image tag to be overridden. */}} +{{- define "hwameistor.dataSetManagerImageTag" -}} + {{- default .Values.global.hwameistorVersion .Values.dataSetManager.tag -}} +{{- end -}} \ No newline at end of file diff --git a/charts/hwameistor-operator/hwameistor-operator/templates/hwameistorcluster.yaml b/charts/hwameistor-operator/hwameistor-operator/templates/hwameistorcluster.yaml index 3cfe190..b3c6564 100644 --- a/charts/hwameistor-operator/hwameistor-operator/templates/hwameistorcluster.yaml +++ b/charts/hwameistor-operator/hwameistor-operator/templates/hwameistorcluster.yaml @@ -11,6 +11,7 @@ spec: - {{ . }} {{- end }} {{- end }} + datasetDefaultPoolClass: {{ $.Values.datasetDefaultPoolClass }} notClaimDisk: {{ $.Values.global.notClaimDisk }} targetNamespace: {{ $.Values.global.targetNamespace }} rbac: @@ -234,10 +235,9 @@ spec: {{- end }} deployOnMaster: {{ $.Values.ha.deployOnMaster | quote }} shipper: - image: - registry: {{ $.Values.global.hwameistorImageRegistry }} - repository: {{.Values.ha.imageRepository}} - tag: {{$.Values.ha.shipperChar}} + registry: {{ $.Values.global.hwameistorImageRegistry }} + repository: {{.Values.ha.imageRepository}} + tag: {{$.Values.ha.shipperChar}} imagePullPolicy: "IfNotPresent" # drbdVersion: "v9.0.32-1" drbdVersion: {{ $.Values.ha.drbdVersion }} @@ -252,8 +252,24 @@ spec: operator: DoesNotExist - key: node-role.kubernetes.io/control-plane operator: DoesNotExist - chartVersion: "v0.4.0" + chartVersion: "v0.4.2" storageClass: - allowVolumeExpansion: true - reclaimPolicy: "Delete" - fsType: "xfs" \ No newline at end of file + allowVolumeExpansion: {{ $.Values.storageClass.allowVolumeExpansion }} + reclaimPolicy: {{ $.Values.storageClass.reclaimPolicy }} + fsType: "xfs" + + dataLoadManager: + disable: {{ $.Values.dataLoadManager.disable }} + dataLoadManagerContainer: + image: + registry: {{ $.Values.global.hwameistorImageRegistry }} + repository: {{ $.Values.dataLoadManager.imageRepository }} + tag: {{ template "hwameistor.dataLoalManagerImageTag" . }} + + dataSetManager: + disable: {{ $.Values.dataSetManager.disable }} + dataSetManagerContainer: + image: + registry: {{ $.Values.global.hwameistorImageRegistry }} + repository: {{ $.Values.dataSetManager.imageRepository }} + tag: {{ template "hwameistor.dataSetManagerImageTag" . }} \ No newline at end of file diff --git a/charts/hwameistor-operator/hwameistor-operator/values.extra.prod.yaml b/charts/hwameistor-operator/hwameistor-operator/values.extra.prod.yaml index b443ecf..963ce31 100644 --- a/charts/hwameistor-operator/hwameistor-operator/values.extra.prod.yaml +++ b/charts/hwameistor-operator/hwameistor-operator/values.extra.prod.yaml @@ -186,6 +186,25 @@ pvcAutoResizer: memory: 20Mi localDiskActionController: + resources: + limits: + cpu: 300m + memory: 300Mi + requests: + cpu: 1m + memory: 20Mi + + +dataLoadManager: + resources: + limits: + cpu: 300m + memory: 300Mi + requests: + cpu: 1m + memory: 20Mi + +dataSetManager: resources: limits: cpu: 300m diff --git a/charts/hwameistor-operator/hwameistor-operator/values.yaml b/charts/hwameistor-operator/hwameistor-operator/values.yaml index c9adf80..4e6a222 100644 --- a/charts/hwameistor-operator/hwameistor-operator/values.yaml +++ b/charts/hwameistor-operator/hwameistor-operator/values.yaml @@ -1,63 +1,35 @@ global: targetNamespace: hwameistor notClaimDisk: false + #hwameistorImageRegistry: ghcr.io hwameistorImageRegistry: ghcr.m.daocloud.io - #hwameistorImageRegistry: ghcr.m.daocloud.io - k8sImageRegistry: m.daocloud.io/registry.k8s.io - # k8sImageRegistry: m.daocloud.io/registry.k8s.io - hwameistorVersion: v0.14.1 + #k8sImageRegistry: registry.k8s.io + k8sImageRegistry: k8s.m.daocloud.io + hwameistorVersion: v0.15.0 operator: replicas: 1 imageRepository: hwameistor/operator - tag: v0.14.4 + tag: v0.15.0 localDiskManager: tolerationOnMaster: true kubeletRootDir: /var/lib/kubelet manager: imageRepository: hwameistor/local-disk-manager - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 csi: registrar: imageRepository: sig-storage/csi-node-driver-registrar tag: v2.5.0 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi controller: replicas: 1 provisioner: imageRepository: sig-storage/csi-provisioner tag: v2.0.3 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi attacher: imageRepository: sig-storage/csi-attacher tag: v3.0.1 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi localStorage: disable: false @@ -65,89 +37,33 @@ localStorage: kubeletRootDir: /var/lib/kubelet member: imageRepository: hwameistor/local-storage - tag: v0.14.1 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 hostPathSSHDir: /root/.ssh hostPathDRBDDir: /etc/drbd.d csi: registrar: imageRepository: sig-storage/csi-node-driver-registrar tag: v2.5.0 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi controller: replicas: 1 provisioner: imageRepository: sig-storage/csi-provisioner tag: v3.5.0 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi attacher: imageRepository: sig-storage/csi-attacher tag: v3.0.1 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi resizer: imageRepository: sig-storage/csi-resizer tag: v1.0.1 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi monitor: imageRepository: sig-storage/csi-external-health-monitor-controller tag: v0.8.0 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi snapshotController: imageRepository: sig-storage/snapshot-controller tag: v6.0.0 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi snapshotter: imageRepository: sig-storage/csi-snapshotter tag: v6.0.0 - resources: - limits: - cpu: 500m - memory: 500Mi - requests: - cpu: 1m - memory: 20Mi migrate: rclone: imageRepository: rclone/rclone @@ -162,27 +78,13 @@ scheduler: disable: false replicas: 1 imageRepository: hwameistor/scheduler - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 admission: disable: false replicas: 1 imageRepository: hwameistor/admission - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 # failurePolicy defines how unrecognized errors from the admission endpoint # are handled - allowed values are Ignore or Fail. Defaults to Fail. failurePolicy: "Ignore" @@ -191,27 +93,13 @@ evictor: disable: true replicas: 0 imageRepository: hwameistor/evictor - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 apiserver: disable: false replicas: 1 imageRepository: hwameistor/apiserver - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 authentication: enable: false accessId: admin @@ -221,79 +109,37 @@ exporter: disable: false replicas: 1 imageRepository: hwameistor/exporter - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 auditor: disable: false replicas: 1 imageRepository: hwameistor/auditor - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 failoverAssistant: disable: false replicas: 1 imageRepository: hwameistor/failover-assistant - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 pvcAutoResizer: disable: false replicas: 1 imageRepository: hwameistor/pvc-autoresizer - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 localDiskActionController: disable: false replicas: 1 imageRepository: hwameistor/local-disk-action-controller - tag: v0.14.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.15.0 ui: disable: false replicas: 1 imageRepository: hwameistor/hwameistor-ui - tag: v0.15.1 - resources: - limits: - cpu: 300m - memory: 300Mi - requests: - cpu: 1m - memory: 20Mi + tag: v0.16.1 ha: disable: false @@ -301,7 +147,7 @@ ha: deployOnMaster: "yes" imageRepository: hwameistor/drbd9-shipper drbdVersion: v9.0.32-1 - shipperChar: v0.4.0 + shipperChar: v0.4.2 drbdRhel7: imageRepository: hwameistor/drbd9-rhel7 @@ -321,6 +167,31 @@ drbdBionic: drbdFocal: imageRepository: hwameistor/drbd9-focal +dataLoadManager: + disable: true + tolerationOnMaster: true + imageRepository: hwameistor/dataload-manager + tag: v0.0.1 + +dataSetManager: + disable: true + tolerationOnMaster: true + imageRepository: hwameistor/dataset-manager + tag: v0.0.1 + +dataLoadInit: + imageRepository: hwameistor/dataload-init + tag: v0.0.1 + +# StorageClass Settings +storageClass: + # If allowed, volume can be expanded by modify pvc related field + allowVolumeExpansion: true + reclaimPolicy: Retain + +#storageClassReclaimPolicy: Retain > Delete +#datasetDefaultPoolClass: NVMe > SSD > HDD + # diskReserve example # diskReserve: # - nodeName: node1 @@ -340,4 +211,4 @@ drbdFocal: preHookJob: imageRepository: dtzar/helm-kubectl - tag: 3.9 \ No newline at end of file + tag: 3.9