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再新建

 可以看到集群挂了

 

posted @ 2025-06-04 10:41  苦逼yw  阅读(89)  评论(0)    收藏  举报