Skip to content

Commit 0213f33

Browse files
authored
redis distributed helm (#20)
1 parent b566a73 commit 0213f33

File tree

9 files changed

+316
-33
lines changed

9 files changed

+316
-33
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: v1
2+
appVersion: "1.0"
3+
description: Helm chart deploys redis distributed instance
4+
name: redis-distributed
5+
version: 0.0.1
6+
icon: "https://zop.dev/logo.png"
7+
maintainers:
8+
- name: ZopDev
9+
url: zop.dev
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: "{{ .Release.Name }}-redis-configmap"
5+
namespace: {{ .Release.Namespace | quote }}
6+
labels:
7+
app.kubernetes.io/component: master
8+
data:
9+
master.conf: |
10+
dir /data
11+
rename-command FLUSHDB ""
12+
rename-command FLUSHALL ""
13+
14+
replica.conf: |
15+
dir /data
16+
slave-read-only yes
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: "{{ .Release.Name }}-redis-headless-service"
5+
namespace: {{ .Release.Namespace | quote }}
6+
labels:
7+
app.kubernetes.io/component: master
8+
spec:
9+
type: ClusterIP
10+
clusterIP: None
11+
ports:
12+
- name: redis
13+
port: 6379
14+
targetPort: 6379
15+
selector:
16+
app: "{{ .Release.Name }}-redis"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: "{{ .Release.Name }}-redis-values-configmap"
5+
namespace: {{ .Release.Namespace | quote }}
6+
labels:
7+
app.kubernetes.io/component: master
8+
data:
9+
REDIS_PORT: "6379"
10+
REDIS_HOST: "{{ .Release.Name }}-redis-headless-service"
11+
REDIS_URL: {{ printf "redis://%s-redis-headless-service:6379" .Release.Name }}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: {{ .Release.Name }}-redis
5+
namespace: {{ .Release.Namespace }}
6+
labels:
7+
app.kubernetes.io/part-of: redis
8+
app: "{{ .Release.Name }}-redis"
9+
spec:
10+
replicas: 1
11+
serviceName: "{{ .Release.Name }}-redis-headless-service"
12+
selector:
13+
matchLabels:
14+
app.kubernetes.io/part-of: redis
15+
app: "{{ .Release.Name }}-redis"
16+
updateStrategy:
17+
type: {{ .Values.updateStrategy.type }}
18+
template:
19+
metadata:
20+
labels:
21+
app.kubernetes.io/part-of: redis
22+
app: "{{ .Release.Name }}-redis"
23+
spec:
24+
containers:
25+
- name: redis
26+
image: {{ .Values.image }}
27+
command:
28+
- /bin/bash
29+
- -c
30+
- |
31+
if [[ ! -f /etc/redis/master.conf ]];then
32+
cp /etc/redis/mounted-etc/master.conf /etc/redis/master.conf
33+
fi
34+
ARGS=("--port" "${REDIS_PORT}")
35+
ARGS+=("--protected-mode" "no")
36+
ARGS+=("--include" "/etc/redis/master.conf")
37+
redis-server "${ARGS[@]}"
38+
resources:
39+
requests:
40+
memory: {{ .Values.master.resources.requests.memory }}
41+
cpu: {{ .Values.master.resources.requests.cpu }}
42+
limits:
43+
memory: {{ .Values.master.resources.limits.memory }}
44+
cpu: {{ .Values.master.resources.limits.cpu }}
45+
env:
46+
- name: REDIS_REPLICATION_MODE
47+
value: master
48+
- name: REDIS_PORT
49+
value: "6379"
50+
ports:
51+
- name: redis
52+
containerPort: 6379
53+
livenessProbe:
54+
exec:
55+
command:
56+
- redis-cli
57+
- ping
58+
initialDelaySeconds: 30
59+
periodSeconds: 10
60+
timeoutSeconds: 5
61+
failureThreshold: 3
62+
readinessProbe:
63+
exec:
64+
command:
65+
- redis-cli
66+
- ping
67+
initialDelaySeconds: 10
68+
periodSeconds: 10
69+
timeoutSeconds: 5
70+
failureThreshold: 3
71+
volumeMounts:
72+
- name: {{ .Release.Name }}-redis-persistent-storage
73+
mountPath: /data
74+
- name: redis-config
75+
mountPath: /etc/redis/mounted-etc
76+
volumes:
77+
- name: redis-config
78+
configMap:
79+
name: "{{ .Release.Name }}-redis-configmap"
80+
volumeClaimTemplates:
81+
- metadata:
82+
name: {{ .Release.Name }}-redis-persistent-storage
83+
spec:
84+
accessModes:
85+
- ReadWriteOnce
86+
resources:
87+
requests:
88+
storage: {{ .Values.master.persistence.size }}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
{{- if .Values.slave.enable }}
2+
apiVersion: apps/v1
3+
kind: StatefulSet
4+
metadata:
5+
name: {{ .Release.Name }}-redis-slave
6+
namespace: {{ .Release.Namespace }}
7+
labels:
8+
app.kubernetes.io/part-of: redis
9+
app: "{{ .Release.Name }}-redis"
10+
spec:
11+
replicas: {{ .Values.slave.count }}
12+
serviceName: "{{ .Release.Name }}-redis-headless-service"
13+
selector:
14+
matchLabels:
15+
app.kubernetes.io/part-of: redis
16+
app: "{{ .Release.Name }}-redis"
17+
updateStrategy:
18+
type: {{ .Values.updateStrategy.type }}
19+
template:
20+
metadata:
21+
labels:
22+
app.kubernetes.io/part-of: redis
23+
app: "{{ .Release.Name }}-redis"
24+
spec:
25+
containers:
26+
- name: redis
27+
image: {{ .Values.image }}
28+
command:
29+
- /bin/bash
30+
- -c
31+
- |
32+
if [[ ! -f /etc/redis/replica.conf ]]; then
33+
cp /etc/redis/mounted-etc/replica.conf /etc/redis/replica.conf
34+
fi
35+
until redis-cli -h "${REDIS_MASTER_HOST}" -p "${REDIS_MASTER_PORT_NUMBER}" ping; do
36+
echo "Waiting for Redis master to be available..."
37+
sleep 5
38+
done
39+
ARGS=("--port" "${REDIS_PORT}")
40+
ARGS+=("--slaveof" "${REDIS_MASTER_HOST}" "${REDIS_MASTER_PORT_NUMBER}")
41+
ARGS+=("--protected-mode" "no")
42+
ARGS+=("--include" "/etc/redis/replica.conf")
43+
redis-server "${ARGS[@]}"
44+
resources:
45+
requests:
46+
memory: {{ .Values.slave.resources.requests.memory }}
47+
cpu: {{ .Values.slave.resources.requests.cpu }}
48+
limits:
49+
memory: {{ .Values.slave.resources.limits.memory }}
50+
cpu: {{ .Values.slave.resources.limits.cpu }}
51+
env:
52+
- name: REDIS_REPLICATION_MODE
53+
value: slave
54+
- name: REDIS_MASTER_HOST
55+
value: "{{ .Release.Name }}-redis-headless-service"
56+
- name: REDIS_PORT
57+
value: "6379"
58+
- name: REDIS_MASTER_PORT_NUMBER
59+
value: "6379"
60+
ports:
61+
- name: redis
62+
containerPort: 6379
63+
livenessProbe:
64+
exec:
65+
command:
66+
- redis-cli
67+
- ping
68+
initialDelaySeconds: 30
69+
periodSeconds: 10
70+
timeoutSeconds: 5
71+
failureThreshold: 3
72+
readinessProbe:
73+
exec:
74+
command:
75+
- redis-cli
76+
- ping
77+
initialDelaySeconds: 10
78+
periodSeconds: 10
79+
timeoutSeconds: 5
80+
failureThreshold: 3
81+
volumeMounts:
82+
- name: {{ .Release.Name }}-redis-persistent-storage
83+
mountPath: /data
84+
- name: redis-config
85+
mountPath: /etc/redis/mounted-etc
86+
volumes:
87+
- name: redis-config
88+
configMap:
89+
name: "{{ .Release.Name }}-redis-configmap"
90+
volumeClaimTemplates:
91+
- metadata:
92+
name: {{ .Release.Name }}-redis-persistent-storage
93+
spec:
94+
accessModes:
95+
- ReadWriteOnce
96+
resources:
97+
requests:
98+
storage: {{ .Values.slave.persistence.size }}
99+
{{- end }}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
updateStrategy:
2+
type: RollingUpdate
3+
4+
image: "redis:6.2.13"
5+
6+
master:
7+
resources:
8+
requests:
9+
cpu: "100m"
10+
memory: "500Mi"
11+
limits:
12+
cpu: "500m"
13+
memory: "1000Mi"
14+
15+
persistence:
16+
size: 10Gi
17+
18+
slave:
19+
enable : true
20+
count: 1
21+
resources:
22+
requests:
23+
cpu: "100m"
24+
memory: "500Mi"
25+
limits:
26+
cpu: "500m"
27+
memory: "1000Mi"
28+
29+
persistence:
30+
size: 10Gi

0 commit comments

Comments
 (0)