k8s 部署redis cluster
1、创建configmap存储redis配置
vim redis-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config data: redis.conf: | cluster-enabled yes cluster-config-file /data/nodes.conf cluster-node-timeout 5000 appendonly yes protected-mode no
2、创建statefulset(带持久化存储)
vim redis-statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis-cluster replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: labels: app: redis-cluster spec: containers: - name: redis image: redis:7.0 ports: - containerPort: 6379 volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /etc/redis command: ["redis-server"] args: ["/etc/redis/redis.conf"] volumes: - name: redis-config configMap: name: redis-cluster-config volumeClaimTemplates: - metadata: name: redis-data spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "nfs-client" # 替换为你的 StorageClass resources: requests: storage: 1Gi
3、初始化 Redis Cluster
等待所有 Pod 启动后,执行集群初始化:
查看所有redis所有的pod的ip+端口。注意结尾多了:6379
kubectl get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 '

进入任意一个 Pod
kubectl exec -it redis-cluster-0 -- bash
# 在 Pod 内执行集群初始化命令
其中10.244.66.233:6379 10.244.89.227:6379 10.244.66.234:6379 10.244.89.228:6379 10.244.66.235:6379 10.244.89.229:6379是上面命令得到的redis所有pod的ip+端口
redis-cli --cluster create \ 10.244.66.233:6379 10.244.89.227:6379 10.244.66.234:6379 10.244.89.228:6379 10.244.66.235:6379 10.244.89.229:6379 \ --cluster-replicas 1 \ --cluster-yes


输出应显示 [OK] All 16384 slots covered。表示创建成功
查询集群状态信息,任一节点都可运行
redis-cli --cluster check 10.244.66.233:6379

4、验证
验证一:删除2个pod再查看数据是否存在
结果:删除2个pod后查看数据还存在
在容器中设置键值,可以看到k1存到10.244.66.233即redis-cluster-0,k2存到10.244.66.234即redis-cluster-2

删除后redis-cluster-0和redis-cluster-2后查看数据是否存在,结果还存在

再次查看集群状态,发现redis-cluster-0和redis-cluster-2还是master角色,虽然他们的IP变了


验证二:删除所有的pod和statefulset再新建查看数据是否存在
键值在验证1中已经设置,所以直接删除所有的pod和statefulset再新建

可以看到集群挂了

浙公网安备 33010602011771号