# 1. nfs-redis-data的nfs存储类
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
k8s.kuboard.cn/storageType: nfs_client_provisioner
name: nfs-redis-data
parameters:
archiveOnDelete: 'false'
provisioner: nfs-nfs-redis-data
reclaimPolicy: Retain
volumeBindingMode: Immediate
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations: {}
labels:
app: eip-nfs-nfs-redis-data
name: eip-nfs-nfs-redis-data
namespace: kube-system
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: eip-nfs-nfs-redis-data
strategy:
type: Recreate
template:
metadata:
creationTimestamp: null
labels:
app: eip-nfs-nfs-redis-data
spec:
containers:
- env:
- name: PROVISIONER_NAME
value: nfs-nfs-redis-data
- name: NFS_SERVER
value: 172.16.109.178
- name: NFS_PATH
value: /data
image: 'eipwork/nfs-subdir-external-provisioner:v4.0.2'
imagePullPolicy: IfNotPresent
name: nfs-client-provisioner
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /persistentvolumes
name: nfs-client-root
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: eip-nfs-client-provisioner
serviceAccountName: eip-nfs-client-provisioner
terminationGracePeriodSeconds: 30
volumes:
- name: nfs-client-root
persistentVolumeClaim:
claimName: nfs-pvc-nfs-redis-data
---
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/bound-by-controller: 'yes'
finalizers:
- kubernetes.io/pv-protection
name: nfs-pv-nfs-redis-data
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 20Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: nfs-pvc-nfs-redis-data
namespace: kube-system
nfs:
path: /data
server: 172.16.109.178
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-storageclass-provisioner
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: 'yes'
finalizers:
- kubernetes.io/pvc-protection
name: nfs-pvc-nfs-redis-data
namespace: kube-system
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
storageClassName: nfs-storageclass-provisioner
volumeMode: Filesystem
volumeName: nfs-pv-nfs-redis-data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
可直接通过kuboard UI页面直接创建。
# 2. configmap.yaml
apiVersion: v1
data:
redis.conf: |
appendonly yes
protected-mode no
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
cluster-node-timeout 5000
dir /var/lib/redis
port 6379
kind: ConfigMap
metadata:
name: redis-cluster-configmap
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 3. StatefulSet.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-app
spec:
serviceName: redis-cluster-service
replicas: 6
selector:
matchLabels:
app: redis
appCluster: redis-cluster
template:
metadata:
labels:
app: redis
appCluster: redis-cluster
spec:
containers:
- name: redis
image: redis:latest
imagePullPolicy: IfNotPresent
command:
- "redis-server"
args:
- "/etc/redis/redis.conf"
- "--protected-mode"
- "no"
resources:
requests:
cpu: "100m"
memory: "100Mi"
ports:
- name: redis
containerPort: 6379
protocol: "TCP"
- name: cluster
containerPort: 16379
protocol: "TCP"
volumeMounts:
- name: redis-conf
mountPath: /etc/redis
- name: redis-pv-claim
mountPath: /var/lib/redis
volumes:
- name: redis-conf
configMap:
name: redis-cluster-configmap
items:
- key: "redis.conf"
path: "redis.conf"
volumeClaimTemplates:
- metadata:
name: redis-pv-claim
spec:
accessModes: [ "ReadWriteMany","ReadWriteOnce"]
resources:
requests:
storage: 1G
storageClassName: nfs-redis-data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 4. Service.yaml
apiVersion: v1
kind: Service
metadata:
annotations: {}
name: redis-app
spec:
ports:
- name: redis-port
port: 6379
protocol: TCP
targetPort: 6379
selector:
app: redis
appCluster: redis-cluster
type: NodePort
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 5. 构建集群
找到机器的IP执行构建集群
redis-cli --cluster create \
10.244.169.181:6379 \
10.244.169.182:6379 \
10.244.36.101:6379 \
10.244.169.179:6379 \
10.244.36.106:6379 \
10.244.169.178:6379 \
--cluster-replicas 1
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
redis-trib create --replicas 1 \
`dig +short redis-app-0.redis-service.demo-redis.svc.cluster.local`:6379 \
`dig +short redis-app-1.redis-service.demo-redis.svc.cluster.local`:6379 \
`dig +short redis-app-2.redis-service.demo-redis.svc.cluster.local`:6379 \
`dig +short redis-app-3.redis-service.demo-redis.svc.cluster.local`:6379 \
`dig +short redis-app-4.redis-service.demo-redis.svc.cluster.local`:6379 \
`dig +short redis-app-5.redis-service.demo-redis.svc.cluster.local`:6379
1
2
3
4
5
6
7
2
3
4
5
6
7
root@redis-app-0:/data# redis-cli --cluster create \
> 10.244.169.181:6379 \
> 10.244.169.182:6379 \
> 10.244.36.101:6379 \
> 10.244.169.179:6379 \
> 10.244.36.106:6379 \
> 10.244.169.178:6379 \
> --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.244.36.106:6379 to 10.244.169.181:6379
Adding replica 10.244.169.178:6379 to 10.244.169.182:6379
Adding replica 10.244.169.179:6379 to 10.244.36.101:6379
M: 9bcba06b9c362aaca5550dd64ee87c5f77509b3b 10.244.169.181:6379
slots:[0-5460] (5461 slots) master
M: 8420ddbaae4e568378a128491821338d1ff60b0e 10.244.169.182:6379
slots:[5461-10922] (5462 slots) master
M: 00c738cc5804e9e292f3978767486499ec5b7dee 10.244.36.101:6379
slots:[10923-16383] (5461 slots) master
S: ae98709e96acac33c9c435bb3de6a9c9f9bb9702 10.244.169.179:6379
replicates 00c738cc5804e9e292f3978767486499ec5b7dee
S: b1507f447bf674b8e91df3f8d7f94a158ec9e62b 10.244.36.106:6379
replicates 9bcba06b9c362aaca5550dd64ee87c5f77509b3b
S: 4625ed3e0a057911f4bf396c428528f873f1c4bc 10.244.169.178:6379
replicates 8420ddbaae4e568378a128491821338d1ff60b0e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 10.244.169.181:6379)
M: 9bcba06b9c362aaca5550dd64ee87c5f77509b3b 10.244.169.181:6379
slots:[0-5460] (5461 slots) master
root@redis-app-0:/data# redis-cli
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:38
cluster_stats_messages_pong_sent:44
cluster_stats_messages_sent:82
cluster_stats_messages_ping_received:39
cluster_stats_messages_pong_received:38
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:82
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 6. 测试
redis-app-0执行:
root@redis-app-0:/data# redis-cli -c
127.0.0.1:6379> set test 123
-> Redirected to slot [6918] located at 10.244.169.182:6379
OK
1
2
3
4
2
3
4
redis-app-4执行:
root@redis-app-4:/data# redis-cli -c
127.0.0.1:6379> get test
-> Redirected to slot [6918] located at 10.244.169.182:6379
"123"
1
2
3
4
2
3
4