下面的yaml文件使用redis7构建一个3主3从的redis集群,使用openebs存储类做持久化, 2个步骤:
- 部署yaml, 创建出6副本有状态副本
- 初始化redis集群
部署yaml文件
kubectl apply -f redis-cluster.yaml
|
redis-cluster.yaml内容
--- apiVersion: v1 kind: Namespace metadata: name: redis-cluster
--- apiVersion: v1 kind: ConfigMap metadata: annotations: {} name: redis-cluster namespace: redis-cluster data: fix-ip.sh: | #!/bin/sh CLUSTER_CONFIG="/data/nodes.conf" if [ -f ${CLUSTER_CONFIG} ]; then if [ -z "${POD_IP}" ]; then echo "Unable to determine Pod IP address!" exit 1 fi echo "Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}" sed -i.bak -e '/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/'${POD_IP}'/' ${CLUSTER_CONFIG} fi exec "$@" redis.conf: | cluster-enabled yes cluster-config-file /data/nodes.conf cluster-node-timeout 10000 protected-mode no daemonize no pidfile /var/run/redis.pid port 6379 tcp-backlog 511 bind 0.0.0.0 timeout 3600 tcp-keepalive 1 loglevel verbose #logfile /data/redis.log databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data requirepass a12345678 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb lua-time-limit 20000 slowlog-log-slower-than 10000 slowlog-max-len 128 #rename-command FLUSHALL "" latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
--- apiVersion: v1 kind: Service metadata: namespace: redis-cluster name: redis-cluster spec: clusterIP: None ports: - port: 6379 targetPort: 6379 name: client - port: 16379 targetPort: 16379 name: gossip selector: app: redis-cluster data: redis --- apiVersion: apps/v1 kind: StatefulSet metadata: namespace: redis-cluster name: redis-cluster spec: serviceName: redis-cluster replicas: 6 selector: matchLabels: app: redis-cluster data: redis template: metadata: labels: app: redis-cluster data: redis spec: containers: - name: redis image: redis:7.0-alpine ports: - containerPort: 6379 name: client - containerPort: 16379 name: gossip command: ["/etc/redis/fix-ip.sh", "redis-server", "/etc/redis/redis.conf"] env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP volumeMounts: - name: conf mountPath: /etc/redis/ readOnly: false - name: redis-pv-claim mountPath: /data readOnly: false volumes: - name: conf configMap: name: redis-cluster defaultMode: 0755 volumeClaimTemplates: - metadata: name: redis-pv-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: openebs-hostpath
|
创建redis集群
kubectl -n redis-cluster get pods -l data=redis -o jsonpath='{range.items[*]}{.status.podIP}:6379 '
kubectl -n redis-cluster exec -it redis-cluster-0 -- redis-cli --cluster create --cluster-replicas 1 -a a12345678 \ 10.244.7.5:6379 10.244.6.5:6379 10.244.10.6:6379 10.244.9.7:6379 10.244.8.8:6379 10.244.5.54:6379
|