Skip to content

Commit

Permalink
helm: add helm charts for memtierd and memory-qos
Browse files Browse the repository at this point in the history
This commit adds two new Helm charts for installing memory-qos
and memtierd NRI plugins via Helm.

Signed-off-by: Feruzjon Muyassarov <[email protected]>
  • Loading branch information
fmuyassarov committed Sep 28, 2023
1 parent 66846cb commit a42b03b
Show file tree
Hide file tree
Showing 13 changed files with 328 additions and 0 deletions.
11 changes: 11 additions & 0 deletions deployment/helm/resource-management-policies/memory-qos/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: v2
appVersion: "main"
description: |
The memory-qos NRI plugin adds two methods for controlling cgroups v2
memory.* parameters: QoS class and direct memory annotations.
name: nri-resource-policy-memory-qos
sources:
- https://github.com/containers/nri-plugins
home: https://github.com/containers/nri-plugins
type: application
version: v0.0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{{/*
Common labels
*/}}
{{- define "memory-qos.labels" -}}
app: nri-resource-policy-memory-qos
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: nri-resource-policy-memory-qos-config.default
namespace: {{ .Release.Namespace }}
labels:
{{- include "memory-qos.labels" . | nindent 4 }}
data:
config.yaml: |
classes:
- name: bronze
swaplimitratio: 0.5
- name: silver
swaplimitratio: 0.2
unifiedannotations:
- memory.swap.max
- memory.high
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
{{- include "memory-qos.labels" . | nindent 4 }}
name: nri-resource-policy-memory-qos
namespace: {{ .Release.Namespace }}
spec:
selector:
matchLabels:
{{- include "memory-qos.labels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "memory-qos.labels" . | nindent 8 }}
spec:
nodeSelector:
kubernetes.io/os: "linux"
containers:
- name: nri-memory-qos
command:
- nri-memory-qos
- --idx
- "40"
- --config
- /etc/nri/memory-qos/config.yaml
- -v
image: {{ .Values.image.name }}:{{ .Values.image.tag | default .Chart.AppVersion }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
resources:
requests:
cpu: {{ .Values.resources.cpu }}
memory: {{ .Values.resources.memory }}
volumeMounts:
- name: memory-qos-config-vol
mountPath: /etc/nri/memory-qos
- name: nrisockets
mountPath: /var/run/nri
volumes:
- name: memory-qos-config-vol
configMap:
name: nri-resource-policy-memory-qos-config.default
- name: nrisockets
hostPath:
path: /var/run/nri
type: Directory
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"$schema": "http://json-schema.org/schema#",
"required": [
"image",
"resources"
],
"properties": {
"image": {
"type": "object",
"required": [
"name",
"tag",
"pullPolicy"
],
"properties": {
"name": {
"type": "string"
},
"tag": {
"type": "string"
},
"pullPolicy": {
"type": "string",
"enum": ["Never", "Always", "IfNotPresent"]
}
}
},
"resources": {
"type": "object",
"required": [
"cpu",
"memory"
],
"properties": {
"cpu": {
"type": "integer"
},
"memory": {
"type": "integer"
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Default values for memory-qos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
---
image:
name: ghcr.io/containers/nri-plugins/nri-resource-policy-memory-qos
# tag, if defined will use the given image tag, otherwise Chart.AppVersion will be used
tag: unstable
pullPolicy: Always

resources:
cpu: 10m
memory: 100Mi
10 changes: 10 additions & 0 deletions deployment/helm/resource-management-policies/memtierd/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
appVersion: "main"
description: |
The memtierd NRI plugin enables managing workloads with Memtierd in Kubernetes.
name: nri-resource-policy-memtierd
sources:
- https://github.com/containers/nri-plugins
home: https://github.com/containers/nri-plugins
type: application
version: v0.0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{{/*
Common labels
*/}}
{{- define "memtierd.labels" -}}
app: nri-resource-policy-memtierd
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: nri-resource-policy-memtierd-config.default
namespace: {{ .Release.Namespace }}
labels:
{{- include "memtierd.labels" . | nindent 4 }}
data:
config.yaml: |
classes:
- name: swap-idle-data
allowswap: true
memtierdconfig: |
policy:
name: age
config: |
intervalms: 10000
pidwatcher:
name: cgroups
config: |
cgroups:
- $CGROUP2_ABS_PATH
swapoutms: 10000
tracker:
name: idlepage
config: |
pagesinregion: 512
maxcountperregion: 1
scanintervalms: 10000
mover:
intervalms: 20
bandwidth: 50
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
{{- include "memtierd.labels" . | nindent 4 }}
name: nri-resource-policy-memtierd
namespace: {{ .Release.Namespace }}
spec:
selector:
matchLabels:
{{- include "memtierd.labels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "memtierd.labels" . | nindent 8 }}
spec:
nodeSelector:
kubernetes.io/os: "linux"
hostPID: true
containers:
- name: nri-memtierd
command:
- nri-memtierd
- --idx
- "45"
- --config
- /etc/nri/memtierd/config.yaml
- --host-root
- /host
- -v
image: {{ .Values.image.name }}:{{ .Values.image.tag | default .Chart.AppVersion }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
resources:
requests:
cpu: {{ .Values.resources.cpu }}
memory: {{ .Values.resources.memory }}
securityContext:
privileged: true
volumeMounts:
- name: memtierd-config-vol
mountPath: /etc/nri/memtierd
- name: nrisockets
mountPath: /var/run/nri
- name: host-vol
mountPath: /host
- name: host-bitmap
mountPath: /sys/kernel/mm/page_idle/bitmap
volumes:
- name: memtierd-config-vol
configMap:
name: nri-resource-policy-memtierd-config.default
- name: nrisockets
hostPath:
path: /var/run/nri
type: Directory
- name: host-vol
hostPath:
path: /
type: Directory
- name: host-bitmap
hostPath:
path: /sys/kernel/mm/page_idle/bitmap
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"$schema": "http://json-schema.org/schema#",
"required": [
"image",
"resources"
],
"properties": {
"image": {
"type": "object",
"required": [
"name",
"tag",
"pullPolicy"
],
"properties": {
"name": {
"type": "string"
},
"tag": {
"type": "string"
},
"pullPolicy": {
"type": "string",
"enum": ["Never", "Always", "IfNotPresent"]
}
}
},
"resources": {
"type": "object",
"required": [
"cpu",
"memory"
],
"properties": {
"cpu": {
"type": "integer"
},
"memory": {
"type": "integer"
}
}
}
}
}
13 changes: 13 additions & 0 deletions deployment/helm/resource-management-policies/memtierd/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Default values for memory-qos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
---
image:
name: ghcr.io/containers/nri-plugins/nri-resource-policy-memtierd
# tag, if defined will use the given image tag, otherwise Chart.AppVersion will be used
tag: unstable
pullPolicy: Always

resources:
cpu: 250m
memory: 100Mi
20 changes: 20 additions & 0 deletions docs/resource-policy/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,26 @@ along with the default values, for the Topology-aware and Balloons plugins Helm
| `hostPort` | 8891 | metrics port to expose on the host |
| `config` | <pre><code>ReservedResources:</code><br><code> cpu: 750m</code></pre> | plugin configuration data |

#### Memtierd

| Name | Default | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `image.name` | [ghcr.io/containers/nri-plugins/nri-resource-policy-memtierd](ghcr.io/containers/nri-plugins/nri-resource-policy-balloons) | container image name |
| `image.tag` | unstable | container image tag |
| `image.pullPolicy` | Always | image pull policy |
| `resources.cpu` | 250m | cpu resources for the Pod |
| `resources.memory` | 100Mi | memory qouta for the |

#### Memory-qos

| Name | Default | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `image.name` | [ghcr.io/containers/nri-plugins/nri-resource-policy-memory-qos](ghcr.io/containers/nri-plugins/nri-resource-policy-balloons) | container image name |
| `image.tag` | unstable | container image tag |
| `image.pullPolicy` | Always | image pull policy |
| `resources.cpu` | 10m | cpu resources for the Pod |
| `resources.memory` | 100Mi | memory qouta for the |

## Manual installation

For the manual installation we will be using templating tool to generate Kubernetes YAML manifests.
Expand Down

0 comments on commit a42b03b

Please sign in to comment.