fix(hami): clean up leftover hami-dra references and harden defaults

Remove broken hami-dra subchart dependency from vendored chart
(Chart.yaml, Chart.lock, values.yaml) and strip DRA condition guards
from all templates since the subchart was already deleted. Override
devicePlugin updateStrategy to OnDelete to prevent destructive rolling
updates of GPU workloads. Align gpu-operator template with project
pattern (unconditional values emission). Add nodeConfiguration format
documentation and test for conflicting valuesOverride scenario.

Signed-off-by: Arsolitt <arsolitt@gmail.com>
This commit is contained in:
Arsolitt 2026-04-24 14:00:48 +03:00
parent ab7deb2b05
commit 2734dc0bcb
No known key found for this signature in database
GPG key ID: 4D8302CE6A9247C4
33 changed files with 55 additions and 92 deletions

View file

@ -1,5 +1,5 @@
{{- define "cozystack.defaultGpuOperatorValues" -}}
{{- if and (hasKey .Values.addons "hami") .Values.addons.hami.enabled }}
{{- if .Values.addons.hami.enabled }}
gpu-operator:
devicePlugin:
enabled: false
@ -40,10 +40,8 @@ spec:
{{- $defaults := fromYaml (include "cozystack.defaultGpuOperatorValues" .) }}
{{- $overrides := deepCopy (default (dict) .Values.addons.gpuOperator.valuesOverride) }}
{{- $merged := mergeOverwrite (default (dict) $defaults) $overrides }}
{{- with $merged }}
values:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- if $merged }}{{ toYaml $merged | nindent 4 }}{{ end }}
dependsOn:
{{- if lookup "helm.toolkit.fluxcd.io/v2" "HelmRelease" .Release.Namespace .Release.Name }}

View file

@ -26,8 +26,9 @@ tests:
enabled: false
valuesOverride: {}
asserts:
- notExists:
- equal:
path: spec.values
value: null
- it: should allow user overrides to merge with hami defaults
set:
@ -66,6 +67,28 @@ tests:
path: spec.values.gpu-operator.devicePlugin.enabled
value: true
- it: should let user explicitly override devicePlugin.enabled to true with hami enabled
set:
addons:
gpuOperator:
enabled: true
valuesOverride:
gpu-operator:
devicePlugin:
enabled: true
driver:
enabled: false
hami:
enabled: true
valuesOverride: {}
asserts:
- equal:
path: spec.values.gpu-operator.devicePlugin.enabled
value: true
- equal:
path: spec.values.gpu-operator.driver.enabled
value: false
- it: should not render when gpuOperator is disabled
set:
addons:

View file

@ -1,6 +0,0 @@
dependencies:
- name: hami-dra
repository: https://project-hami.github.io/HAMi-DRA/
version: 0.1.0
digest: sha256:374551539570bcee82c1c4dea93eac59e6f410b6d5967d188efd630e203d43bb
generated: "2026-04-17T04:06:47.689117678Z"

View file

@ -1,10 +1,6 @@
apiVersion: v2
appVersion: 2.8.1
dependencies:
- condition: dra.enabled
name: hami-dra
repository: https://project-hami.github.io/HAMi-DRA/
version: 0.1.0
dependencies: []
description: Heterogeneous AI Computing Virtualization Middleware
keywords:
- vgpu

View file

@ -1,4 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.devicePlugin.nodeConfiguration.externalConfigName) (not .Values.dra.enabled) -}}
{{- if and .Values.devicePlugin.enabled (not .Values.devicePlugin.nodeConfiguration.externalConfigName) -}}
apiVersion: v1
kind: ConfigMap
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.dra.enabled) }}
{{- if .Values.devicePlugin.enabled }}
apiVersion: apps/v1
kind: DaemonSet
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.dra.enabled) -}}
{{- if .Values.devicePlugin.enabled -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.dra.enabled) -}}
{{- if .Values.devicePlugin.enabled -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.dra.enabled) -}}
{{- if .Values.devicePlugin.enabled -}}
apiVersion: v1
kind: Service
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.dra.enabled) -}}
{{- if .Values.devicePlugin.enabled -}}
apiVersion: v1
kind: ServiceAccount
metadata:

View file

@ -1,5 +1,4 @@
{{- if and .Values.devicePlugin.enabled (not .Values.dra.enabled) -}}
{{- if and .Values.devicePlugin.createRuntimeClass .Values.devicePlugin.runtimeClassName }}
{{- if and .Values.devicePlugin.enabled .Values.devicePlugin.createRuntimeClass .Values.devicePlugin.runtimeClassName -}}
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
@ -7,5 +6,4 @@ metadata:
annotations:
helm.sh/hook: pre-install,pre-upgrade
handler: nvidia
{{- end }}
{{- end -}}

View file

@ -1,4 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if .Values.scheduler.admissionWebhook.enabled -}}
{{- if .Values.scheduler.certManager.enabled }}
apiVersion: cert-manager.io/v1
kind: Certificate

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
@ -33,4 +32,3 @@ rules:
resources: ["nodes"]
verbs: ["get", "update", "list", "patch"]
{{- end -}}
{{- end }}

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
@ -45,5 +44,4 @@ roleRef:
subjects:
- kind: ServiceAccount
name: {{ include "hami-vgpu.scheduler" . }}
namespace: {{ include "hami-vgpu.namespace" . }}
{{- end }}
namespace: {{ include "hami-vgpu.namespace" . }}

