Compare commits
5 Commits
v0.1.0
...
v0.0.8-dev
Author | SHA1 | Date | |
---|---|---|---|
3c550b3015 | |||
36e6cd84f9 | |||
004cd98224 | |||
d655d0449f | |||
3f10373773 |
@ -1,44 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1alpha1
|
|
||||||
kind: Component
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- resources/sa.yaml
|
|
||||||
- resources/statefulset.yaml
|
|
||||||
- resources/svc.yaml
|
|
||||||
|
|
||||||
configMapGenerator:
|
|
||||||
#- name: valkey-env
|
|
||||||
# literals:
|
|
||||||
# - NAMESPACE="default"
|
|
||||||
# - VALKEY_ENV="base"
|
|
||||||
# - VALKEY_NAME="valkey-node"
|
|
||||||
# - VALKEY_SERVICE="valkey-node"
|
|
||||||
# - VALKEY_HEADLESS_SERVICE="valkey-node-headless"
|
|
||||||
# - VALKEY_MASTER_NAME="mymaster"
|
|
||||||
# - VALKEY_REPLICAS="4"
|
|
||||||
# - VALKEY_PORT="6379"
|
|
||||||
# - VALKEY_SENTINEL_PORT="26379"
|
|
||||||
# - ALLOW_EMPTY_PASSWORD="yes"
|
|
||||||
# - VALKEY_TLS_ENABLED="no"
|
|
||||||
# - VALKEY_SENTINEL_TLS_ENABLED="no"
|
|
||||||
# - VALKEY_DATA_DIR="/data"
|
|
||||||
# - VALKEY_LOG_LEVEL="warning"
|
|
||||||
# - VALKEY_QUORUM="2"
|
|
||||||
- name: valkey-config
|
|
||||||
files:
|
|
||||||
- files/conf/replication.conf.tpl
|
|
||||||
- files/conf/sentinel.conf.tpl
|
|
||||||
- name: valkey-scripts
|
|
||||||
files:
|
|
||||||
- files/scripts/common.sh
|
|
||||||
- files/scripts/startSentinel.sh
|
|
||||||
- files/scripts/pre-stop.sh
|
|
||||||
- files/scripts/pre-stop-sentinel.sh
|
|
||||||
- files/scripts/start-node.sh
|
|
||||||
- files/scripts/ping-sentinel.sh
|
|
||||||
- files/scripts/liveness-local.sh
|
|
||||||
- files/scripts/readiness-local.sh
|
|
||||||
|
|
||||||
replacements:
|
|
||||||
- path: replacements/service.yaml
|
|
||||||
- path: replacements/statefulset.yaml
|
|
@ -1,17 +0,0 @@
|
|||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: valkey-env
|
|
||||||
fieldPath: data.VALKEY_SERVICE
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: Service
|
|
||||||
name: valkey-headless
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.labels.app
|
|
||||||
- spec.selector.app
|
|
||||||
- select:
|
|
||||||
kind: Service
|
|
||||||
name: valkey
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.labels.app
|
|
||||||
- spec.selector.app
|
|
@ -1,12 +0,0 @@
|
|||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: valkey-env
|
|
||||||
fieldPath: data.VALKEY_SERVICE
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.labels.app
|
|
||||||
- spec.selector.matchLabels.app
|
|
||||||
- spec.template.metadata.labels.app
|
|
@ -1,5 +1,5 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
|
|
||||||
components:
|
resources:
|
||||||
- resources/node
|
- resources/node
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Base image
|
# Base image
|
||||||
FROM golang:tip-alpine3.22 AS builder
|
FROM golang:tip-alpine3.21 AS builder
|
||||||
|
|
||||||
# Set directory to known value
|
# Set directory to known value
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
@ -14,7 +14,7 @@ RUN git clone https://github.com/coveooss/gotemplate.git . && \
|
|||||||
CGO_ENABLED=0 go build
|
CGO_ENABLED=0 go build
|
||||||
|
|
||||||
|
|
||||||
FROM alpine:3.22
|
FROM alpine:3.21
|
||||||
#
|
#
|
||||||
COPY --from=builder /app/gotemplate /gotemplate
|
COPY --from=builder /app/gotemplate /gotemplate
|
||||||
COPY --from=builder /usr/bin/valkey-cli /valkey-cli
|
COPY --from=builder /usr/bin/valkey-cli /valkey-cli
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
|
|
||||||
resources:
|
|
||||||
- resources/namespace.yaml
|
|
||||||
- resources/vlone
|
|
||||||
- resources/vltwo
|
|
@ -1,4 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: vltest
|
|
@ -1,25 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namePrefix: vlone-
|
|
||||||
|
|
||||||
components:
|
|
||||||
- https://forge.cadoles.com/CadolesKube/valkey-kustom//components/node
|
|
||||||
|
|
||||||
configMapGenerator:
|
|
||||||
- name: valkey-env
|
|
||||||
literals:
|
|
||||||
- NAMESPACE="vltest"
|
|
||||||
- VALKEY_ENV="vltest"
|
|
||||||
- VALKEY_NAME="vlone-valkey-node"
|
|
||||||
- VALKEY_SERVICE="vlone-valkey"
|
|
||||||
- VALKEY_HEADLESS_SERVICE="vlone-valkey-headless"
|
|
||||||
- VALKEY_MASTER_NAME="mymaster"
|
|
||||||
- VALKEY_REPLICAS="6"
|
|
||||||
- VALKEY_PORT="6379"
|
|
||||||
- VALKEY_SENTINEL_PORT="26379"
|
|
||||||
- ALLOW_EMPTY_PASSWORD="yes"
|
|
||||||
- VALKEY_TLS_ENABLED="no"
|
|
||||||
- VALKEY_SENTINEL_TLS_ENABLED="no"
|
|
||||||
- VALKEY_DATA_DIR="/data"
|
|
||||||
- VALKEY_LOG_LEVEL="warning"
|
|
||||||
- VALKEY_QUORUM="2"
|
|
@ -1,31 +0,0 @@
|
|||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vlone
|
|
||||||
fieldPath: data.VALKEY_NAME
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.name
|
|
||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vlone
|
|
||||||
fieldPath: data.VALKEY_ENV_NAME
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- spec.template.spec.containers[*].envFrom[0].configMapRef.name
|
|
||||||
- spec.template.spec.initContainers[*].envFrom[0].configMapRef.name
|
|
||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vlone
|
|
||||||
fieldPath: data.VALKEY_CONF_NAME
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- spec.template.spec.initContainers[*].volumeMounts[valkey-config].name
|
|
@ -1,25 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namePrefix: vltwo-
|
|
||||||
|
|
||||||
components:
|
|
||||||
- https://forge.cadoles.com/CadolesKube/valkey-kustom//components/node
|
|
||||||
|
|
||||||
configMapGenerator:
|
|
||||||
- name: valkey-env
|
|
||||||
literals:
|
|
||||||
- NAMESPACE="vltest"
|
|
||||||
- VALKEY_ENV="vltest"
|
|
||||||
- VALKEY_NAME="vltwo-valkey-node"
|
|
||||||
- VALKEY_SERVICE="vltwo-valkey"
|
|
||||||
- VALKEY_HEADLESS_SERVICE="vltwo-valkey-headless"
|
|
||||||
- VALKEY_MASTER_NAME="vltwomaster"
|
|
||||||
- VALKEY_REPLICAS="4"
|
|
||||||
- VALKEY_PORT="6379"
|
|
||||||
- VALKEY_SENTINEL_PORT="26379"
|
|
||||||
- ALLOW_EMPTY_PASSWORD="yes"
|
|
||||||
- VALKEY_TLS_ENABLED="no"
|
|
||||||
- VALKEY_SENTINEL_TLS_ENABLED="no"
|
|
||||||
- VALKEY_DATA_DIR="/data"
|
|
||||||
- VALKEY_LOG_LEVEL="warning"
|
|
||||||
- VALKEY_QUORUM="2"
|
|
@ -1,20 +0,0 @@
|
|||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vltwo
|
|
||||||
fieldPath: data.VALKEY_HEADLESS_SERVICE
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: Service
|
|
||||||
name: valkey-headless
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.name
|
|
||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vltwo
|
|
||||||
fieldPath: data.VALKEY_SERVICE
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: Service
|
|
||||||
name: valkey
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.name
|
|
@ -1,31 +0,0 @@
|
|||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vltwo
|
|
||||||
fieldPath: data.VALKEY_NAME
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- metadata.name
|
|
||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vltwo
|
|
||||||
fieldPath: data.VALKEY_ENV_NAME
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- spec.template.spec.containers[*].envFrom[0].configMapRef.name
|
|
||||||
- spec.template.spec.initContainers[*].envFrom[0].configMapRef.name
|
|
||||||
- source:
|
|
||||||
kind: ConfigMap
|
|
||||||
name: vltwo
|
|
||||||
fieldPath: data.VALKEY_CONF_NAME
|
|
||||||
targets:
|
|
||||||
- select:
|
|
||||||
kind: StatefulSet
|
|
||||||
name: valkey-node
|
|
||||||
fieldPaths:
|
|
||||||
- spec.template.spec.initContainers[*].volumeMounts[valkey-config].name
|
|
@ -1,5 +1,5 @@
|
|||||||
{{- $hostname := env "HOSTNAME" }}
|
{{- $hostname := env "HOSTNAME" }}
|
||||||
{{- $service := env "VALKEY_HEADLESS_SERVICE" }}
|
{{- $service := env "VALKEY_SERVICE" }}
|
||||||
{{- $namespace := env "NAMESPACE" }}
|
{{- $namespace := env "NAMESPACE" }}
|
||||||
{{- $port := env "VALKEY_PORT" }}
|
{{- $port := env "VALKEY_PORT" }}
|
||||||
{{- $sentinel_port := env "VALKEY_SENTINEL_PORT" }}
|
{{- $sentinel_port := env "VALKEY_SENTINEL_PORT" }}
|
@ -1,5 +1,5 @@
|
|||||||
{{- $hostname := env "HOSTNAME" }}
|
{{- $hostname := env "HOSTNAME" }}
|
||||||
{{- $service := env "VALKEY_HEADLESS_SERVICE" }}
|
{{- $service := env "VALKEY_SERVICE" }}
|
||||||
{{- $namespace := env "NAMESPACE" }}
|
{{- $namespace := env "NAMESPACE" }}
|
||||||
{{- $port := env "VALKEY_PORT" }}
|
{{- $port := env "VALKEY_PORT" }}
|
||||||
{{- $sentinel_port := env "VALKEY_SENTINEL_PORT" }}
|
{{- $sentinel_port := env "VALKEY_SENTINEL_PORT" }}
|
@ -1,5 +1,5 @@
|
|||||||
{{- $hostname := env "HOSTNAME" }}
|
{{- $hostname := env "HOSTNAME" }}
|
||||||
{{- $service := env "VALKEY_HEADLESS_SERVICE" }}
|
{{- $service := env "VALKEY_SERVICE" }}
|
||||||
{{- $namespace := env "NAMESPACE" }}
|
{{- $namespace := env "NAMESPACE" }}
|
||||||
{{- $port := env "VALKEY_PORT" }}
|
{{- $port := env "VALKEY_PORT" }}
|
||||||
{{- $name := env "VALKEY_NAME" }}
|
{{- $name := env "VALKEY_NAME" }}
|
||||||
@ -9,13 +9,12 @@
|
|||||||
{{- $fqdn := printf "%s.%s" $hostname $domain }}
|
{{- $fqdn := printf "%s.%s" $hostname $domain }}
|
||||||
{{- $hostid := sha1sum $hostname }}
|
{{- $hostid := sha1sum $hostname }}
|
||||||
{{- $quorum := env "VALKEY_QUORUM" }}
|
{{- $quorum := env "VALKEY_QUORUM" }}
|
||||||
{{- $master_name := env "VALKEY_MASTER_NAME" }}
|
|
||||||
#-REPLICAS:{{ $replicas }}
|
#-REPLICAS:{{ $replicas }}
|
||||||
|
|
||||||
dir "/tmp"
|
dir "/tmp"
|
||||||
port {{ $sentinel_port }}
|
port {{ $sentinel_port }}
|
||||||
sentinel monitor {{ $master_name }} SENTINEL_MASTER {{ $port }} {{ $quorum }}
|
sentinel monitor mymaster SENTINEL_MASTER {{ $port }} {{ $quorum }}
|
||||||
sentinel down-after-milliseconds {{ $master_name }} 60000
|
sentinel down-after-milliseconds mymaster 60000
|
||||||
|
|
||||||
# User-supplied sentinel configuration:
|
# User-supplied sentinel configuration:
|
||||||
# End of sentinel configuration
|
# End of sentinel configuration
|
||||||
@ -33,17 +32,16 @@ protected-mode no
|
|||||||
# gotemplate-pause!
|
# gotemplate-pause!
|
||||||
user default on nopass sanitize-payload ~* &* +@all
|
user default on nopass sanitize-payload ~* &* +@all
|
||||||
# gotemplate-resume!
|
# gotemplate-resume!
|
||||||
sentinel config-epoch {{ $master_name }} 0
|
sentinel config-epoch mymaster 0
|
||||||
sentinel leader-epoch {{ $master_name }} 0
|
sentinel leader-epoch mymaster 0
|
||||||
sentinel current-epoch 0
|
sentinel current-epoch 0
|
||||||
|
|
||||||
{{- range $i, $e := until ( int $replicas ) }}
|
{{- range $i, $e := until ( int $replicas ) }}
|
||||||
{{- $masterName := printf "%s" $master_name}}
|
|
||||||
{{- $ndeHostname := printf "%s-%d" $name $i }}
|
{{- $ndeHostname := printf "%s-%d" $name $i }}
|
||||||
{{- $ndeFQDN := printf "%s.%s" $ndeHostname $domain }}
|
{{- $ndeFQDN := printf "%s.%s" $ndeHostname $domain }}
|
||||||
{{- $nodeID := sha1sum $ndeHostname }}
|
{{- $nodeID := sha1sum $ndeHostname }}
|
||||||
{{- if (ne $fqdn $ndeFQDN) }}
|
{{- if (ne $fqdn $ndeFQDN) }}
|
||||||
sentinel {{ printf "known-sentinel %s %s %s %s" $masterName $ndeFQDN $sentinel_port $nodeID }}
|
sentinel {{ printf "known-sentinel mymaster %s %s %s" $ndeFQDN $sentinel_port $nodeID }}
|
||||||
sentinel {{ printf "known-replica %s %s %s" $masterName $ndeFQDN $port }}
|
sentinel {{ printf "known-replica mymaster %s %s" $ndeFQDN $port }}
|
||||||
{{- end}}
|
{{- end}}
|
||||||
{{- end}}
|
{{- end}}
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
|
|
||||||
pingSentinel() {
|
pingSentinel() {
|
||||||
svc=${VALKEY_HEADLESS_SERVICE:-"localhost"}
|
svc=${VALKEY_SERVICE:-"localhost"}
|
||||||
|
|
||||||
resp=$(timeout -s 15 $1 \
|
resp=$(timeout -s 15 $1 \
|
||||||
valkey-cli \
|
valkey-cli \
|
||||||
@ -15,30 +15,8 @@ pingSentinel() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPrimaryInfo() {
|
getPrimaryInfo() {
|
||||||
masterName=${VALKEY_MASTER_NAME:-"mymaster"}
|
valkey-cli --csv -h ${VALKEY_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel get-primary-addr-by-name "mymaster"| \
|
||||||
it="${1:-0}"
|
awk -F ',' '{ gsub(/"/,"",$0); print $1 " " $2 }'
|
||||||
|
|
||||||
info=$(valkey-cli --csv -h ${VALKEY_HEADLESS_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel get-primary-addr-by-name "${masterName}"| \
|
|
||||||
awk -F ',' '{ gsub(/"/,"",$0); print $1 " " $2 }')
|
|
||||||
|
|
||||||
if [ -z "${info}" ]; then
|
|
||||||
echo "Failed to get primary info for master '${masterName}'"
|
|
||||||
it=$((it + 1))
|
|
||||||
getPrimaryInfo ${it}
|
|
||||||
if [ ${it} -ge 10 ]; then
|
|
||||||
echo "Failed to get primary info after 5 attempts"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ "${info}" =~ /^NULL/ ]]; then
|
|
||||||
it=$((it + 1))
|
|
||||||
getPrimaryInfo ${it}
|
|
||||||
if [ ${it} -ge 10 ]; then
|
|
||||||
echo "Failed to get primary info after 5 attempts"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "${info}"
|
|
||||||
return ${?}
|
return ${?}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,6 +76,6 @@ sentinelIsMaster() {
|
|||||||
|
|
||||||
sentinelReset() {
|
sentinelReset() {
|
||||||
# Reset the sentinel
|
# Reset the sentinel
|
||||||
valkey-cli -h ${VALKEY_HEADLESS_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel reset "${1}"
|
valkey-cli -h ${VALKEY_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel reset "${1}"
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
@ -8,15 +8,14 @@ vcli() {
|
|||||||
|
|
||||||
# Run Sentinel command
|
# Run Sentinel command
|
||||||
vcli-sentinel() {
|
vcli-sentinel() {
|
||||||
valkey-cli -h "${VALKEY_HEADLESS_SERVICE}" -p "${VALKEY_SENTINEL_PORT}" sentinel "$@"
|
valkey-cli -h "$VALKEY_SERVICE" -p "$VALKEY_SENTINEL_PORT" sentinel "$@"
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
getFailOverStatus() {
|
getFailOverStatus() {
|
||||||
# Check if the failover is finished
|
# Check if the failover is finished
|
||||||
local failoverStatus
|
local failoverStatus
|
||||||
sentinelMasterName="${VALKEY_MASTER_NAME:-"mymaster"}"
|
primaryInfo=$(vcli-sentinel get-primary-addr-by-name "mymaster")
|
||||||
primaryInfo=$(vcli-sentinel get-primary-addr-by-name "${sentinelMasterName}")
|
|
||||||
primaryHost=$(echo ${primaryInfo} | awk -F ' ' '{print $1}')
|
primaryHost=$(echo ${primaryInfo} | awk -F ' ' '{print $1}')
|
||||||
currentHost=$(hostname -f)
|
currentHost=$(hostname -f)
|
||||||
if [[ "${primaryHost}" != "${currentHost}" ]]; then
|
if [[ "${primaryHost}" != "${currentHost}" ]]; then
|
||||||
@ -45,13 +44,12 @@ isPrimary() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if isPrimary && ! getFailOverStatus; then
|
if isPrimary && ! getFailOverStatus; then
|
||||||
sentinelMasterName="${VALKEY_MASTER_NAME}"
|
|
||||||
echo "I'm the primary and you are stopping me, pausing client connections"
|
echo "I'm the primary and you are stopping me, pausing client connections"
|
||||||
#Pausing write connections to avoid data loss"
|
#Pausing write connections to avoid data loss"
|
||||||
vcli CLIENT PAUSE "22000" WRITE
|
vcli CLIENT PAUSE "22000" WRITE
|
||||||
|
|
||||||
echo "Starting failover"
|
echo "Starting failover"
|
||||||
vcli-sentinel failover "${sentinelMasterName}"
|
vcli-sentinel failover "mymaster"
|
||||||
echo "Waiting for sentinel to complete failover for up to 120s"
|
echo "Waiting for sentinel to complete failover for up to 120s"
|
||||||
tmout=120
|
tmout=120
|
||||||
while true ; do
|
while true ; do
|
@ -3,7 +3,7 @@
|
|||||||
pingSentinel() {
|
pingSentinel() {
|
||||||
resp=$(timeout -s 15 $1 \
|
resp=$(timeout -s 15 $1 \
|
||||||
valkey-cli \
|
valkey-cli \
|
||||||
-h ${VALKEY_HEADLESS_SERVICE} \
|
-h ${VALKEY_SERVICE} \
|
||||||
-p ${VALKEY_SENTINEL_PORT} \
|
-p ${VALKEY_SENTINEL_PORT} \
|
||||||
ping)
|
ping)
|
||||||
ret=${?}
|
ret=${?}
|
||||||
@ -12,8 +12,7 @@ pingSentinel() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPrimaryInfo() {
|
getPrimaryInfo() {
|
||||||
sentinelMasterName="${VALKEY_MASTER_NAME:-"mymaster"}"
|
valkey-cli -t 15 --csv -h ${VALKEY_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel get-primary-addr-by-name "mymaster"| \
|
||||||
valkey-cli -t 15 --csv -h ${VALKEY_HEADLESS_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel get-primary-addr-by-name "${sentinelMasterName}"| \
|
|
||||||
awk -F ',' '{ gsub(/"/,"",$0); print $1 " " $2 }'
|
awk -F ',' '{ gsub(/"/,"",$0); print $1 " " $2 }'
|
||||||
return ${?}
|
return ${?}
|
||||||
}
|
}
|
||||||
@ -81,17 +80,12 @@ else
|
|||||||
echo "Primary host is : ${primaryHost}, port: ${primaryPort}"
|
echo "Primary host is : ${primaryHost}, port: ${primaryPort}"
|
||||||
currentHost=$(hostname -f)
|
currentHost=$(hostname -f)
|
||||||
echo "Current host is : ${currentHost}"
|
echo "Current host is : ${currentHost}"
|
||||||
if [ "${primaryHost}" = "NULL" ]; then
|
if [ "${primaryHost}" != "${currentHost}" ]; then
|
||||||
echo "Not primary yet, starting as primary"
|
echo "Not the primary, setting up as replica"
|
||||||
startPrimary=1
|
startPrimary=0
|
||||||
else
|
else
|
||||||
if [ "${primaryHost}" != "${currentHost}" ]; then
|
echo "This is the primary"
|
||||||
echo "Not the primary, setting up as replica"
|
startPrimary=1
|
||||||
startPrimary=0
|
|
||||||
else
|
|
||||||
echo "This is the primary"
|
|
||||||
startPrimary=1
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
43
resources/node/kustomization.yaml
Normal file
43
resources/node/kustomization.yaml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- resources/sa.yaml
|
||||||
|
- resources/statefulset.yaml
|
||||||
|
- resources/svc.yaml
|
||||||
|
|
||||||
|
configMapGenerator:
|
||||||
|
- name: valkey-env
|
||||||
|
literals:
|
||||||
|
- NAMESPACE="default"
|
||||||
|
- VALKEY_ENV="base"
|
||||||
|
- VALKEY_NAME="valkey-node"
|
||||||
|
- VALKEY_SERVICE="valkey"
|
||||||
|
- VALKEY_HEADLESS_SERVICE="valkey-headless"
|
||||||
|
- VALKEY_REPLICAS="4"
|
||||||
|
- VALKEY_PORT="6379"
|
||||||
|
- VALKEY_SENTINEL_PORT="26379"
|
||||||
|
- ALLOW_EMPTY_PASSWORD="yes"
|
||||||
|
- VALKEY_TLS_ENABLED="no"
|
||||||
|
- VALKEY_SENTINEL_TLS_ENABLED="no"
|
||||||
|
- VALKEY_DATA_DIR="/data"
|
||||||
|
- VALKEY_LOG_LEVEL="warning"
|
||||||
|
- VALKEY_QUORUM="2"
|
||||||
|
- name: valkey-config
|
||||||
|
files:
|
||||||
|
- files/conf/replication.conf.tpl
|
||||||
|
- files/conf/sentinel.conf.tpl
|
||||||
|
- name: valkey-scripts
|
||||||
|
files:
|
||||||
|
- files/scripts/common.sh
|
||||||
|
- files/scripts/startSentinel.sh
|
||||||
|
- files/scripts/pre-stop.sh
|
||||||
|
- files/scripts/pre-stop-sentinel.sh
|
||||||
|
- files/scripts/start-node.sh
|
||||||
|
- files/scripts/ping-sentinel.sh
|
||||||
|
- files/scripts/liveness-local.sh
|
||||||
|
- files/scripts/readiness-local.sh
|
||||||
|
|
||||||
|
replacements:
|
||||||
|
- path: ./replacements/services.yaml
|
||||||
|
- path: ./replacements/statefulset.yaml
|
@ -1,6 +1,6 @@
|
|||||||
- source:
|
- source:
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
name: vlone
|
name: valkey-env
|
||||||
fieldPath: data.VALKEY_HEADLESS_SERVICE
|
fieldPath: data.VALKEY_HEADLESS_SERVICE
|
||||||
targets:
|
targets:
|
||||||
- select:
|
- select:
|
||||||
@ -10,7 +10,7 @@
|
|||||||
- metadata.name
|
- metadata.name
|
||||||
- source:
|
- source:
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
name: vlone
|
name: valkey-env
|
||||||
fieldPath: data.VALKEY_SERVICE
|
fieldPath: data.VALKEY_SERVICE
|
||||||
targets:
|
targets:
|
||||||
- select:
|
- select:
|
30
resources/node/replacements/statefulset.yaml
Normal file
30
resources/node/replacements/statefulset.yaml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
- source:
|
||||||
|
kind: ConfigMap
|
||||||
|
name: valkey-env
|
||||||
|
fieldPath: data.VALKEY_REPLICAS
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: valkey-node
|
||||||
|
fieldPaths:
|
||||||
|
- spec.replicas
|
||||||
|
- source:
|
||||||
|
kind: ConfigMap
|
||||||
|
name: valkey-env
|
||||||
|
fieldPath: data.VALKEY_HEADLESS_SERVICE
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: valkey-node
|
||||||
|
fieldPaths:
|
||||||
|
- spec.serviceName
|
||||||
|
- source:
|
||||||
|
kind: ConfigMap
|
||||||
|
name: valkey-env
|
||||||
|
fieldPath: data.VALKEY_NAME
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: StatefulSet
|
||||||
|
name: valkey-node
|
||||||
|
fieldPaths:
|
||||||
|
- metadata.name
|
@ -2,13 +2,12 @@ apiVersion: apps/v1
|
|||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: CHANGE_ME
|
|
||||||
app.kubernetes.io/component: node
|
app.kubernetes.io/component: node
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/managed-by: kustomize
|
app.kubernetes.io/managed-by: kustomize
|
||||||
app.kubernetes.io/name: valkey
|
app.kubernetes.io/name: valkey
|
||||||
app.kubernetes.io/part-of: valkey
|
app.kubernetes.io/part-of: valkey
|
||||||
app.kubernetes.io/version: 8.1.3
|
app.kubernetes.io/version: 8.1.1
|
||||||
name: valkey-node
|
name: valkey-node
|
||||||
spec:
|
spec:
|
||||||
persistentVolumeClaimRetentionPolicy:
|
persistentVolumeClaimRetentionPolicy:
|
||||||
@ -24,19 +23,17 @@ spec:
|
|||||||
app.kubernetes.io/component: node
|
app.kubernetes.io/component: node
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/name: valkey
|
app.kubernetes.io/name: valkey
|
||||||
app: CHANGE_ME
|
|
||||||
serviceName: valkey-headless
|
serviceName: valkey-headless
|
||||||
updateStrategy:
|
updateStrategy:
|
||||||
type: RollingUpdate
|
type: RollingUpdate
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: CHANGE_ME
|
|
||||||
app.kubernetes.io/component: node
|
app.kubernetes.io/component: node
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/name: valkey
|
app.kubernetes.io/name: valkey
|
||||||
app.kubernetes.io/version: 8.1.3
|
app.kubernetes.io/version: 8.1.1
|
||||||
helm.sh/chart: valkey-3.0.7
|
helm.sh/chart: valkey-3.0.7
|
||||||
spec:
|
spec:
|
||||||
shareProcessNamespace: true
|
shareProcessNamespace: true
|
||||||
@ -110,7 +107,7 @@ spec:
|
|||||||
name: valkey-data
|
name: valkey-data
|
||||||
containers:
|
containers:
|
||||||
- name: valkey
|
- name: valkey
|
||||||
image: reg.cadoles.com/dh/valkey/valkey:8.1.3-alpine3.22
|
image: reg.cadoles.com/dh/valkey/valkey:8.1.1-alpine3.21
|
||||||
command:
|
command:
|
||||||
- /opt/scripts/start-node.sh
|
- /opt/scripts/start-node.sh
|
||||||
args:
|
args:
|
||||||
@ -197,7 +194,7 @@ spec:
|
|||||||
- mountPath: /data
|
- mountPath: /data
|
||||||
name: valkey-data
|
name: valkey-data
|
||||||
- name: sentinel
|
- name: sentinel
|
||||||
image: reg.cadoles.com/dh/valkey/valkey:8.1.3-alpine3.22
|
image: reg.cadoles.com/dh/valkey/valkey:8.1.1-alpine3.21
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- /opt/scripts/startSentinel.sh
|
- /opt/scripts/startSentinel.sh
|
||||||
@ -291,8 +288,8 @@ spec:
|
|||||||
runAsGroup: 1001
|
runAsGroup: 1001
|
||||||
fsGroup: 1001
|
fsGroup: 1001
|
||||||
fsGroupChangePolicy: Always
|
fsGroupChangePolicy: Always
|
||||||
#serviceAccount: valkey
|
serviceAccount: valkey
|
||||||
#serviceAccountName: valkey
|
serviceAccountName: valkey
|
||||||
terminationGracePeriodSeconds: 30
|
terminationGracePeriodSeconds: 30
|
||||||
volumes:
|
volumes:
|
||||||
- name: valkey-scripts
|
- name: valkey-scripts
|
||||||
@ -323,6 +320,9 @@ spec:
|
|||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
storage: 8Gi
|
storage: 8Gi
|
||||||
|
volumeMode: Filesystem
|
||||||
|
status:
|
||||||
|
phase: Pending
|
||||||
- apiVersion: v1
|
- apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
@ -338,3 +338,6 @@ spec:
|
|||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
storage: 32Mi
|
storage: 32Mi
|
||||||
|
volumeMode: Filesystem
|
||||||
|
status:
|
||||||
|
phase: Pending
|
@ -2,7 +2,6 @@ apiVersion: v1
|
|||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: CHANGE_ME
|
|
||||||
app.kubernetes.io/component: node
|
app.kubernetes.io/component: node
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/managed-by: kustomize
|
app.kubernetes.io/managed-by: kustomize
|
||||||
@ -21,7 +20,6 @@ spec:
|
|||||||
protocol: TCP
|
protocol: TCP
|
||||||
targetPort: 26379
|
targetPort: 26379
|
||||||
selector:
|
selector:
|
||||||
app: CHANGE_ME
|
|
||||||
app.kubernetes.io/component: node
|
app.kubernetes.io/component: node
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/name: valkey
|
app.kubernetes.io/name: valkey
|
||||||
@ -30,11 +28,10 @@ apiVersion: v1
|
|||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: CHANGE_ME
|
|
||||||
app.kubernetes.io/component: node
|
app.kubernetes.io/component: node
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/managed-by: kustomize
|
app.kubernetes.io/managed-by: kustomize
|
||||||
app.kubernetes.io/name: valkey-headless
|
app.kubernetes.io/name: valkey
|
||||||
app.kubernetes.io/part-of: valkey
|
app.kubernetes.io/part-of: valkey
|
||||||
app.kubernetes.io/version: 8.1.1
|
app.kubernetes.io/version: 8.1.1
|
||||||
name: valkey-headless
|
name: valkey-headless
|
||||||
@ -51,6 +48,5 @@ spec:
|
|||||||
targetPort: valkey-sentinel
|
targetPort: valkey-sentinel
|
||||||
publishNotReadyAddresses: true
|
publishNotReadyAddresses: true
|
||||||
selector:
|
selector:
|
||||||
app: CHANGE_ME
|
|
||||||
app.kubernetes.io/instance: valkey
|
app.kubernetes.io/instance: valkey
|
||||||
app.kubernetes.io/name: valkey
|
app.kubernetes.io/name: valkey
|
Reference in New Issue
Block a user