feat(node): adding node component
Cleaning up the repo
This commit is contained in:
@ -9,12 +9,13 @@
|
||||
{{- $fqdn := printf "%s.%s" $hostname $domain }}
|
||||
{{- $hostid := sha1sum $hostname }}
|
||||
{{- $quorum := env "VALKEY_QUORUM" }}
|
||||
{{- $master_name := env "VALKEY_MASTER_NAME" }}
|
||||
#-REPLICAS:{{ $replicas }}
|
||||
|
||||
dir "/tmp"
|
||||
port {{ $sentinel_port }}
|
||||
sentinel monitor mymaster SENTINEL_MASTER {{ $port }} {{ $quorum }}
|
||||
sentinel down-after-milliseconds mymaster 60000
|
||||
sentinel monitor {{ $master_name }} SENTINEL_MASTER {{ $port }} {{ $quorum }}
|
||||
sentinel down-after-milliseconds {{ $master_name }} 60000
|
||||
|
||||
# User-supplied sentinel configuration:
|
||||
# End of sentinel configuration
|
||||
@ -32,16 +33,17 @@ protected-mode no
|
||||
# gotemplate-pause!
|
||||
user default on nopass sanitize-payload ~* &* +@all
|
||||
# gotemplate-resume!
|
||||
sentinel config-epoch mymaster 0
|
||||
sentinel leader-epoch mymaster 0
|
||||
sentinel config-epoch {{ $master_name }} 0
|
||||
sentinel leader-epoch {{ $master_name }} 0
|
||||
sentinel current-epoch 0
|
||||
|
||||
{{- range $i, $e := until ( int $replicas ) }}
|
||||
{{- $masterName := printf "%s" $master_name}}
|
||||
{{- $ndeHostname := printf "%s-%d" $name $i }}
|
||||
{{- $ndeFQDN := printf "%s.%s" $ndeHostname $domain }}
|
||||
{{- $nodeID := sha1sum $ndeHostname }}
|
||||
{{- if (ne $fqdn $ndeFQDN) }}
|
||||
sentinel {{ printf "known-sentinel mymaster %s %s %s" $ndeFQDN $sentinel_port $nodeID }}
|
||||
sentinel {{ printf "known-replica mymaster %s %s" $ndeFQDN $port }}
|
||||
sentinel {{ printf "known-sentinel %s %s %s %s" $masterName $ndeFQDN $sentinel_port $nodeID }}
|
||||
sentinel {{ printf "known-replica %s %s %s" $masterName $ndeFQDN $port }}
|
||||
{{- end}}
|
||||
{{- end}}
|
@ -15,8 +15,30 @@ pingSentinel() {
|
||||
}
|
||||
|
||||
getPrimaryInfo() {
|
||||
valkey-cli --csv -h ${VALKEY_HEADLESS_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel get-primary-addr-by-name "mymaster"| \
|
||||
awk -F ',' '{ gsub(/"/,"",$0); print $1 " " $2 }'
|
||||
masterName=${VALKEY_MASTER_NAME:-"mymaster"}
|
||||
it="${1:-0}"
|
||||
|
||||
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 ${?}
|
||||
}
|
||||
|
@ -15,7 +15,8 @@ vcli-sentinel() {
|
||||
getFailOverStatus() {
|
||||
# Check if the failover is finished
|
||||
local failoverStatus
|
||||
primaryInfo=$(vcli-sentinel get-primary-addr-by-name "mymaster")
|
||||
sentinelMasterName="${VALKEY_MASTER_NAME:-"mymaster"}"
|
||||
primaryInfo=$(vcli-sentinel get-primary-addr-by-name "${sentinelMasterName}")
|
||||
primaryHost=$(echo ${primaryInfo} | awk -F ' ' '{print $1}')
|
||||
currentHost=$(hostname -f)
|
||||
if [[ "${primaryHost}" != "${currentHost}" ]]; then
|
||||
@ -44,12 +45,13 @@ isPrimary() {
|
||||
}
|
||||
|
||||
if isPrimary && ! getFailOverStatus; then
|
||||
sentinelMasterName="${VALKEY_MASTER_NAME}"
|
||||
echo "I'm the primary and you are stopping me, pausing client connections"
|
||||
#Pausing write connections to avoid data loss"
|
||||
vcli CLIENT PAUSE "22000" WRITE
|
||||
|
||||
echo "Starting failover"
|
||||
vcli-sentinel failover "mymaster"
|
||||
vcli-sentinel failover "${sentinelMasterName}"
|
||||
echo "Waiting for sentinel to complete failover for up to 120s"
|
||||
tmout=120
|
||||
while true ; do
|
@ -12,7 +12,8 @@ pingSentinel() {
|
||||
}
|
||||
|
||||
getPrimaryInfo() {
|
||||
valkey-cli -t 15 --csv -h ${VALKEY_HEADLESS_SERVICE} -p ${VALKEY_SENTINEL_PORT} sentinel get-primary-addr-by-name "mymaster"| \
|
||||
sentinelMasterName="${VALKEY_MASTER_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 }'
|
||||
return ${?}
|
||||
}
|
||||
@ -80,12 +81,17 @@ else
|
||||
echo "Primary host is : ${primaryHost}, port: ${primaryPort}"
|
||||
currentHost=$(hostname -f)
|
||||
echo "Current host is : ${currentHost}"
|
||||
if [ "${primaryHost}" != "${currentHost}" ]; then
|
||||
echo "Not the primary, setting up as replica"
|
||||
startPrimary=0
|
||||
else
|
||||
echo "This is the primary"
|
||||
if [ "${primaryHost}" = "NULL" ]; then
|
||||
echo "Not primary yet, starting as primary"
|
||||
startPrimary=1
|
||||
else
|
||||
if [ "${primaryHost}" != "${currentHost}" ]; then
|
||||
echo "Not the primary, setting up as replica"
|
||||
startPrimary=0
|
||||
else
|
||||
echo "This is the primary"
|
||||
startPrimary=1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
44
components/node/kustomization.yaml
Normal file
44
components/node/kustomization.yaml
Normal file
@ -0,0 +1,44 @@
|
||||
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,20 +1,15 @@
|
||||
- source:
|
||||
kind: ConfigMap
|
||||
name: valkey-env
|
||||
fieldPath: data.VALKEY_HEADLESS_SERVICE
|
||||
targets:
|
||||
- select:
|
||||
kind: Service
|
||||
name: valkey-headless
|
||||
fieldPaths:
|
||||
- metadata.name
|
||||
- source:
|
||||
kind: ConfigMap
|
||||
name: valkey-env
|
||||
fieldPath: data.VALKEY_SERVICE
|
||||
targets:
|
||||
- select:
|
||||
kind: Service
|
||||
name: valkey-headless
|
||||
fieldPaths:
|
||||
- spec.selector.app
|
||||
- select:
|
||||
kind: Service
|
||||
name: valkey
|
||||
fieldPaths:
|
||||
- metadata.name
|
||||
- spec.selector.app
|
@ -11,10 +11,12 @@
|
||||
- source:
|
||||
kind: ConfigMap
|
||||
name: valkey-env
|
||||
fieldPath: data.VALKEY_HEADLESS_SERVICE
|
||||
fieldPath: data.VALKEY_SERVICE
|
||||
targets:
|
||||
- select:
|
||||
kind: StatefulSet
|
||||
name: valkey-node
|
||||
fieldPaths:
|
||||
- spec.serviceName
|
||||
- metadata.labels.app
|
||||
- spec.selector.matchLabels.app
|
||||
- spec.template.metadata.labels.app
|
@ -2,12 +2,13 @@ apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
labels:
|
||||
app: CHANGE_ME
|
||||
app.kubernetes.io/component: node
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/managed-by: kustomize
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/version: 8.1.1
|
||||
app.kubernetes.io/version: 8.1.3
|
||||
name: valkey-node
|
||||
spec:
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
@ -23,17 +24,19 @@ spec:
|
||||
app.kubernetes.io/component: node
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/name: valkey
|
||||
app: CHANGE_ME
|
||||
serviceName: valkey-headless
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: CHANGE_ME
|
||||
app.kubernetes.io/component: node
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/version: 8.1.1
|
||||
app.kubernetes.io/version: 8.1.3
|
||||
helm.sh/chart: valkey-3.0.7
|
||||
spec:
|
||||
shareProcessNamespace: true
|
||||
@ -107,7 +110,7 @@ spec:
|
||||
name: valkey-data
|
||||
containers:
|
||||
- name: valkey
|
||||
image: reg.cadoles.com/dh/valkey/valkey:8.1.1-alpine3.21
|
||||
image: reg.cadoles.com/dh/valkey/valkey:8.1.3-alpine3.22
|
||||
command:
|
||||
- /opt/scripts/start-node.sh
|
||||
args:
|
||||
@ -194,7 +197,7 @@ spec:
|
||||
- mountPath: /data
|
||||
name: valkey-data
|
||||
- name: sentinel
|
||||
image: reg.cadoles.com/dh/valkey/valkey:8.1.1-alpine3.21
|
||||
image: reg.cadoles.com/dh/valkey/valkey:8.1.3-alpine3.22
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- /opt/scripts/startSentinel.sh
|
||||
@ -288,8 +291,8 @@ spec:
|
||||
runAsGroup: 1001
|
||||
fsGroup: 1001
|
||||
fsGroupChangePolicy: Always
|
||||
serviceAccount: valkey
|
||||
serviceAccountName: valkey
|
||||
#serviceAccount: valkey
|
||||
#serviceAccountName: valkey
|
||||
terminationGracePeriodSeconds: 30
|
||||
volumes:
|
||||
- name: valkey-scripts
|
||||
@ -320,9 +323,6 @@ spec:
|
||||
resources:
|
||||
requests:
|
||||
storage: 8Gi
|
||||
volumeMode: Filesystem
|
||||
status:
|
||||
phase: Pending
|
||||
- apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
@ -338,6 +338,3 @@ spec:
|
||||
resources:
|
||||
requests:
|
||||
storage: 32Mi
|
||||
volumeMode: Filesystem
|
||||
status:
|
||||
phase: Pending
|
@ -2,6 +2,7 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: CHANGE_ME
|
||||
app.kubernetes.io/component: node
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/managed-by: kustomize
|
||||
@ -20,6 +21,7 @@ spec:
|
||||
protocol: TCP
|
||||
targetPort: 26379
|
||||
selector:
|
||||
app: CHANGE_ME
|
||||
app.kubernetes.io/component: node
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/name: valkey
|
||||
@ -28,10 +30,11 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: CHANGE_ME
|
||||
app.kubernetes.io/component: node
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/managed-by: kustomize
|
||||
app.kubernetes.io/name: valkey
|
||||
app.kubernetes.io/name: valkey-headless
|
||||
app.kubernetes.io/part-of: valkey
|
||||
app.kubernetes.io/version: 8.1.1
|
||||
name: valkey-headless
|
||||
@ -48,5 +51,6 @@ spec:
|
||||
targetPort: valkey-sentinel
|
||||
publishNotReadyAddresses: true
|
||||
selector:
|
||||
app: CHANGE_ME
|
||||
app.kubernetes.io/instance: valkey
|
||||
app.kubernetes.io/name: valkey
|
@ -1,5 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
components:
|
||||
- resources/node
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Base image
|
||||
FROM golang:tip-alpine3.21 AS builder
|
||||
FROM golang:tip-alpine3.22 AS builder
|
||||
|
||||
# Set directory to known value
|
||||
WORKDIR /app
|
||||
@ -14,7 +14,7 @@ RUN git clone https://github.com/coveooss/gotemplate.git . && \
|
||||
CGO_ENABLED=0 go build
|
||||
|
||||
|
||||
FROM alpine:3.21
|
||||
FROM alpine:3.22
|
||||
#
|
||||
COPY --from=builder /app/gotemplate /gotemplate
|
||||
COPY --from=builder /usr/bin/valkey-cli /valkey-cli
|
||||
|
@ -1,43 +0,0 @@
|
||||
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-node"
|
||||
- VALKEY_HEADLESS_SERVICE="valkey-node-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
|
Reference in New Issue
Block a user