Automated Manifest Update (#4473)
This PR contains newly rendered Kubernetes manifests automatically generated by the CI workflow. Reviewed-on: #4473 Co-authored-by: gitea-bot <gitea-bot@alexlebens.net> Co-committed-by: gitea-bot <gitea-bot@alexlebens.net>
This commit was merged in pull request #4473.
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: grafana-operator-valkey-init-scripts
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
data:
|
||||
init.sh: |-
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# Default config paths
|
||||
VALKEY_CONFIG=${VALKEY_CONFIG_PATH:-/data/conf/valkey.conf}
|
||||
|
||||
LOGFILE="/data/init.log"
|
||||
DATA_DIR="/data/conf"
|
||||
|
||||
# Logging function (outputs to stderr and file)
|
||||
log() {
|
||||
echo "$(date) $1" | tee -a "$LOGFILE" >&2
|
||||
}
|
||||
|
||||
# Clean old log if requested
|
||||
if [ "${KEEP_OLD_LOGS:-false}" != "true" ]; then
|
||||
rm -f "$LOGFILE"
|
||||
fi
|
||||
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
log "Detected restart of this instance ($HOSTNAME)"
|
||||
fi
|
||||
|
||||
log "Creating configuration in $DATA_DIR..."
|
||||
mkdir -p "$DATA_DIR"
|
||||
rm -f "$VALKEY_CONFIG"
|
||||
|
||||
|
||||
# Base valkey.conf
|
||||
log "Generating base valkey.conf"
|
||||
{
|
||||
echo "port 6379"
|
||||
echo "protected-mode no"
|
||||
echo "bind * -::*"
|
||||
echo "dir /data"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
# Replica mode configuration
|
||||
log "Configuring replication mode"
|
||||
|
||||
# Use POD_INDEX from Kubernetes metadata
|
||||
POD_INDEX=${POD_INDEX:-0}
|
||||
IS_MASTER=false
|
||||
|
||||
# Check if this is pod-0 (master)
|
||||
if [ "$POD_INDEX" = "0" ]; then
|
||||
IS_MASTER=true
|
||||
log "This pod (index $POD_INDEX) is configured as MASTER"
|
||||
else
|
||||
log "This pod (index $POD_INDEX) is configured as REPLICA"
|
||||
fi
|
||||
|
||||
# Configure replica settings
|
||||
if [ "$IS_MASTER" = "false" ]; then
|
||||
MASTER_HOST="grafana-operator-valkey-0.grafana-operator-valkey-headless.grafana-operator.svc.cluster.local"
|
||||
MASTER_PORT="6379"
|
||||
|
||||
log "Configuring replica to follow master at $MASTER_HOST:$MASTER_PORT"
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "# Replica Configuration"
|
||||
echo "replicaof $MASTER_HOST $MASTER_PORT"
|
||||
echo "replica-announce-ip grafana-operator-valkey-$POD_INDEX.grafana-operator-valkey-headless.grafana-operator.svc.cluster.local"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
|
||||
# Append extra configs if present
|
||||
if [ -f /usr/local/etc/valkey/valkey.conf ]; then
|
||||
log "Appending /usr/local/etc/valkey/valkey.conf"
|
||||
cat /usr/local/etc/valkey/valkey.conf >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
if [ -d /extravalkeyconfigs ]; then
|
||||
log "Appending files in /extravalkeyconfigs/"
|
||||
cat /extravalkeyconfigs/* >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
@@ -45,10 +45,10 @@ spec:
|
||||
password: ${DB_PASSWORD}
|
||||
remote_cache:
|
||||
type: redis
|
||||
connstr: addr=redis-replication-remote-cache-master.grafana-operator:6379,pool_size=100,db=0,ssl=false
|
||||
connstr: addr=grafana-operator-valkey-remote-cache.grafana-operator:6379,pool_size=100,db=0,ssl=false
|
||||
unified_alerting:
|
||||
enabled: "true"
|
||||
ha_redis_address: redis-replication-unified-alerting-master.grafana-operator:6379
|
||||
ha_redis_address: grafana-operator-valkey-unified-alerting.grafana-operator:6379
|
||||
deployment:
|
||||
spec:
|
||||
replicas: 3
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: grafana-operator-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: podmonitor
|
||||
spec:
|
||||
podMetricsEndpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- grafana-operator
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
@@ -0,0 +1,47 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: grafana-operator-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
spec:
|
||||
groups:
|
||||
- name: grafana-operator-valkey
|
||||
rules:
|
||||
- alert: ValkeyDown
|
||||
annotations:
|
||||
description: Valkey instance {{ $labels.instance }} is down.
|
||||
summary: Valkey instance {{ $labels.instance }} down
|
||||
expr: |
|
||||
redis_up{service="grafana-operator-valkey-metrics"} == 0
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyMemoryHigh
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} is using {{ $value }}% of its available memory.
|
||||
summary: Valkey instance {{ $labels.instance }} is using too much memory
|
||||
expr: |
|
||||
redis_memory_used_bytes{service="grafana-operator-valkey-metrics"} * 100
|
||||
/
|
||||
redis_memory_max_bytes{service="grafana-operator-valkey-metrics"}
|
||||
> 90 <= 100
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyKeyEviction
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} has evicted {{ $value }} keys in the last 5 minutes.
|
||||
summary: Valkey instance {{ $labels.instance }} has evicted keys
|
||||
expr: |
|
||||
increase(redis_evicted_keys_total{service="grafana-operator-valkey-metrics"}[5m]) > 0
|
||||
for: 1s
|
||||
labels:
|
||||
severity: error
|
||||
@@ -1,36 +0,0 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-remote-cache
|
||||
namespace: grafana-operator
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-remote-cache-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-remote-cache
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/part-of: grafana-operator
|
||||
spec:
|
||||
clusterSize: 1
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
runAsUser: 1000
|
||||
kubernetesConfig:
|
||||
image: "quay.io/opstree/redis:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: ceph-block
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: "quay.io/opstree/redis-exporter:v1.80.2"
|
||||
@@ -1,44 +0,0 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-unified-alerting
|
||||
namespace: grafana-operator
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-unified-alerting-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-unified-alerting
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/part-of: grafana-operator
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
runAsUser: 1000
|
||||
kubernetesConfig:
|
||||
image: "quay.io/opstree/redis:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: ceph-block
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: "quay.io/opstree/redis-exporter:v1.80.2"
|
||||
sentinel:
|
||||
image: "quay.io/opstree/redis-sentinel:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
size: 3
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: grafana-operator-valkey-headless
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: headless
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
publishNotReadyAddresses: true
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: grafana-operator-valkey-metrics
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: metrics
|
||||
app.kubernetes.io/part-of: valkey
|
||||
annotations:
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9121
|
||||
protocol: TCP
|
||||
targetPort: metrics
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: grafana-operator-valkey-read
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: read
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: grafana-operator-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: primary
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
name: tcp
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
statefulset.kubernetes.io/pod-name: grafana-operator-valkey-0
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: grafana-operator-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
automountServiceAccountToken: false
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: grafana-operator-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: service-monitor
|
||||
spec:
|
||||
endpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- grafana-operator
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/component: metrics
|
||||
@@ -1,22 +0,0 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-remote-cache
|
||||
namespace: grafana-operator
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-remote-cache-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-remote-cache
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/part-of: grafana-operator
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-replication-remote-cache
|
||||
redis_setup_type: replication
|
||||
role: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
@@ -1,22 +0,0 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-unified-alerting
|
||||
namespace: grafana-operator
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-unified-alerting-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-unified-alerting
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/part-of: grafana-operator
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-replication-unified-alerting
|
||||
redis_setup_type: replication
|
||||
role: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
@@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: grafana-operator-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
spec:
|
||||
serviceName: grafana-operator-valkey-headless
|
||||
replicas: 3
|
||||
podManagementPolicy: OrderedReady
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: valkey-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: "ceph-block"
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: grafana-operator
|
||||
annotations:
|
||||
checksum/initconfig: "4e54d550c2f6ca49dbd7140e4d7a0cdc"
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
serviceAccountName: grafana-operator-valkey
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
runAsGroup: 1000
|
||||
runAsUser: 1000
|
||||
initContainers:
|
||||
- name: grafana-operator-valkey-init
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
command: ["/scripts/init.sh"]
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
containers:
|
||||
- name: grafana-operator-valkey
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["valkey-server"]
|
||||
args: ["/data/conf/valkey.conf"]
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
- name: VALKEY_LOGLEVEL
|
||||
value: "notice"
|
||||
ports:
|
||||
- name: tcp
|
||||
containerPort: 6379
|
||||
protocol: TCP
|
||||
startupProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: metrics
|
||||
image: ghcr.io/oliver006/redis_exporter:v1.81.0
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 9121
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: metrics
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 64M
|
||||
env:
|
||||
- name: REDIS_ALIAS
|
||||
value: grafana-operator-valkey
|
||||
volumes:
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: grafana-operator-valkey-init-scripts
|
||||
defaultMode: 0555
|
||||
@@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: immich-valkey-init-scripts
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
data:
|
||||
init.sh: |-
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# Default config paths
|
||||
VALKEY_CONFIG=${VALKEY_CONFIG_PATH:-/data/conf/valkey.conf}
|
||||
|
||||
LOGFILE="/data/init.log"
|
||||
DATA_DIR="/data/conf"
|
||||
|
||||
# Logging function (outputs to stderr and file)
|
||||
log() {
|
||||
echo "$(date) $1" | tee -a "$LOGFILE" >&2
|
||||
}
|
||||
|
||||
# Clean old log if requested
|
||||
if [ "${KEEP_OLD_LOGS:-false}" != "true" ]; then
|
||||
rm -f "$LOGFILE"
|
||||
fi
|
||||
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
log "Detected restart of this instance ($HOSTNAME)"
|
||||
fi
|
||||
|
||||
log "Creating configuration in $DATA_DIR..."
|
||||
mkdir -p "$DATA_DIR"
|
||||
rm -f "$VALKEY_CONFIG"
|
||||
|
||||
|
||||
# Base valkey.conf
|
||||
log "Generating base valkey.conf"
|
||||
{
|
||||
echo "port 6379"
|
||||
echo "protected-mode no"
|
||||
echo "bind * -::*"
|
||||
echo "dir /data"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
# Replica mode configuration
|
||||
log "Configuring replication mode"
|
||||
|
||||
# Use POD_INDEX from Kubernetes metadata
|
||||
POD_INDEX=${POD_INDEX:-0}
|
||||
IS_MASTER=false
|
||||
|
||||
# Check if this is pod-0 (master)
|
||||
if [ "$POD_INDEX" = "0" ]; then
|
||||
IS_MASTER=true
|
||||
log "This pod (index $POD_INDEX) is configured as MASTER"
|
||||
else
|
||||
log "This pod (index $POD_INDEX) is configured as REPLICA"
|
||||
fi
|
||||
|
||||
# Configure replica settings
|
||||
if [ "$IS_MASTER" = "false" ]; then
|
||||
MASTER_HOST="immich-valkey-0.immich-valkey-headless.immich.svc.cluster.local"
|
||||
MASTER_PORT="6379"
|
||||
|
||||
log "Configuring replica to follow master at $MASTER_HOST:$MASTER_PORT"
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "# Replica Configuration"
|
||||
echo "replicaof $MASTER_HOST $MASTER_PORT"
|
||||
echo "replica-announce-ip immich-valkey-$POD_INDEX.immich-valkey-headless.immich.svc.cluster.local"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
|
||||
# Append extra configs if present
|
||||
if [ -f /usr/local/etc/valkey/valkey.conf ]; then
|
||||
log "Appending /usr/local/etc/valkey/valkey.conf"
|
||||
cat /usr/local/etc/valkey/valkey.conf >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
if [ -d /extravalkeyconfigs ]; then
|
||||
log "Appending files in /extravalkeyconfigs/"
|
||||
cat /extravalkeyconfigs/* >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
@@ -42,7 +42,7 @@ spec:
|
||||
- name: IMMICH_CONFIG_FILE
|
||||
value: /config/immich.json
|
||||
- name: REDIS_HOSTNAME
|
||||
value: redis-replication-immich-master
|
||||
value: immich-valkey
|
||||
- name: DB_VECTOR_EXTENSION
|
||||
value: vectorchord
|
||||
- name: DB_HOSTNAME
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: immich-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: podmonitor
|
||||
spec:
|
||||
podMetricsEndpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- immich
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
@@ -0,0 +1,47 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: immich-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
spec:
|
||||
groups:
|
||||
- name: immich-valkey
|
||||
rules:
|
||||
- alert: ValkeyDown
|
||||
annotations:
|
||||
description: Valkey instance {{ $labels.instance }} is down.
|
||||
summary: Valkey instance {{ $labels.instance }} down
|
||||
expr: |
|
||||
redis_up{service="immich-valkey-metrics"} == 0
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyMemoryHigh
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} is using {{ $value }}% of its available memory.
|
||||
summary: Valkey instance {{ $labels.instance }} is using too much memory
|
||||
expr: |
|
||||
redis_memory_used_bytes{service="immich-valkey-metrics"} * 100
|
||||
/
|
||||
redis_memory_max_bytes{service="immich-valkey-metrics"}
|
||||
> 90 <= 100
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyKeyEviction
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} has evicted {{ $value }} keys in the last 5 minutes.
|
||||
summary: Valkey instance {{ $labels.instance }} has evicted keys
|
||||
expr: |
|
||||
increase(redis_evicted_keys_total{service="immich-valkey-metrics"}[5m]) > 0
|
||||
for: 1s
|
||||
labels:
|
||||
severity: error
|
||||
@@ -1,44 +0,0 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-immich
|
||||
namespace: immich
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.1.0
|
||||
app.kubernetes.io/version: "1.1.0"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-immich
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/part-of: immich
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
runAsUser: 1000
|
||||
kubernetesConfig:
|
||||
image: "quay.io/opstree/redis:v8.4.2"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: ceph-block
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: "quay.io/opstree/redis-exporter:v1.81.0"
|
||||
sentinel:
|
||||
image: "quay.io/opstree/redis-sentinel:v8.4.2"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
size: 3
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: immich-valkey-headless
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: headless
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
publishNotReadyAddresses: true
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: immich-valkey-metrics
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: metrics
|
||||
app.kubernetes.io/part-of: valkey
|
||||
annotations:
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9121
|
||||
protocol: TCP
|
||||
targetPort: metrics
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: immich-valkey-read
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: read
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
22
clusters/cl01tl/manifests/immich/Service-immich-valkey.yaml
Normal file
22
clusters/cl01tl/manifests/immich/Service-immich-valkey.yaml
Normal file
@@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: immich-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: primary
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
name: tcp
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
statefulset.kubernetes.io/pod-name: immich-valkey-0
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: immich-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
automountServiceAccountToken: false
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: immich-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: service-monitor
|
||||
spec:
|
||||
endpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- immich
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/component: metrics
|
||||
@@ -1,22 +0,0 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-immich
|
||||
namespace: immich
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.1.0
|
||||
app.kubernetes.io/version: "1.1.0"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-immich
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/part-of: immich
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-replication-immich
|
||||
redis_setup_type: replication
|
||||
role: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
129
clusters/cl01tl/manifests/immich/StatefulSet-immich-valkey.yaml
Normal file
129
clusters/cl01tl/manifests/immich/StatefulSet-immich-valkey.yaml
Normal file
@@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: immich-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
spec:
|
||||
serviceName: immich-valkey-headless
|
||||
replicas: 3
|
||||
podManagementPolicy: OrderedReady
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: valkey-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: "ceph-block"
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: immich
|
||||
annotations:
|
||||
checksum/initconfig: "56fd0449d1eea259ddd955cd82dc8344"
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
serviceAccountName: immich-valkey
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
runAsGroup: 1000
|
||||
runAsUser: 1000
|
||||
initContainers:
|
||||
- name: immich-valkey-init
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
command: ["/scripts/init.sh"]
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
containers:
|
||||
- name: immich-valkey
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["valkey-server"]
|
||||
args: ["/data/conf/valkey.conf"]
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
- name: VALKEY_LOGLEVEL
|
||||
value: "notice"
|
||||
ports:
|
||||
- name: tcp
|
||||
containerPort: 6379
|
||||
protocol: TCP
|
||||
startupProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: metrics
|
||||
image: ghcr.io/oliver006/redis_exporter:v1.81.0
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 9121
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: metrics
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 64M
|
||||
env:
|
||||
- name: REDIS_ALIAS
|
||||
value: immich-valkey
|
||||
volumes:
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: immich-valkey-init-scripts
|
||||
defaultMode: 0555
|
||||
@@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey-init-scripts
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
data:
|
||||
init.sh: |-
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# Default config paths
|
||||
VALKEY_CONFIG=${VALKEY_CONFIG_PATH:-/data/conf/valkey.conf}
|
||||
|
||||
LOGFILE="/data/init.log"
|
||||
DATA_DIR="/data/conf"
|
||||
|
||||
# Logging function (outputs to stderr and file)
|
||||
log() {
|
||||
echo "$(date) $1" | tee -a "$LOGFILE" >&2
|
||||
}
|
||||
|
||||
# Clean old log if requested
|
||||
if [ "${KEEP_OLD_LOGS:-false}" != "true" ]; then
|
||||
rm -f "$LOGFILE"
|
||||
fi
|
||||
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
log "Detected restart of this instance ($HOSTNAME)"
|
||||
fi
|
||||
|
||||
log "Creating configuration in $DATA_DIR..."
|
||||
mkdir -p "$DATA_DIR"
|
||||
rm -f "$VALKEY_CONFIG"
|
||||
|
||||
|
||||
# Base valkey.conf
|
||||
log "Generating base valkey.conf"
|
||||
{
|
||||
echo "port 6379"
|
||||
echo "protected-mode no"
|
||||
echo "bind * -::*"
|
||||
echo "dir /data"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
# Replica mode configuration
|
||||
log "Configuring replication mode"
|
||||
|
||||
# Use POD_INDEX from Kubernetes metadata
|
||||
POD_INDEX=${POD_INDEX:-0}
|
||||
IS_MASTER=false
|
||||
|
||||
# Check if this is pod-0 (master)
|
||||
if [ "$POD_INDEX" = "0" ]; then
|
||||
IS_MASTER=true
|
||||
log "This pod (index $POD_INDEX) is configured as MASTER"
|
||||
else
|
||||
log "This pod (index $POD_INDEX) is configured as REPLICA"
|
||||
fi
|
||||
|
||||
# Configure replica settings
|
||||
if [ "$IS_MASTER" = "false" ]; then
|
||||
MASTER_HOST="kube-prometheus-stack-valkey-0.kube-prometheus-stack-valkey-headless.kube-prometheus-stack.svc.cluster.local"
|
||||
MASTER_PORT="6379"
|
||||
|
||||
log "Configuring replica to follow master at $MASTER_HOST:$MASTER_PORT"
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "# Replica Configuration"
|
||||
echo "replicaof $MASTER_HOST $MASTER_PORT"
|
||||
echo "replica-announce-ip kube-prometheus-stack-valkey-$POD_INDEX.kube-prometheus-stack-valkey-headless.kube-prometheus-stack.svc.cluster.local"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
|
||||
# Append extra configs if present
|
||||
if [ -f /usr/local/etc/valkey/valkey.conf ]; then
|
||||
log "Appending /usr/local/etc/valkey/valkey.conf"
|
||||
cat /usr/local/etc/valkey/valkey.conf >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
if [ -d /extravalkeyconfigs ]; then
|
||||
log "Appending files in /extravalkeyconfigs/"
|
||||
cat /extravalkeyconfigs/* >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: podmonitor
|
||||
spec:
|
||||
podMetricsEndpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- kube-prometheus-stack
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
@@ -0,0 +1,47 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
spec:
|
||||
groups:
|
||||
- name: kube-prometheus-stack-valkey
|
||||
rules:
|
||||
- alert: ValkeyDown
|
||||
annotations:
|
||||
description: Valkey instance {{ $labels.instance }} is down.
|
||||
summary: Valkey instance {{ $labels.instance }} down
|
||||
expr: |
|
||||
redis_up{service="kube-prometheus-stack-valkey-metrics"} == 0
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyMemoryHigh
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} is using {{ $value }}% of its available memory.
|
||||
summary: Valkey instance {{ $labels.instance }} is using too much memory
|
||||
expr: |
|
||||
redis_memory_used_bytes{service="kube-prometheus-stack-valkey-metrics"} * 100
|
||||
/
|
||||
redis_memory_max_bytes{service="kube-prometheus-stack-valkey-metrics"}
|
||||
> 90 <= 100
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyKeyEviction
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} has evicted {{ $value }} keys in the last 5 minutes.
|
||||
summary: Valkey instance {{ $labels.instance }} has evicted keys
|
||||
expr: |
|
||||
increase(redis_evicted_keys_total{service="kube-prometheus-stack-valkey-metrics"}[5m]) > 0
|
||||
for: 1s
|
||||
labels:
|
||||
severity: error
|
||||
@@ -1,44 +0,0 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-kube-prometheus-stack
|
||||
namespace: kube-prometheus-stack
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.1.0
|
||||
app.kubernetes.io/version: "1.1.0"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-kube-prometheus-stack
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/part-of: kube-prometheus-stack
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
runAsUser: 1000
|
||||
kubernetesConfig:
|
||||
image: "quay.io/opstree/redis:v8.4.2"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 20m
|
||||
memory: 32Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
storageClassName: ceph-block
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: "quay.io/opstree/redis-exporter:v1.81.0"
|
||||
sentinel:
|
||||
image: "quay.io/opstree/redis-sentinel:v8.4.2"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
size: 3
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey-headless
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: headless
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
publishNotReadyAddresses: true
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey-metrics
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: metrics
|
||||
app.kubernetes.io/part-of: valkey
|
||||
annotations:
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9121
|
||||
protocol: TCP
|
||||
targetPort: metrics
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey-read
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: read
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: primary
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
name: tcp
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
statefulset.kubernetes.io/pod-name: kube-prometheus-stack-valkey-0
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
automountServiceAccountToken: false
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: service-monitor
|
||||
spec:
|
||||
endpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- kube-prometheus-stack
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/component: metrics
|
||||
@@ -1,22 +0,0 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-kube-prometheus-stack
|
||||
namespace: kube-prometheus-stack
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.1.0
|
||||
app.kubernetes.io/version: "1.1.0"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-kube-prometheus-stack
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/part-of: kube-prometheus-stack
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-replication-kube-prometheus-stack
|
||||
redis_setup_type: replication
|
||||
role: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
@@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: kube-prometheus-stack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
spec:
|
||||
serviceName: kube-prometheus-stack-valkey-headless
|
||||
replicas: 3
|
||||
podManagementPolicy: OrderedReady
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: valkey-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: "ceph-block"
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: kube-prometheus-stack
|
||||
annotations:
|
||||
checksum/initconfig: "19aa72242c390a2a3c03b27433fec083"
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
serviceAccountName: kube-prometheus-stack-valkey
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
runAsGroup: 1000
|
||||
runAsUser: 1000
|
||||
initContainers:
|
||||
- name: kube-prometheus-stack-valkey-init
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
command: ["/scripts/init.sh"]
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
containers:
|
||||
- name: kube-prometheus-stack-valkey
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["valkey-server"]
|
||||
args: ["/data/conf/valkey.conf"]
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
- name: VALKEY_LOGLEVEL
|
||||
value: "notice"
|
||||
ports:
|
||||
- name: tcp
|
||||
containerPort: 6379
|
||||
protocol: TCP
|
||||
startupProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: metrics
|
||||
image: ghcr.io/oliver006/redis_exporter:v1.81.0
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 9121
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: metrics
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 64M
|
||||
env:
|
||||
- name: REDIS_ALIAS
|
||||
value: kube-prometheus-stack-valkey
|
||||
volumes:
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: kube-prometheus-stack-valkey-init-scripts
|
||||
defaultMode: 0555
|
||||
@@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: outline-valkey-init-scripts
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
data:
|
||||
init.sh: |-
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# Default config paths
|
||||
VALKEY_CONFIG=${VALKEY_CONFIG_PATH:-/data/conf/valkey.conf}
|
||||
|
||||
LOGFILE="/data/init.log"
|
||||
DATA_DIR="/data/conf"
|
||||
|
||||
# Logging function (outputs to stderr and file)
|
||||
log() {
|
||||
echo "$(date) $1" | tee -a "$LOGFILE" >&2
|
||||
}
|
||||
|
||||
# Clean old log if requested
|
||||
if [ "${KEEP_OLD_LOGS:-false}" != "true" ]; then
|
||||
rm -f "$LOGFILE"
|
||||
fi
|
||||
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
log "Detected restart of this instance ($HOSTNAME)"
|
||||
fi
|
||||
|
||||
log "Creating configuration in $DATA_DIR..."
|
||||
mkdir -p "$DATA_DIR"
|
||||
rm -f "$VALKEY_CONFIG"
|
||||
|
||||
|
||||
# Base valkey.conf
|
||||
log "Generating base valkey.conf"
|
||||
{
|
||||
echo "port 6379"
|
||||
echo "protected-mode no"
|
||||
echo "bind * -::*"
|
||||
echo "dir /data"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
# Replica mode configuration
|
||||
log "Configuring replication mode"
|
||||
|
||||
# Use POD_INDEX from Kubernetes metadata
|
||||
POD_INDEX=${POD_INDEX:-0}
|
||||
IS_MASTER=false
|
||||
|
||||
# Check if this is pod-0 (master)
|
||||
if [ "$POD_INDEX" = "0" ]; then
|
||||
IS_MASTER=true
|
||||
log "This pod (index $POD_INDEX) is configured as MASTER"
|
||||
else
|
||||
log "This pod (index $POD_INDEX) is configured as REPLICA"
|
||||
fi
|
||||
|
||||
# Configure replica settings
|
||||
if [ "$IS_MASTER" = "false" ]; then
|
||||
MASTER_HOST="outline-valkey-0.outline-valkey-headless.outline.svc.cluster.local"
|
||||
MASTER_PORT="6379"
|
||||
|
||||
log "Configuring replica to follow master at $MASTER_HOST:$MASTER_PORT"
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "# Replica Configuration"
|
||||
echo "replicaof $MASTER_HOST $MASTER_PORT"
|
||||
echo "replica-announce-ip outline-valkey-$POD_INDEX.outline-valkey-headless.outline.svc.cluster.local"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
|
||||
# Append extra configs if present
|
||||
if [ -f /usr/local/etc/valkey/valkey.conf ]; then
|
||||
log "Appending /usr/local/etc/valkey/valkey.conf"
|
||||
cat /usr/local/etc/valkey/valkey.conf >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
if [ -d /extravalkeyconfigs ]; then
|
||||
log "Appending files in /extravalkeyconfigs/"
|
||||
cat /extravalkeyconfigs/* >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
@@ -87,7 +87,7 @@ spec:
|
||||
- name: PGSSLMODE
|
||||
value: disable
|
||||
- name: REDIS_URL
|
||||
value: redis://redis-replication-outline-master.outline:6379
|
||||
value: redis://outline-valkey.outline:6379
|
||||
- name: FILE_STORAGE
|
||||
value: s3
|
||||
- name: AWS_ACCESS_KEY_ID
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: outline-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: podmonitor
|
||||
spec:
|
||||
podMetricsEndpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- outline
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
@@ -0,0 +1,47 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: outline-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
spec:
|
||||
groups:
|
||||
- name: outline-valkey
|
||||
rules:
|
||||
- alert: ValkeyDown
|
||||
annotations:
|
||||
description: Valkey instance {{ $labels.instance }} is down.
|
||||
summary: Valkey instance {{ $labels.instance }} down
|
||||
expr: |
|
||||
redis_up{service="outline-valkey-metrics"} == 0
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyMemoryHigh
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} is using {{ $value }}% of its available memory.
|
||||
summary: Valkey instance {{ $labels.instance }} is using too much memory
|
||||
expr: |
|
||||
redis_memory_used_bytes{service="outline-valkey-metrics"} * 100
|
||||
/
|
||||
redis_memory_max_bytes{service="outline-valkey-metrics"}
|
||||
> 90 <= 100
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyKeyEviction
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} has evicted {{ $value }} keys in the last 5 minutes.
|
||||
summary: Valkey instance {{ $labels.instance }} has evicted keys
|
||||
expr: |
|
||||
increase(redis_evicted_keys_total{service="outline-valkey-metrics"}[5m]) > 0
|
||||
for: 1s
|
||||
labels:
|
||||
severity: error
|
||||
@@ -1,44 +0,0 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-outline
|
||||
namespace: outline
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-outline
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/part-of: outline
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
runAsUser: 1000
|
||||
kubernetesConfig:
|
||||
image: "quay.io/opstree/redis:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: ceph-block
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: "quay.io/opstree/redis-exporter:v1.80.2"
|
||||
sentinel:
|
||||
image: "quay.io/opstree/redis-sentinel:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
size: 3
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: outline-valkey-headless
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: headless
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
publishNotReadyAddresses: true
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: outline-valkey-metrics
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: metrics
|
||||
app.kubernetes.io/part-of: valkey
|
||||
annotations:
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9121
|
||||
protocol: TCP
|
||||
targetPort: metrics
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: outline-valkey-read
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: read
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: outline-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: primary
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
name: tcp
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
statefulset.kubernetes.io/pod-name: outline-valkey-0
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: outline-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
automountServiceAccountToken: false
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: outline-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: service-monitor
|
||||
spec:
|
||||
endpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- outline
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/component: metrics
|
||||
@@ -1,22 +0,0 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-outline
|
||||
namespace: outline
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-outline
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/part-of: outline
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-replication-outline
|
||||
redis_setup_type: replication
|
||||
role: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
@@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: outline-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
spec:
|
||||
serviceName: outline-valkey-headless
|
||||
replicas: 3
|
||||
podManagementPolicy: OrderedReady
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: valkey-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: "ceph-block"
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: outline
|
||||
annotations:
|
||||
checksum/initconfig: "3b9de9687ce0791285b591450baf7ecf"
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
serviceAccountName: outline-valkey
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
runAsGroup: 1000
|
||||
runAsUser: 1000
|
||||
initContainers:
|
||||
- name: outline-valkey-init
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
command: ["/scripts/init.sh"]
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
containers:
|
||||
- name: outline-valkey
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["valkey-server"]
|
||||
args: ["/data/conf/valkey.conf"]
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
- name: VALKEY_LOGLEVEL
|
||||
value: "notice"
|
||||
ports:
|
||||
- name: tcp
|
||||
containerPort: 6379
|
||||
protocol: TCP
|
||||
startupProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: metrics
|
||||
image: ghcr.io/oliver006/redis_exporter:v1.81.0
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 9121
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: metrics
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 64M
|
||||
env:
|
||||
- name: REDIS_ALIAS
|
||||
value: outline-valkey
|
||||
volumes:
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: outline-valkey-init-scripts
|
||||
defaultMode: 0555
|
||||
@@ -0,0 +1,87 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: yamtrack-valkey-init-scripts
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
data:
|
||||
init.sh: |-
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# Default config paths
|
||||
VALKEY_CONFIG=${VALKEY_CONFIG_PATH:-/data/conf/valkey.conf}
|
||||
|
||||
LOGFILE="/data/init.log"
|
||||
DATA_DIR="/data/conf"
|
||||
|
||||
# Logging function (outputs to stderr and file)
|
||||
log() {
|
||||
echo "$(date) $1" | tee -a "$LOGFILE" >&2
|
||||
}
|
||||
|
||||
# Clean old log if requested
|
||||
if [ "${KEEP_OLD_LOGS:-false}" != "true" ]; then
|
||||
rm -f "$LOGFILE"
|
||||
fi
|
||||
|
||||
if [ -f "$LOGFILE" ]; then
|
||||
log "Detected restart of this instance ($HOSTNAME)"
|
||||
fi
|
||||
|
||||
log "Creating configuration in $DATA_DIR..."
|
||||
mkdir -p "$DATA_DIR"
|
||||
rm -f "$VALKEY_CONFIG"
|
||||
|
||||
|
||||
# Base valkey.conf
|
||||
log "Generating base valkey.conf"
|
||||
{
|
||||
echo "port 6379"
|
||||
echo "protected-mode no"
|
||||
echo "bind * -::*"
|
||||
echo "dir /data"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
# Replica mode configuration
|
||||
log "Configuring replication mode"
|
||||
|
||||
# Use POD_INDEX from Kubernetes metadata
|
||||
POD_INDEX=${POD_INDEX:-0}
|
||||
IS_MASTER=false
|
||||
|
||||
# Check if this is pod-0 (master)
|
||||
if [ "$POD_INDEX" = "0" ]; then
|
||||
IS_MASTER=true
|
||||
log "This pod (index $POD_INDEX) is configured as MASTER"
|
||||
else
|
||||
log "This pod (index $POD_INDEX) is configured as REPLICA"
|
||||
fi
|
||||
|
||||
# Configure replica settings
|
||||
if [ "$IS_MASTER" = "false" ]; then
|
||||
MASTER_HOST="yamtrack-valkey-0.yamtrack-valkey-headless.yamtrack.svc.cluster.local"
|
||||
MASTER_PORT="6379"
|
||||
|
||||
log "Configuring replica to follow master at $MASTER_HOST:$MASTER_PORT"
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "# Replica Configuration"
|
||||
echo "replicaof $MASTER_HOST $MASTER_PORT"
|
||||
echo "replica-announce-ip yamtrack-valkey-$POD_INDEX.yamtrack-valkey-headless.yamtrack.svc.cluster.local"
|
||||
} >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
|
||||
# Append extra configs if present
|
||||
if [ -f /usr/local/etc/valkey/valkey.conf ]; then
|
||||
log "Appending /usr/local/etc/valkey/valkey.conf"
|
||||
cat /usr/local/etc/valkey/valkey.conf >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
if [ -d /extravalkeyconfigs ]; then
|
||||
log "Appending files in /extravalkeyconfigs/"
|
||||
cat /extravalkeyconfigs/* >>"$VALKEY_CONFIG"
|
||||
fi
|
||||
@@ -54,7 +54,7 @@ spec:
|
||||
key: SECRET
|
||||
name: yamtrack-config-secret
|
||||
- name: REDIS_URL
|
||||
value: redis://redis-replication-yamtrack-master.yamtrack:6379
|
||||
value: redis://yamtrack-valkey.yamtrack:6379
|
||||
- name: DB_USER
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: yamtrack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: podmonitor
|
||||
spec:
|
||||
podMetricsEndpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- yamtrack
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
@@ -0,0 +1,47 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: yamtrack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
spec:
|
||||
groups:
|
||||
- name: yamtrack-valkey
|
||||
rules:
|
||||
- alert: ValkeyDown
|
||||
annotations:
|
||||
description: Valkey instance {{ $labels.instance }} is down.
|
||||
summary: Valkey instance {{ $labels.instance }} down
|
||||
expr: |
|
||||
redis_up{service="yamtrack-valkey-metrics"} == 0
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyMemoryHigh
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} is using {{ $value }}% of its available memory.
|
||||
summary: Valkey instance {{ $labels.instance }} is using too much memory
|
||||
expr: |
|
||||
redis_memory_used_bytes{service="yamtrack-valkey-metrics"} * 100
|
||||
/
|
||||
redis_memory_max_bytes{service="yamtrack-valkey-metrics"}
|
||||
> 90 <= 100
|
||||
for: 2m
|
||||
labels:
|
||||
severity: error
|
||||
- alert: ValkeyKeyEviction
|
||||
annotations:
|
||||
description: |
|
||||
Valkey instance {{ $labels.instance }} has evicted {{ $value }} keys in the last 5 minutes.
|
||||
summary: Valkey instance {{ $labels.instance }} has evicted keys
|
||||
expr: |
|
||||
increase(redis_evicted_keys_total{service="yamtrack-valkey-metrics"}[5m]) > 0
|
||||
for: 1s
|
||||
labels:
|
||||
severity: error
|
||||
@@ -1,44 +0,0 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: redis-replication-yamtrack
|
||||
namespace: yamtrack
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-yamtrack
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/part-of: yamtrack
|
||||
spec:
|
||||
clusterSize: 3
|
||||
podSecurityContext:
|
||||
fsGroup: 1000
|
||||
runAsUser: 1000
|
||||
kubernetesConfig:
|
||||
image: "quay.io/opstree/redis:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
storageClassName: ceph-block
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image: "quay.io/opstree/redis-exporter:v1.80.2"
|
||||
sentinel:
|
||||
image: "quay.io/opstree/redis-sentinel:v8.4.0"
|
||||
imagePullPolicy: IfNotPresent
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 32Mi
|
||||
size: 3
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: yamtrack-valkey-headless
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: headless
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
publishNotReadyAddresses: true
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
@@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: yamtrack-valkey-metrics
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: metrics
|
||||
app.kubernetes.io/part-of: valkey
|
||||
annotations:
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9121
|
||||
protocol: TCP
|
||||
targetPort: metrics
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
@@ -0,0 +1,21 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: yamtrack-valkey-read
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: read
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp
|
||||
port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: yamtrack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: primary
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: tcp
|
||||
protocol: TCP
|
||||
name: tcp
|
||||
selector:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
statefulset.kubernetes.io/pod-name: yamtrack-valkey-0
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: yamtrack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
automountServiceAccountToken: false
|
||||
@@ -1,22 +0,0 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: redis-replication-yamtrack
|
||||
namespace: yamtrack
|
||||
labels:
|
||||
helm.sh/chart: redis-replication-1.0.4
|
||||
app.kubernetes.io/version: "1.0.4"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: redis-replication-yamtrack
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/part-of: yamtrack
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: redis-replication-yamtrack
|
||||
redis_setup_type: replication
|
||||
role: replication
|
||||
endpoints:
|
||||
- port: redis-exporter
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: yamtrack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/component: service-monitor
|
||||
spec:
|
||||
endpoints:
|
||||
- port: metrics
|
||||
interval: 30s
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- yamtrack
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/component: metrics
|
||||
@@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: yamtrack-valkey
|
||||
labels:
|
||||
helm.sh/chart: valkey-0.9.3
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
app.kubernetes.io/version: "9.0.3"
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
spec:
|
||||
serviceName: yamtrack-valkey-headless
|
||||
replicas: 3
|
||||
podManagementPolicy: OrderedReady
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: valkey-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
storageClassName: "ceph-block"
|
||||
resources:
|
||||
requests:
|
||||
storage: "1Gi"
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/instance: yamtrack
|
||||
annotations:
|
||||
checksum/initconfig: "2a752af416142b8e244d7d720adef483"
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
serviceAccountName: yamtrack-valkey
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
runAsGroup: 1000
|
||||
runAsUser: 1000
|
||||
initContainers:
|
||||
- name: yamtrack-valkey-init
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
command: ["/scripts/init.sh"]
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
containers:
|
||||
- name: yamtrack-valkey
|
||||
image: docker.io/valkey/valkey:9.0.3
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ["valkey-server"]
|
||||
args: ["/data/conf/valkey.conf"]
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
env:
|
||||
- name: POD_INDEX
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels['apps.kubernetes.io/pod-index']
|
||||
- name: VALKEY_LOGLEVEL
|
||||
value: "notice"
|
||||
ports:
|
||||
- name: tcp
|
||||
containerPort: 6379
|
||||
protocol: TCP
|
||||
startupProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["sh", "-c", "valkey-cli ping"]
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
volumeMounts:
|
||||
- name: valkey-data
|
||||
mountPath: /data
|
||||
- name: metrics
|
||||
image: ghcr.io/oliver006/redis_exporter:v1.81.0
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 9121
|
||||
startupProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: metrics
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: metrics
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 64M
|
||||
env:
|
||||
- name: REDIS_ALIAS
|
||||
value: yamtrack-valkey
|
||||
volumes:
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: yamtrack-valkey-init-scripts
|
||||
defaultMode: 0555
|
||||
Reference in New Issue
Block a user