K8S环境部署Redis-cluster
参考
###部署
Redis-sts.yaml
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
| --- apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster namespace: redis-cluster data: update-node.sh: | REDIS_NODES="/data/nodes.conf" sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES} exec "$@" redis.conf: |+ cluster-enabled yes cluster-require-full-coverage no cluster-node-timeout 15000 cluster-config-file /data/nodes.conf cluster-migration-barrier 1 appendonly yes protected-mode no --- apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster namespace: 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:5.0.1-alpine ports: - containerPort: 6379 name: client - containerPort: 16379 name: gossip command: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"] env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP volumeMounts: - name: conf mountPath: /conf readOnly: false - name: data mountPath: /data readOnly: false volumes: - name: conf configMap: name: redis-cluster defaultMode: 0755 volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] storageClassName: nfs resources: requests: storage: 1Gi
|
Redis-svc.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| --- apiVersion: v1 kind: Service metadata: name: redis-cluster namespace: redis-cluster spec: type: ClusterIP ports: - port: 6379 targetPort: 6379 name: client - port: 16379 targetPort: 16379 name: gossip selector: app: redis-cluster
|
主要配置文件和参考中的基本一致,只添加了namespace和storageClass,根据实际情况修改
创建群集
1
| kubectl exec -n redis-cluster -it redis-cluster-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get -n redis-cluster pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 ')
|
相比参考中的命令 增加了 -n
验证群集部署
1
| kubectl exec -n redis-cluster -it redis-cluster-0 -- redis-cli cluster info
|
1
| for x in $(seq 0 5); do echo "redis-cluster-$x"; kubectl exec -n redis-cluster redis-cluster-$x -- redis-cli role; echo; done
|