View file

@ -1,4 +1,4 @@
{{- if and .Values.scheduler.kubeScheduler.enabled (not .Values.dra.enabled) -}}
{{- if .Values.scheduler.kubeScheduler.enabled -}}
apiVersion: v1
kind: ConfigMap
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.scheduler.kubeScheduler.enabled (not .Values.dra.enabled) -}}
{{- if .Values.scheduler.kubeScheduler.enabled -}}
apiVersion: v1
kind: ConfigMap
metadata:

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: apps/v1
kind: Deployment
metadata:
@ -223,5 +222,4 @@ spec:
{{- end }}
{{- if .Values.scheduler.nodeName }}
nodeName: {{ .Values.scheduler.nodeName }}
{{- end }}
{{- end }}
{{- end }}

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: v1
kind: ConfigMap
metadata:
@ -406,5 +405,4 @@ data:
memory: 12288
aiCore: 4
aiCPU: 4
{{ end }}
{{- end }}
{{ end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
@ -27,4 +26,3 @@ rules:
- {{ include "hami-vgpu.fullname" . }}-admission
{{- end }}
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
@ -19,4 +18,3 @@ subjects:
name: {{ include "hami-vgpu.fullname" . }}-admission
namespace: {{ include "hami-vgpu.namespace" . }}
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
apiVersion: batch/v1
kind: Job
metadata:
@ -67,4 +66,3 @@ spec:
runAsNonRoot: true
runAsUser: {{ .Values.scheduler.patch.runAsUser }}
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
apiVersion: batch/v1
kind: Job
metadata:
@ -62,4 +61,3 @@ spec:
runAsNonRoot: true
runAsUser: {{ .Values.scheduler.patch.runAsUser }}
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
{{- if .Values.podSecurityPolicy.enabled }}
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
@ -37,4 +36,3 @@ spec:
- downwardAPI
{{- end }}
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
@ -20,4 +19,3 @@ rules:
- get
- create
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
@ -20,4 +19,3 @@ subjects:
name: {{ include "hami-vgpu.fullname" . }}-admission
namespace: {{ include "hami-vgpu.namespace" . }}
{{- end }}
{{- end }}

View file

@ -1,5 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) }}
{{- if and (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
{{- if and .Values.scheduler.admissionWebhook.enabled (.Values.scheduler.patch.enabled) (not .Values.scheduler.certManager.enabled) }}
apiVersion: v1
kind: ServiceAccount
metadata:
@ -12,4 +11,3 @@ metadata:
{{- include "hami-vgpu.labels" . | nindent 4 }}
app.kubernetes.io/component: admission-webhook
{{- end }}
{{- end }}

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
@ -10,5 +9,4 @@ metadata:
rules:
- apiGroups: ["coordination.k8s.io"]
resources: ["leases"]
verbs: ["create", "list", "watch", "get", "update", "patch"]
{{- end }}
verbs: ["create", "list", "watch", "get", "update", "patch"]

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
@ -30,4 +29,3 @@ subjects:
name: {{ include "hami-vgpu.mock-device-plugin" . }}
namespace: {{ include "hami-vgpu.namespace" . }}
{{- end -}}
{{- end }}

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled }}
apiVersion: v1
kind: Service
metadata:
@ -32,5 +31,4 @@ spec:
protocol: TCP
selector:
app.kubernetes.io/component: hami-scheduler
{{- include "hami-vgpu.selectorLabels" . | nindent 4 }}
{{- end }}
{{- include "hami-vgpu.selectorLabels" . | nindent 4 }}

View file

@ -1,4 +1,3 @@
{{- if not .Values.dra.enabled -}}
apiVersion: v1
kind: ServiceAccount
metadata:
@ -15,4 +14,3 @@ metadata:
name: {{ include "hami-vgpu.mock-device-plugin" . }}
namespace: {{ include "hami-vgpu.namespace" . }}
{{- end -}}
{{- end }}

View file

@ -1,4 +1,4 @@
{{- if and .Values.scheduler.admissionWebhook.enabled (not .Values.dra.enabled) -}}
{{- if .Values.scheduler.admissionWebhook.enabled -}}
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:

View file

@ -392,24 +392,6 @@ mockDevicePlugin:
## - myRegistryKeySecretName
##
pullSecrets: []
# If this option is enabled, the DRA will be installed and the scheduler extender will not be installed.
dra:
enabled: false
# Configuration for the hami-dra subchart, which includes DRA drivers.
# This is part of config for DRA, please refer to the DRA documentation for more details.
hami-dra:
monitor:
enabled: true
drivers:
nvidia:
enabled: true
# If you are using gpu driver on host, you need to set this to false
containerDriver: true
image:
repository: projecthami/k8s-dra-driver
tag: "v0.0.1-dev"
devices:
amd:
customresources:

View file

@ -1,6 +1,10 @@
hami:
devicePlugin:
runtimeClassName: nvidia
updateStrategy:
type: OnDelete
# See upstream charts/hami/values.yaml for nodeConfiguration format.
# Each entry: {"name": "node-name", "operatingmode": "hami-core", "devicesplitcount": N, ...}
nodeConfiguration:
config: |
{