参考文档:
https://www.jb51.net/article/275999.htm
https://www.jb51.net/article/276003.htm
https://blog.csdn.net/sebeefe/article/details/124473706
https://blog.csdn.net/jiaohuizhuang6019/article/details/134499235
https://www.zhihu.com/question/448458021/answer/2870967376
https://zhuanlan.zhihu.com/p/445316238
数据目录初始化
1[zhangcong@master ~]$ mkdir -p /home/zhangcong/dev/redis-cluster/data/{1..6}
2[zhangcong@master ~]$ chmod -R 777 redis-cluster
k8s中创建redis集群的namespace
1[zhangcong@master k8s]$ kubectl create ns redis-cluster
创建存储的配置
[zhangcong@master k8s]$ vim redis-cluster-storage.yaml
1
2apiVersion: storage.k8s.io/v1
3kind: StorageClass
4metadata:
5 name: redis-sc
6 namespace: redis-cluster
7provisioner: nfs-storage
8---
9apiVersion: v1
10kind: PersistentVolume
11metadata:
12 name: redis-pv1
13 namespace: redis-cluster
14spec:
15 storageClassName: redis-sc
16 capacity:
17 storage: 2Gi
18 accessModes:
19 - ReadWriteMany
20 hostPath:
21 path: /home/zhangcong/dev/redis-cluster/data/1
22---
23apiVersion: v1
24kind: PersistentVolume
25metadata:
26 name: redis-pv2
27 namespace: redis-cluster
28spec:
29 storageClassName: redis-sc
30 capacity:
31 storage: 2Gi
32 accessModes:
33 - ReadWriteMany
34 hostPath:
35 path: /home/zhangcong/dev/redis-cluster/data/2
36---
37apiVersion: v1
38kind: PersistentVolume
39metadata:
40 name: redis-pv3
41 namespace: redis-cluster
42spec:
43 storageClassName: redis-sc
44 capacity:
45 storage: 2Gi
46 accessModes:
47 - ReadWriteMany
48 hostPath:
49 path: /home/zhangcong/dev/redis-cluster/data/3
50---
51apiVersion: v1
52kind: PersistentVolume
53metadata:
54 name: redis-pv4
55 namespace: redis-cluster
56spec:
57 storageClassName: redis-sc
58 capacity:
59 storage: 2Gi
60 accessModes:
61 - ReadWriteMany
62 hostPath:
63 path: /home/zhangcong/dev/redis-cluster/data/4
64---
65apiVersion: v1
66kind: PersistentVolume
67metadata:
68 name: redis-pv5
69 namespace: redis-cluster
70spec:
71 storageClassName: redis-sc
72 capacity:
73 storage: 2Gi
74 accessModes:
75 - ReadWriteMany
76 hostPath:
77 path: /home/zhangcong/dev/redis-cluster/data/5
78---
79apiVersion: v1
80kind: PersistentVolume
81metadata:
82 name: redis-pv6
83 namespace: redis-cluster
84spec:
85 storageClassName: redis-sc
86 capacity:
87 storage: 2Gi
88 accessModes:
89 - ReadWriteMany
90 hostPath:
91 path: /home/zhangcong/dev/redis-cluster/data/6
应用配置:
1[zhangcong@master k8s]$ kubectl apply -f redis-cluster-storage.yaml
创建headless服务
[zhangcong@master k8s]$ vim redis-cluster-service.yaml
内容如下:
1apiVersion: v1
2kind: Service
3metadata:
4 labels:
5 k8s.kuboard.cn/layer: db
6 k8s.kuboard.cn/name: redis
7 name: redis-headless-service
8 namespace: redis-cluster
9spec:
10 ports:
11 - name: redis-port
12 port: 6379
13 protocol: TCP
14 targetPort: 6379
15 selector:
16 k8s.kuboard.cn/layer: db
17 k8s.kuboard.cn/name: redis
18 clusterIP: None
19---
20apiVersion: v1
21kind: Service
22metadata:
23 labels:
24 k8s.kuboard.cn/layer: db
25 k8s.kuboard.cn/name: redis
26 name: redis-service
27 namespace: redis-cluster
28spec:
29 ports:
30 - name: redis-port
31 port: 6379
32 protocol: TCP
33 targetPort: 6379
34 selector:
35 k8s.kuboard.cn/layer: db
36 k8s.kuboard.cn/name: redis
37 type: NodePort
应用配置:
1[zhangcong@master k8s]$ kubectl apply -f redis-cluster-service.yaml
2service/redis-headless-service created
网络访问:pod名称.headless名称.namespace名称.svc.cluster.local
即:pod名称.redis-headless-service.redis-cluster.svc.cluster.local
创建redis对应pod集群
创建好Headless service后,就可以利用StatefulSet创建Redis 集群节点
vim redis-cluster-deploy.yaml
内容如下:
1kind: ConfigMap
2apiVersion: v1
3metadata:
4 name: redis-configmap
5 namespace: redis-cluster
6data:
7 redisConfig: |
8 # 一般配置
9 bind 0.0.0.0
10 port 6379
11 daemonize no
12 requirepass 123456
13 appendonly yes
14 # 集群配置
15 cluster-enabled yes
16 cluster-config-file nodes.conf
17 cluster-node-timeout 5000
18---
19apiVersion: apps/v1
20kind: StatefulSet
21metadata:
22 name: redis
23 namespace: redis-cluster
24 labels:
25 k8s.kuboard.cn/layer: db
26 k8s.kuboard.cn/name: redis
27spec:
28 replicas: 6
29 selector:
30 matchLabels:
31 k8s.kuboard.cn/layer: db
32 k8s.kuboard.cn/name: redis
33 serviceName: redis-headless-service
34 template:
35 metadata:
36 labels:
37 k8s.kuboard.cn/layer: db
38 k8s.kuboard.cn/name: redis
39 spec:
40 terminationGracePeriodSeconds: 20
41 containers:
42 - name: redis
43 image: docker.io/library/redis:7.2.4
44 command: ["redis-server", "/etc/redis/redis.conf"]
45 ports:
46 - name: redis
47 containerPort: 6379
48 protocol: "TCP"
49 - name: cluster
50 containerPort: 16379
51 protocol: "TCP"
52 volumeMounts:
53 - name: "redis-conf"
54 mountPath: "/etc/redis"
55 - name: "redis-data"
56 mountPath: "/data"
57 volumes:
58 - name: "redis-conf"
59 configMap:
60 name: redis-configmap
61 items:
62 - key: "redisConfig"
63 path: "redis.conf"
64 volumeClaimTemplates:
65 - metadata:
66 name: redis-data
67 spec:
68 accessModes: [ "ReadWriteMany" ]
69 resources:
70 requests:
71 storage: 1Gi
72 storageClassName: redis-sc
应用配置:
[zhangcong@master k8s]$ kubectl apply -f redis-cluster-deploy.yaml
查看 pod
1[zhangcong@master k8s]$ kubectl get all -n redis-cluster -o wide
2NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
3pod/redis-0 1/1 Running 0 46s 10.244.0.111 master.com <none> <none>
4pod/redis-1 1/1 Running 0 43s 10.244.0.112 master.com <none> <none>
5pod/redis-2 1/1 Running 0 40s 10.244.0.113 master.com <none> <none>
6pod/redis-3 1/1 Running 0 37s 10.244.0.114 master.com <none> <none>
7pod/redis-4 1/1 Running 0 35s 10.244.0.115 master.com <none> <none>
8pod/redis-5 1/1 Running 0 32s 10.244.0.116 master.com <none> <none>
创建redis集群,查看集群状态
1
2### 进入任意一个pod
3[zhangcong@master k8s]$ kubectl -n redis-cluster exec -it redis-0 -- /bin/sh
4
5
6### 创建master节点(任选三个节点)
7
8# redis-cli --cluster create 10.244.0.111:6379 10.244.0.112:6379 10.244.0.113:6379 10.244.0.114:6379 10.244.0.115:6379 10.244.0.116:6379 --cluster-replicas 1 -a 123456
9......
10......
11......
12Can I set the above configuration? (type 'yes' to accept): yes
13......
14......
15......
16[OK] All nodes agree about slots configuration.
17>>> Check for open slots...
18>>> Check slots coverage...
19[OK] All 16384 slots covered.
20### 以上表示创建集群成功
21
22
23### 进入集群中,查看集群状态
24# redis-cli -a 123456
25Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
26127.0.0.1:6379> CLUSTER NODES
271b3f389f5277355abf442c3ce4379c25636541c6 10.244.0.116:6379@16379 slave fa68666c16412f3c5b4f14391be4863a189c4a06 0 1705759378000 2 connected
28cb864d798272e4ce2144d4f75ee514c929d889f1 10.244.0.114:6379@16379 slave 669a7052925dba198d4291a7e381e9d31cc447fe 0 1705759379857 3 connected
29669a7052925dba198d4291a7e381e9d31cc447fe 10.244.0.113:6379@16379 master - 0 1705759378849 3 connected 10923-16383
30bb99c0071e850fc9480966f2e61b3d6e848dc748 10.244.0.111:6379@16379 myself,master - 0 1705759378000 1 connected 0-5460
31fa68666c16412f3c5b4f14391be4863a189c4a06 10.244.0.112:6379@16379 master - 0 1705759379000 2 connected 5461-10922
328448862f61fc780c955aa5a0e26860a641fd08ca 10.244.0.115:6379@16379 slave bb99c0071e850fc9480966f2e61b3d6e848dc748 0 1705759378000 1 connected
评论