Eduardo Alberti 2948efeb39 Kubernetes Power Manager Helm Charts upversion to v2.5.0
This change aims to update the patch applied to the upstream Helm Chart,
adapting it to the new version of Kubernetes Power Manager (v2.5.0).

Story: 2011069
Task: 50276

Test Plan
PASS: AIO-SX: check if the application can be successfully
      installed.
PASS: AIO-SX: check if the application can be successfully
      uninstalled.
PASS: check if installed CRDs are correctly created.

Change-Id: Idc2f22ccbca27a47f6b19ed3f5a3faffe111bf47
Signed-off-by: Eduardo Alberti <eduardo.alberti@windriver.com>
2024-06-07 08:23:18 -03:00

375 lines
13 KiB
Diff

From 0899aef4abd265b67e947ef9fc133595c7eaa480 Mon Sep 17 00:00:00 2001
From: Eduardo Alberti <eduardo.alberti@windriver.com>
Date: Wed, 5 Jun 2024 08:13:10 -0300
Subject: [PATCH] Add STX Power Profile Node Customization
This patch adds resources to allow power profile customization to each
node. It also adapts the templates for `helm lint` to pass in the
current helm version.
Author: Guilherme Santos <guilherme.santos@windriver.com>
Co-author: Eduardo Alberti <eduardo.alberti@windriver.com>
Signed-off-by: Guilherme Santos <guilherme.santos@windriver.com>
---
.../templates/template.yaml | 36 +++++----
helm/kubernetes-power-manager/values.yaml | 23 +++++-
.../templates/_cstate.tpl | 13 ++++
.../templates/_deployment.tpl | 33 ++++++++-
.../templates/_new-shared-power-profile.tpl | 32 +++++---
.../templates/_power-config.tpl | 5 +-
.../_power-node-agent-ds-override.tpl | 73 +++++++++++++++++++
.../templates/_power-workload.tpl | 20 +++++
8 files changed, 203 insertions(+), 32 deletions(-)
create mode 100644 helm/manager-chart-library/templates/_cstate.tpl
create mode 100644 helm/manager-chart-library/templates/_power-node-agent-ds-override.tpl
create mode 100644 helm/manager-chart-library/templates/_power-workload.tpl
diff --git a/helm/kubernetes-power-manager/templates/template.yaml b/helm/kubernetes-power-manager/templates/template.yaml
index bb78de4..2b3c980 100644
--- a/helm/kubernetes-power-manager/templates/template.yaml
+++ b/helm/kubernetes-power-manager/templates/template.yaml
@@ -1,28 +1,32 @@
-{{- include "manager-chart-library.namespace" . }}
+{{ include "manager-chart-library.operatorserviceaccount" . }}
---
-{{- include "manager-chart-library.operatorserviceaccount" . }}
+{{ include "manager-chart-library.agentserviceaccount" . }}
---
-{{- include "manager-chart-library.agentserviceaccount" . }}
+{{ include "manager-chart-library.operatorrole" . }}
---
-{{- include "manager-chart-library.operatorrole" . }}
+{{ include "manager-chart-library.operatorrolebinding" . }}
---
-{{- include "manager-chart-library.operatorrolebinding" . }}
+{{ include "manager-chart-library.operatorclusterrole" . }}
---
-{{- include "manager-chart-library.operatorclusterrole" . }}
+{{ include "manager-chart-library.operatorclusterrolebinding" . }}
---
-{{- include "manager-chart-library.operatorclusterrolebinding" . }}
+{{ include "manager-chart-library.agentclusterrole" . }}
---
-{{- include "manager-chart-library.agentclusterrole" . }}
+{{ include "manager-chart-library.agentclusterrolebinding" . }}
---
-{{- include "manager-chart-library.agentclusterrolebinding" . }}
+{{ include "manager-chart-library.deployment" . }}
---
-{{- include "manager-chart-library.deployment" . }}
+{{ include "manager-chart-library.powerconfig" . }}
---
-{{- include "manager-chart-library.powerconfig" . }}
+{{ include "manager-chart-library.power-node-agent-ds-override" . }}
---
-{{- if eq (semver "2.2.0" | (semver .Chart.Version).Compare) 1}}
-{{- include "manager-chart-library.new-shared-profile" . }}
-{{- else }}
-{{- include "manager-chart-library.shared-profile" . }}
-{{- end }}
+{{ include "manager-chart-library.cstate" . }}
+---
+{{ include "manager-chart-library.power-workload" . }}
+---
+{{ if eq (semver "2.2.0" | (semver .Chart.Version).Compare) 1}}
+{{ include "manager-chart-library.new-shared-profile" . }}
+{{ else }}
+{{ include "manager-chart-library.shared-profile" . }}
+{{ end }}
# above checks the version to decide which template to use
\ No newline at end of file
diff --git a/helm/kubernetes-power-manager/values.yaml b/helm/kubernetes-power-manager/values.yaml
index a93ac6e..feb340f 100644
--- a/helm/kubernetes-power-manager/values.yaml
+++ b/helm/kubernetes-power-manager/values.yaml
@@ -69,11 +69,11 @@ operator:
name: intel-power-operator
command: /manager
args: --enable-leader-election
- image: intel/power-operator:v2.5.0
+ image: docker.io/intel/power-operator:v2.5.0
name: manager
cpu:
limits: 100m
- requests: 100m
+ requests: 0
memory:
limits: 30Mi
requests: 30Mi
@@ -83,8 +83,8 @@ powerconfig:
name: power-config
namespace: intel-power
nodeselector:
- label: "feature.node.kubernetes.io/power-node"
- value: 'true'
+ label: power-management
+ value: enabled
# Values for the Shared PowerProfile
sharedprofile:
@@ -96,3 +96,18 @@ sharedprofile:
min: 1000
epp: "power"
governor: "powersave"
+
+# STX
+agent:
+ image:
+ repository: docker.io/intel/power-node-agent
+ tag: v2.5.0
+ tolerations:
+ - key: "node-role.kubernetes.io/control-plane"
+ operator: "Exists"
+ effect: "NoSchedule"
+ - key: "node-role.kubernetes.io/master"
+ operator: "Exists"
+ effect: "NoSchedule"
+imagePullSecrets:
+ - name: default-registry-key
diff --git a/helm/manager-chart-library/templates/_cstate.tpl b/helm/manager-chart-library/templates/_cstate.tpl
new file mode 100644
index 0000000..cbb5a9c
--- /dev/null
+++ b/helm/manager-chart-library/templates/_cstate.tpl
@@ -0,0 +1,13 @@
+{{- define "manager-chart-library.cstate" -}}
+{{- $top := . -}}
+{{- range $node, $cstates := .Values.cstatesProfile }}
+---
+apiVersion: power.intel.com/v1
+kind: CStates
+metadata:
+ name: {{ $node }}
+ namespace: intel-power
+spec:
+ {{- toYaml $cstates | nindent 2 }}
+{{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/helm/manager-chart-library/templates/_deployment.tpl b/helm/manager-chart-library/templates/_deployment.tpl
index cd7bed3..2adc6cb 100644
--- a/helm/manager-chart-library/templates/_deployment.tpl
+++ b/helm/manager-chart-library/templates/_deployment.tpl
@@ -25,7 +25,7 @@ spec:
imagePullPolicy: IfNotPresent
image: {{ .Values.operator.container.image }}
securityContext:
- allowPrivilegeEscalation: false
+ allowPrivilegeEscalation: true
capabilities:
drop: ["ALL"]
name: {{ .Values.operator.container.name }}
@@ -41,10 +41,41 @@ spec:
name: cgroup
mountPropagation: HostToContainer
readOnly: true
+ - mountPath: /power-manifests/power-node-agent-ds.yaml
+ name: power-node-agent-ds
+ subPath: power-node-agent-ds.yaml
+ readOnly: true
+ affinity:
+ nodeAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 1
+ preference:
+ matchExpressions:
+ - key: "node-role.kubernetes.io/master"
+ operator: Exists
+ - weight: 1
+ preference:
+ matchExpressions:
+ - key: "node-role.kubernetes.io/control-plane"
+ operator: Exists
+{{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml . | indent 6 }}
+{{- end }}
+ tolerations:
+ - key: node-role.kubernetes.io/master
+ operator: Exists
+ effect: NoSchedule
+ - key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ effect: NoSchedule
terminationGracePeriodSeconds: 10
volumes:
- name: cgroup
hostPath:
path: /sys/fs
+ - name: power-node-agent-ds
+ configMap:
+ name: power-node-agent-ds
{{- end -}}
\ No newline at end of file
diff --git a/helm/manager-chart-library/templates/_new-shared-power-profile.tpl b/helm/manager-chart-library/templates/_new-shared-power-profile.tpl
index 263a965..7e340a6 100644
--- a/helm/manager-chart-library/templates/_new-shared-power-profile.tpl
+++ b/helm/manager-chart-library/templates/_new-shared-power-profile.tpl
@@ -1,14 +1,28 @@
{{- define "manager-chart-library.new-shared-profile" -}}
+{{- $top := . -}}
+{{- range $node, $powerprofile := .Values.sharedProfile }}
+---
apiVersion: power.intel.com/v1
kind: PowerProfile
metadata:
- name: {{ .Values.sharedprofile.name }}
- namespace: {{ .Values.sharedprofile.namespace }}
+ name: shared-{{ $node }}
+ namespace: intel-power
spec:
- name: {{ .Values.sharedprofile.spec.name }}
- max: {{ .Values.sharedprofile.spec.max }}
- min: {{ .Values.sharedprofile.spec.min }}
- epp: {{ .Values.sharedprofile.spec.epp }}
- governor: {{ .Values.sharedprofile.spec.governor }}
- shared: true
-{{- end -}}
\ No newline at end of file
+ name: shared-{{ $node }}
+{{- if $powerprofile.shared }}
+ shared: {{ $powerprofile.shared }}
+{{- end -}}
+{{- if $powerprofile.epp }}
+ epp: {{ $powerprofile.epp }}
+{{- end -}}
+{{- if $powerprofile.max }}
+ max: {{ $powerprofile.max }}
+{{- end -}}
+{{- if $powerprofile.min }}
+ min: {{ $powerprofile.min }}
+{{- end -}}
+{{- if $powerprofile.governor }}
+ governor: {{ $powerprofile.governor }}
+{{- end -}}
+{{- end -}}
+{{- end -}}
diff --git a/helm/manager-chart-library/templates/_power-config.tpl b/helm/manager-chart-library/templates/_power-config.tpl
index 3a31593..508d874 100644
--- a/helm/manager-chart-library/templates/_power-config.tpl
+++ b/helm/manager-chart-library/templates/_power-config.tpl
@@ -6,10 +6,11 @@ metadata:
namespace: {{ .Values.powerconfig.namespace }}
spec:
powerNodeSelector:
- {{ .Values.powerconfig.nodeselector.label }}: "{{ .Values.powerconfig.nodeselector.value }}"
+ "{{ .Values.powerconfig.nodeselector.label }}": "{{ .Values.powerconfig.nodeselector.value }}"
powerProfiles:
- "performance"
- "balance-performance"
- "balance-power"
-
+ customDevices:
+ - "windriver.com/isolcpus"
{{- end -}}
diff --git a/helm/manager-chart-library/templates/_power-node-agent-ds-override.tpl b/helm/manager-chart-library/templates/_power-node-agent-ds-override.tpl
new file mode 100644
index 0000000..0090be8
--- /dev/null
+++ b/helm/manager-chart-library/templates/_power-node-agent-ds-override.tpl
@@ -0,0 +1,73 @@
+{{- define "manager-chart-library.power-node-agent-ds-override" -}}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: power-node-agent-ds
+ namespace: intel-power
+data:
+ power-node-agent-ds.yaml: |
+ apiVersion: apps/v1
+ kind: DaemonSet
+ metadata:
+ name: power-node-agent
+ namespace: intel-power
+ spec:
+ selector:
+ matchLabels:
+ name: power-node-agent-pod
+ template:
+ metadata:
+ namespace: intel-power
+ labels:
+ name: power-node-agent-pod
+ spec:
+ serviceAccountName: intel-power-node-agent
+{{- with .Values.agent.tolerations }}
+ tolerations:
+{{ toYaml . | indent 12 }}
+{{- end }}
+{{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+{{ toYaml . | indent 12 }}
+{{- end }}
+ containers:
+ - image: {{ .Values.agent.image.repository }}:{{ .Values.agent.image.tag }}
+ imagePullPolicy: IfNotPresent
+ securityContext:
+ privileged: true
+ runAsUser: 0
+ name: power-node-agent
+ args: [ "--zap-log-level","3" ]
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ resources:
+ limits:
+ cpu: 100m
+ memory: 64Mi
+ requests:
+ cpu: 0
+ memory: 64Mi
+ volumeMounts:
+ - mountPath: /sys/devices/system/cpu
+ name: cpusetup
+ - mountPath: /sys/fs/cgroup
+ name: cgroup
+ readOnly: true
+ - mountPath: /var/lib/kubelet/pod-resources/
+ name: kubesock
+ readOnly: true
+ volumes:
+ - name: cpusetup
+ hostPath:
+ path: /sys/devices/system/cpu
+ - name: cgroup
+ hostPath:
+ path: /sys/fs/cgroup
+ - name: kubesock
+ hostPath:
+ path: /var/lib/kubelet/pod-resources
+
+{{- end -}}
diff --git a/helm/manager-chart-library/templates/_power-workload.tpl b/helm/manager-chart-library/templates/_power-workload.tpl
new file mode 100644
index 0000000..91db65f
--- /dev/null
+++ b/helm/manager-chart-library/templates/_power-workload.tpl
@@ -0,0 +1,20 @@
+{{- define "manager-chart-library.power-workload" -}}
+{{- $top := . -}}
+{{- range $node, $powerworkload := .Values.sharedProfile }}
+---
+apiVersion: power.intel.com/v1
+kind: PowerWorkload
+metadata:
+ name: shared-{{ $node }}-workload
+ namespace: intel-power
+spec:
+ name: shared-{{ $node }}-workload
+ allCores: true
+ powerNodeSelector:
+ kubernetes.io/hostname: {{ $node }}
+ powerProfile: shared-{{ $node }}
+ reservedCPUs:
+ - cores: {{ $powerworkload.reservedCPUs }}
+ powerProfile: {{ $powerworkload.reservedProfile }}
+{{- end -}}
+{{- end -}}
--
2.34.1