From 6f9d24b6e7fea666ff61dd3b4991e9c149548d50 Mon Sep 17 00:00:00 2001 From: Alex Lebens Date: Tue, 3 Mar 2026 16:04:57 -0600 Subject: [PATCH] feat: add valkey chart --- charts/generic-device-plugin/README.md | 4 +- charts/postgres-cluster/README.md | 6 +- charts/valkey/Chart.lock | 6 ++ charts/valkey/Chart.yaml | 21 +++++++ charts/valkey/README.md | 73 +++++++++++++++++++++++++ charts/valkey/values.yaml | 76 ++++++++++++++++++++++++++ 6 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 charts/valkey/Chart.lock create mode 100644 charts/valkey/Chart.yaml create mode 100644 charts/valkey/README.md create mode 100644 charts/valkey/values.yaml diff --git a/charts/generic-device-plugin/README.md b/charts/generic-device-plugin/README.md index b2f1a06..771cce3 100644 --- a/charts/generic-device-plugin/README.md +++ b/charts/generic-device-plugin/README.md @@ -1,6 +1,6 @@ # generic-device-plugin -![Version: 0.20.17](https://img.shields.io/badge/Version-0.20.17-informational?style=flat-square) ![AppVersion: 0.20.17](https://img.shields.io/badge/AppVersion-0.20.17-informational?style=flat-square) +![Version: 0.20.20](https://img.shields.io/badge/Version-0.20.20-informational?style=flat-square) ![AppVersion: 0.20.17](https://img.shields.io/badge/AppVersion-0.20.17-informational?style=flat-square) Generic Device Plugin @@ -28,7 +28,7 @@ Generic Device Plugin | config | object | `{"data":"devices:\n - name: serial\n groups:\n - paths:\n - path: /dev/ttyUSB*\n - paths:\n - path: /dev/ttyACM*\n - paths:\n - path: /dev/tty.usb*\n - paths:\n - path: /dev/cu.*\n - paths:\n - path: /dev/cuaU*\n - paths:\n - path: /dev/rfcomm*\n - name: video\n groups:\n - paths:\n - path: /dev/video0\n - name: fuse\n groups:\n - count: 10\n paths:\n - path: /dev/fuse\n - name: audio\n groups:\n - count: 10\n paths:\n - path: /dev/snd\n - name: capture\n groups:\n - paths:\n - path: /dev/snd/controlC0\n - path: /dev/snd/pcmC0D0c\n - paths:\n - path: /dev/snd/controlC1\n mountPath: /dev/snd/controlC0\n - path: /dev/snd/pcmC1D0c\n mountPath: /dev/snd/pcmC0D0c\n - paths:\n - path: /dev/snd/controlC2\n mountPath: /dev/snd/controlC0\n - path: /dev/snd/pcmC2D0c\n mountPath: /dev/snd/pcmC0D0c\n - paths:\n - path: /dev/snd/controlC3\n mountPath: /dev/snd/controlC0\n - path: /dev/snd/pcmC3D0c\n mountPath: /dev/snd/pcmC0D0c\n","enabled":true}` | Config map | | config.data | string | See [values.yaml](./values.yaml) | generic-device-plugin config file [[ref]](https://github.com/squat/generic-device-plugin#usage) | | deviceDomain | string | `"devic.es"` | Domain used by devices for identifcation | -| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/squat/generic-device-plugin","tag":"latest@sha256:8e74085edef446b02116d0e851a7a5576b4681e07fe5be75c4e5f6791a8ad0f7"}` | Default image | +| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/squat/generic-device-plugin","tag":"latest@sha256:78127620563730680371e2915d48d69dc3ab513f12c742ca6bcacd156051fd4b"}` | Default image | | name | string | `"generic-device-plugin"` | Name override of release | | resources | object | `{"requests":{"cpu":"50m","memory":"10Mi"}}` | Default resources | | service | object | `{"listenPort":8080}` | Service port | diff --git a/charts/postgres-cluster/README.md b/charts/postgres-cluster/README.md index dfbb21a..90790ce 100644 --- a/charts/postgres-cluster/README.md +++ b/charts/postgres-cluster/README.md @@ -1,6 +1,6 @@ # postgres-cluster -![Version: 7.6.0](https://img.shields.io/badge/Version-7.6.0-informational?style=flat-square) ![AppVersion: v1.28.1](https://img.shields.io/badge/AppVersion-v1.28.1-informational?style=flat-square) +![Version: 7.8.0](https://img.shields.io/badge/Version-7.8.0-informational?style=flat-square) ![AppVersion: v1.28.1](https://img.shields.io/badge/AppVersion-v1.28.1-informational?style=flat-square) Cloudnative-pg Cluster @@ -24,12 +24,12 @@ Cloudnative-pg Cluster | backup.method | string | `"objectStore"` | Method to create backups, options currently are only objectStore | | backup.objectStore | string | `nil` | Options for object store backups | | backup.scheduledBackups | list | `[]` | List of scheduled backups | -| cluster | object | `{"additionalLabels":{},"affinity":{"enablePodAntiAffinity":true,"topologyKey":"kubernetes.io/hostname"},"annotations":{},"certificates":{},"enablePDB":true,"enableSuperuserAccess":false,"image":{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"18.1-standard-trixie"},"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"initdb":{"database":"app","owner":"app"},"instances":3,"logLevel":"info","monitoring":{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":true,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":true,"excludeRules":["CNPGClusterLastFailedArchiveTimeWarning"]}},"postgresGID":-1,"postgresUID":-1,"postgresql":{"ldap":{},"parameters":{"hot_standby_feedback":"on","max_slot_wal_keep_size":"2000MB","shared_buffers":"128MB"},"pg_hba":[],"pg_ident":[],"shared_preload_libraries":[],"synchronous":{}},"primaryUpdateMethod":"switchover","primaryUpdateStrategy":"unsupervised","priorityClassName":"","resources":{"limits":{"hugepages-2Mi":"256Mi"},"requests":{"cpu":"100m","memory":"256Mi"}},"roles":[],"serviceAccountTemplate":{},"services":{},"storage":{"size":"10Gi","storageClass":"local-path"},"superuserSecret":"","walStorage":{"enabled":true,"size":"2Gi","storageClass":"local-path"}}` | Cluster settings | +| cluster | object | `{"additionalLabels":{},"affinity":{"enablePodAntiAffinity":true,"topologyKey":"kubernetes.io/hostname"},"annotations":{},"certificates":{},"enablePDB":true,"enableSuperuserAccess":false,"image":{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"18.3-standard-trixie"},"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"initdb":{"database":"app","owner":"app"},"instances":3,"logLevel":"info","monitoring":{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":true,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":true,"excludeRules":["CNPGClusterLastFailedArchiveTimeWarning"]}},"postgresGID":-1,"postgresUID":-1,"postgresql":{"ldap":{},"parameters":{"hot_standby_feedback":"on","max_slot_wal_keep_size":"2000MB","shared_buffers":"128MB"},"pg_hba":[],"pg_ident":[],"shared_preload_libraries":[],"synchronous":{}},"primaryUpdateMethod":"switchover","primaryUpdateStrategy":"unsupervised","priorityClassName":"","resources":{"limits":{"hugepages-2Mi":"256Mi"},"requests":{"cpu":"100m","memory":"256Mi"}},"roles":[],"serviceAccountTemplate":{},"services":{},"storage":{"size":"10Gi","storageClass":"local-path"},"superuserSecret":"","walStorage":{"enabled":true,"size":"2Gi","storageClass":"local-path"}}` | Cluster settings | | cluster.affinity | object | `{"enablePodAntiAffinity":true,"topologyKey":"kubernetes.io/hostname"}` | Affinity/Anti-affinity rules for Pods. See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-AffinityConfiguration | | cluster.certificates | object | `{}` | The configuration for the CA and related certificates. See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-CertificatesConfiguration | | cluster.enablePDB | bool | `true` | Allow to disable PDB, mainly useful for upgrade of single-instance clusters or development purposes See: https://cloudnative-pg.io/documentation/current/kubernetes_upgrade/#pod-disruption-budgets | | cluster.enableSuperuserAccess | bool | `false` | When this option is enabled, the operator will use the SuperuserSecret to update the postgres user password. If the secret is not present, the operator will automatically create one. When this option is disabled, the operator will ignore the SuperuserSecret content, delete it when automatically created, and then blank the password of the postgres user by setting it to NULL. | -| cluster.image | object | `{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"18.1-standard-trixie"}` | Default image | +| cluster.image | object | `{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"18.3-standard-trixie"}` | Default image | | cluster.imagePullPolicy | string | `"IfNotPresent"` | Image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images | | cluster.imagePullSecrets | list | `[]` | The list of pull secrets to be used to pull the images. See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-LocalObjectReference | | cluster.initdb | object | `{"database":"app","owner":"app"}` | Bootstrap is the configuration of the bootstrap process when initdb is used. See: https://cloudnative-pg.io/documentation/current/bootstrap/ See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-bootstrapinitdb | diff --git a/charts/valkey/Chart.lock b/charts/valkey/Chart.lock new file mode 100644 index 0000000..ec527f3 --- /dev/null +++ b/charts/valkey/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: valkey + repository: https://valkey.io/valkey-helm/ + version: 0.9.3 +digest: sha256:705fdaa1d456e55dd1a8aba698e17b2309a336f614cba8fd3cdb7e072b323b36 +generated: "2026-03-03T16:02:43.407652-06:00" diff --git a/charts/valkey/Chart.yaml b/charts/valkey/Chart.yaml new file mode 100644 index 0000000..ec1b177 --- /dev/null +++ b/charts/valkey/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v2 +name: valkey +version: 0.1.0 +description: Valkey chart with preconfigured settings +keywords: + - valkey + - redis + - storage + - kubernetes +sources: + - https://github.com/valkey-io/valkey + - https://github.com/valkey-io/valkey-helm +maintainers: + - name: alexlebens +dependencies: + - name: valkey + repository: https://valkey.io/valkey-helm/ + version: 0.9.3 +icon: https://dyltqmyl993wv.cloudfront.net/assets/stacks/valkey/img/valkey-stack-220x234.png +# renovate: datasource=github-releases depName=valkey-io/valkey +appVersion: 9.0.3 diff --git a/charts/valkey/README.md b/charts/valkey/README.md new file mode 100644 index 0000000..81c2928 --- /dev/null +++ b/charts/valkey/README.md @@ -0,0 +1,73 @@ +# valkey + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![AppVersion: 9.0.3](https://img.shields.io/badge/AppVersion-9.0.3-informational?style=flat-square) + +Valkey chart with preconfigured settings + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| alexlebens | | | + +## Source Code + +* +* + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://valkey.io/valkey-helm/ | valkey | 0.9.3 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| valkey.dataStorage.accessModes[0] | string | `"ReadWriteOnce"` | | +| valkey.dataStorage.className | string | `"ceph-block"` | | +| valkey.dataStorage.enabled | bool | `true` | | +| valkey.dataStorage.keepPvc | bool | `false` | | +| valkey.dataStorage.requestedSize | string | `"1Gi"` | | +| valkey.image.registry | string | `"docker.io"` | | +| valkey.image.repository | string | `"valkey/valkey"` | | +| valkey.image.tag | string | `"9.0.3"` | | +| valkey.metrics.enabled | bool | `true` | | +| valkey.metrics.exporter.image.registry | string | `"ghcr.io"` | | +| valkey.metrics.exporter.image.repository | string | `"oliver006/redis_exporter"` | | +| valkey.metrics.exporter.image.tag | string | `"v1.79.0"` | | +| valkey.metrics.exporter.resources.requests.cpu | string | `"10m"` | | +| valkey.metrics.exporter.resources.requests.memory | string | `"64M"` | | +| valkey.metrics.podMonitor.enabled | bool | `true` | | +| valkey.metrics.prometheusRule.enabled | bool | `true` | | +| valkey.metrics.prometheusRule.rules[0].alert | string | `"ValkeyDown"` | | +| valkey.metrics.prometheusRule.rules[0].annotations.description | string | `"Valkey instance {{ \"{{ $labels.instance }}\" }} is down."` | | +| valkey.metrics.prometheusRule.rules[0].annotations.summary | string | `"Valkey instance {{ \"{{ $labels.instance }}\" }} down"` | | +| valkey.metrics.prometheusRule.rules[0].expr | string | `"redis_up{service=\"{{ include \"valkey.fullname\" . }}-metrics\"} == 0\n"` | | +| valkey.metrics.prometheusRule.rules[0].for | string | `"2m"` | | +| valkey.metrics.prometheusRule.rules[0].labels.severity | string | `"error"` | | +| valkey.metrics.prometheusRule.rules[1].alert | string | `"ValkeyMemoryHigh"` | | +| valkey.metrics.prometheusRule.rules[1].annotations.description | string | `"Valkey instance {{ \"{{ $labels.instance }}\" }} is using {{ \"{{ $value }}\" }}% of its available memory.\n"` | | +| valkey.metrics.prometheusRule.rules[1].annotations.summary | string | `"Valkey instance {{ \"{{ $labels.instance }}\" }} is using too much memory"` | | +| valkey.metrics.prometheusRule.rules[1].expr | string | `"redis_memory_used_bytes{service=\"{{ include \"valkey.fullname\" . }}-metrics\"} * 100\n/\nredis_memory_max_bytes{service=\"{{ include \"valkey.fullname\" . }}-metrics\"}\n> 90 <= 100\n"` | | +| valkey.metrics.prometheusRule.rules[1].for | string | `"2m"` | | +| valkey.metrics.prometheusRule.rules[1].labels.severity | string | `"error"` | | +| valkey.metrics.prometheusRule.rules[2].alert | string | `"ValkeyKeyEviction"` | | +| valkey.metrics.prometheusRule.rules[2].annotations.description | string | `"Valkey instance {{ \"{{ $labels.instance }}\" }} has evicted {{ \"{{ $value }}\" }} keys in the last 5 minutes.\n"` | | +| valkey.metrics.prometheusRule.rules[2].annotations.summary | string | `"Valkey instance {{ \"{{ $labels.instance }}\" }} has evicted keys"` | | +| valkey.metrics.prometheusRule.rules[2].expr | string | `"increase(redis_evicted_keys_total{service=\"{{ include \"valkey.fullname\" . }}-metrics\"}[5m]) > 0\n"` | | +| valkey.metrics.prometheusRule.rules[2].for | string | `"1s"` | | +| valkey.metrics.prometheusRule.rules[2].labels.severity | string | `"error"` | | +| valkey.metrics.serviceMonitor.enabled | bool | `true` | | +| valkey.replica.enabled | bool | `true` | | +| valkey.replica.persistence.accessModes[0] | string | `"ReadWriteOnce"` | | +| valkey.replica.persistence.size | string | `"1Gi"` | | +| valkey.replica.persistence.storageClass | string | `"ceph-block"` | | +| valkey.replica.replicas | int | `2` | | +| valkey.resources.requests.cpu | string | `"10m"` | | +| valkey.resources.requests.memory | string | `"128Mi"` | | +| valkey.serviceAccount.create | bool | `true` | | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/valkey/values.yaml b/charts/valkey/values.yaml new file mode 100644 index 0000000..363e729 --- /dev/null +++ b/charts/valkey/values.yaml @@ -0,0 +1,76 @@ +valkey: + image: + registry: docker.io + repository: valkey/valkey + tag: 9.0.3 + serviceAccount: + create: true + resources: + requests: + cpu: 10m + memory: 128Mi + dataStorage: + enabled: true + requestedSize: 1Gi + className: ceph-block + accessModes: + - ReadWriteOnce + keepPvc: false + replica: + enabled: true + replicas: 2 + persistence: + size: 1Gi + storageClass: ceph-block + accessModes: + - ReadWriteOnce + metrics: + enabled: true + exporter: + image: + registry: ghcr.io + repository: oliver006/redis_exporter + tag: v1.79.0 + resources: + requests: + cpu: 10m + memory: 64M + serviceMonitor: + enabled: true + podMonitor: + enabled: true + prometheusRule: + enabled: true + rules: + - alert: ValkeyDown + annotations: + summary: Valkey instance {{ "{{ $labels.instance }}" }} down + description: Valkey instance {{ "{{ $labels.instance }}" }} is down. + expr: | + redis_up{service="{{ include "valkey.fullname" . }}-metrics"} == 0 + for: 2m + labels: + severity: error + - alert: ValkeyMemoryHigh + annotations: + summary: Valkey instance {{ "{{ $labels.instance }}" }} is using too much memory + description: | + Valkey instance {{ "{{ $labels.instance }}" }} is using {{ "{{ $value }}" }}% of its available memory. + expr: | + redis_memory_used_bytes{service="{{ include "valkey.fullname" . }}-metrics"} * 100 + / + redis_memory_max_bytes{service="{{ include "valkey.fullname" . }}-metrics"} + > 90 <= 100 + for: 2m + labels: + severity: error + - alert: ValkeyKeyEviction + annotations: + summary: Valkey instance {{ "{{ $labels.instance }}" }} has evicted keys + description: | + Valkey instance {{ "{{ $labels.instance }}" }} has evicted {{ "{{ $value }}" }} keys in the last 5 minutes. + expr: | + increase(redis_evicted_keys_total{service="{{ include "valkey.fullname" . }}-metrics"}[5m]) > 0 + for: 1s + labels: + severity: error