apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config namespace: mid labels: app: redis-cluster data: redis-cluster.conf: | bind 0.0.0.0 protected-mode yes #redis端口,为了安全设置为6379端口 port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 #redis是否以后台模式运行,必须设置no daemonize no supervised no #redis的pid文件,放到/data目录下 pidfile /data/redis.pid loglevel notice #redis日志文件,放到/data目录下 logfile /data/redis_log databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes #这个文件会放在dir定义的/data目录 dbfilename dump.rdb #数据目录 dir /data #redis集群各节点相互认证的密码,必须配置和下面的requirepass一致 masterauth K4l2kC8Y0Nsep7eS replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 #redis的密码 requirepass K4l2kC8Y0Nsep7eS lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly no #这个文件会放在dir定义的/data目录 appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 #是否启用集群模式,必须去掉注释设为yes cluster-enabled yes #这个文件会放在dir定义的/data目录 cluster-config-file nodes.conf cluster-node-timeout 15000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes --- apiVersion: v1 kind: Service metadata: name: redis-cluster-headless namespace: mid labels: app: redis-cluster spec: selector: app: redis-cluster clusterIP: None ports: - name: redis-cluster port: 6379 --- apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: redis-cluster name: redis-cluster namespace: mid spec: selector: matchLabels: app: redis-cluster #副本数为6个,redis集群模式最少要为6个节点,构成3主3从 replicas: 6 #指定使用service为上面我们创建的无头service的名称 serviceName: redis-cluster-headless template: metadata: labels: app: redis-cluster spec: #定义pod反亲和性,目的让6个pod不在同一个主机上,实现均衡分布,这里我的node节点不够,所以不定义反亲和性 # affinity: # podAntiAffinity: # preferredDuringSchedulingIgnoredDuringExecution: # - weight: 100 # podAffinityTerm: # labelSelector: # matchExpressions: # - key: app # operator: In # values: # - redis-cluster # topologyKey: kubernetes.io/hostname containers: - name: redis-cluster #image: redis:latest image: harbor.uenpay.com/base/redis:6.2.5 imagePullPolicy: IfNotPresent command: - "redis-server" args: - "/etc/redis/redis-cluster.conf" - "--cluster-announce-ip" #这个参数是为了解决pod重启ip变了之后,redis集群状态无法自动同步问题 - "$(POD_IP)" env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP ports: - name: tcp containerPort: 6379 volumeMounts: - name: config mountPath: /etc/redis - name: data mountPath: /data - name: localtime mountPath: /etc/localtime readOnly: true restartPolicy: Always volumes: - name: config configMap: name: redis-cluster-config items: - key: redis-cluster.conf path: redis-cluster.conf - name: localtime hostPath: path: /usr/share/zoneinfo/Asia/Shanghai type: File volumeClaimTemplates: - metadata: name: data spec: accessModes: - ReadWriteOnce # 下面一行不写会用默认存储类 # storageClassName: nfs-storage resources: requests: storage: 10Gi