在今天的讨论中,我们将深入研究如何将Redis数据库迁移到云端,以便更好地利用云计算的优势提高数据管理的灵活性。
Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis支持多种数据结构,如字符串、列表、集合、散列等,具有高性能、低延迟、持久化等特点。
在Kubernetes(K8S)中部署Redis是一项常见的任务,因为Redis是一个高性能的键值存储数据库,非常适合用于缓存、消息队列等场景。本文将分别介绍如何在K8S集群中部署单机Redis和Redis集群。
一、部署单机Redis
步骤一:创建ConfigMap
首先,我们需要创建一个ConfigMap,用来存储和管理Redis的相关配置。
apiVersion: v1 kind: ConfigMap metadata: name: redis-single-config data: redis.conf: | daemonize no bind 0.0.0.0 port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 pidfile /data/redis-server.pid logfile /data/redis.log loglevel notice 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 dbfilename dump.rdb dir /data slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 appendonly yes 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 lua-time-limit 5000 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 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 requirepass redis#single#test
步骤二:创建Deployment
接下来,我们需要创建一个Deployment,用来定义Redis的副本数量、镜像版本等相关信息。
apiVersion: apps/v1 kind: Deployment metadata: name: redis-single spec: replicas: 1 selector: matchLabels: app: redis-single template: metadata: labels: app: redis-single spec: initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis-single image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/redis.conf subPath: redis.conf command: [ "redis-server" ,"/usr/local/etc/redis/redis.conf" ] env: - name: TZ value: "Asia/Shanghai" volumes: - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai - name: redis-data hostPath: path: /var/lib/docker/redis/single type: DirectoryOrCreate - name: redis-config configMap: name: redis-single-config items: - key: redis.conf path: redis.conf
在这个文件中,我们定义了一个名为redis-single
的Deployment,它使用了之前创建的ConfigMap中的配置文件,并将其挂载到容器的/usr/local/etc/redis/redis.conf
路径下。此外,我们还将容器的/data
目录挂载到宿主机的/var/lib/docker/redis/single
目录。配置initContainers
的目的是为了解决启动时出现的两个警告。
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
步骤三:创建Service
然后,我们还需要创建一个Service,用来将K8S集群中运行的Redis实例暴露为可访问的服务。
apiVersion: v1 kind: Service metadata: name: service-redis-single labels: app: redis-single spec: selector: app: redis-single ports: - name: redis-single port: 6379 targetPort: 6379 nodePort: 30000 type: NodePort
步骤四:验证单机Redis
- 首先,使用Redis可视化工具连接到刚部署的单机Redis上,验证Redis是否正常。
- 接下来,将副本数量调整为0,模拟Redis宕机情况。此时与Redis已断开连接。
- 然后,将副本数量恢复,模拟Redis宕机后重启。此时与Redis重新建立连接,功能使用正常。
小结
以上就是在K8S中部署单机Redis的相关步骤。通过这些步骤,我们成功地使用无状态的Deployment部署了一个可用的单机Redis。当然,我们也可以使用StatefulSet来部署单机Redis,两者之间的区别不大,这里就不再赘述。
二、部署6节点Redis集群
步骤一:创建ConfigMap
与单机版类似,我们需要创建一个ConfigMap来存储和管理Redis的相关配置。在这里,我们将创建6个配置文件,分别对应Redis集群中的6个节点,主要区别在于端口号的不同。
apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config data: redis-cluster-0.conf: | port 7111 cluster-announce-bus-port 17111 pidfile /data/redis-7111.pid logfile /data/redis-7111.log dbfilename dump-7111.rdb appendfilename "appendonly-7111.aof" cluster-config-file nodes-7111.conf protected-mode no tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no loglevel notice databases 1 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 masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes 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 cluster-enabled yes cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-1.conf: | port 7112 cluster-announce-bus-port 17112 pidfile /data/redis-7112.pid logfile /data/redis-7112.log dbfilename dump-7112.rdb appendfilename "appendonly-7112.aof" cluster-config-file nodes-7112.conf ... redis-cluster-2.conf: | port 7113 cluster-announce-bus-port 17113 pidfile /data/redis-7113.pid logfile /data/redis-7113.log dbfilename dump-7113.rdb appendfilename "appendonly-7113.aof" cluster-config-file nodes-7113.conf ... redis-cluster-3.conf: | port 7114 cluster-announce-bus-port 17114 pidfile /data/redis-7114.pid logfile /data/redis-7114.log dbfilename dump-7114.rdb appendfilename "appendonly-7114.aof" cluster-config-file nodes-7114.conf ... redis-cluster-4.conf: | port 7115 cluster-announce-bus-port 17115 pidfile /data/redis-7115.pid logfile /data/redis-7115.log dbfilename dump-7115.rdb appendfilename "appendonly-7115.aof" cluster-config-file nodes-7115.conf ... redis-cluster-5.conf: | port 7116 cluster-announce-bus-port 17116 pidfile /data/redis-7116.pid logfile /data/redis-7116.log dbfilename dump-7116.rdb appendfilename "appendonly-7116.aof" cluster-config-file nodes-7116.conf ...
步骤二:创建Deployment
接下来,我们需要创建6个Deployment,分别对应Redis集群中的6个节点。主要区别在于使用ConfigMap中的配置文件的不同和containers
中暴露的端口不同。redis-cluster-0
参考如下:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-0 name: redis-cluster-0 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-0 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-0 spec: volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7111 protocol: TCP - name: election containerPort: 17111 protocol: TCP env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-0.conf" ] args: - "--cluster-announce-ip" - "$(POD_IP)"
步骤三:创建Service
然后,我们还需要创建一个Service,用来将K8S集群中运行的Redis实例暴露为可访问的服务。这里同样需要创建6个Service,分别对应步骤二中的6个Deployment。
apiVersion: v1 kind: Service metadata: labels: app: redis-cluster-0 name: redis-cluster-0 spec: selector: app: redis-cluster-0 type: NodePort sessionAffinity: None ports: - name: redis-7111 port: 7111 targetPort: 7111 nodePort: 30201 - name: redis-17111 port: 17111 targetPort: 17111 nodePort: 30211 --- apiVersion: v1 kind: Service metadata: labels: app: redis-cluster-1 name: redis-cluster-1 spec: selector: app: redis-cluster-1 type: NodePort sessionAffinity: None ports: - name: redis-7112 port: 7112 targetPort: 7112 nodePort: 30202 - name: redis-17112 port: 17112 targetPort: 17112 nodePort: 30212 --- apiVersion: v1 kind: Service metadata: labels: app: redis-cluster-2 name: redis-cluster-2 spec: selector: app: redis-cluster-2 type: NodePort sessionAffinity: None ports: - name: redis-7113 port: 7113 targetPort: 7113 nodePort: 30203 - name: redis-17113 port: 17113 targetPort: 17113 nodePort: 30213 --- apiVersion: v1 kind: Service metadata: labels: app: redis-cluster-3 name: redis-cluster-3 spec: selector: app: redis-cluster-3 type: NodePort sessionAffinity: None ports: - name: redis-7114 port: 7114 targetPort: 7114 nodePort: 30204 - name: redis-17114 port: 17114 targetPort: 17114 nodePort: 30214 --- apiVersion: v1 kind: Service metadata: labels: app: redis-cluster-4 name: redis-cluster-4 spec: selector: app: redis-cluster-4 type: NodePort sessionAffinity: None ports: - name: redis-7115 port: 7115 targetPort: 7115 nodePort: 30205 - name: redis-17115 port: 17115 targetPort: 17115 nodePort: 30215 --- apiVersion: v1 kind: Service metadata: labels: app: redis-cluster-5 name: redis-cluster-5 spec: selector: app: redis-cluster-5 type: NodePort sessionAffinity: None ports: - name: redis-7116 port: 7116 targetPort: 7116 nodePort: 30206 - name: redis-17116 port: 17116 targetPort: 17116 nodePort: 30216
步骤四:Redis集群初始化
执行以下命令,查看pod的名称和ip:
kubectl get pods -o wide
执行以下命令创建Redis集群:
kubectl exec -it redis-cluster-0-65cb5487d-kn86p -- redis-cli -a redis#cluster#test --cluster create --cluster-replicas 1 109.233.87.199:7111 109.233.87.203:7112 109.233.87.198:7113 109.233.87.197:7114 109.233.87.205:7115 109.233.87.207:7116
返回类似以下信息表示初始化成功。
[OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
步骤五:验证Redis集群
最后,我们可以使用redis-cli工具来验证redis集群是否正常工作。首先,进入任意一个pod内,这里以redis-cluster-0
为例:
kubectl exec -it redis-cluster-0-65cb5487d-kn86p -- /bin/bash
然后,使用以下命令连接到redis集群:
redis-cli -a redis#cluster#test -c -h <HOST_IP> -p 30201
在redis-cli中,可以执行各种redis命令来测试集群的功能。
小结
在K8S中部署Redis集群的相关步骤已经介绍完毕。通过这些步骤,我们成功地使用无状态的Deployment部署了一个可用的Redis集群。当然,我们还可以使用StatefulSet来部署Redis集群,两者之间的区别不大,相关配置文件参考详见附录。
附录1:StatefulSet方式部署Redis集群(暴露1个端口)
apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config data: redis-cluster.conf: | daemonize no supervised no protected-mode no bind 0.0.0.0 port 6379 cluster-announce-bus-port 16379 cluster-enabled yes appendonly yes cluster-node-timeout 5000 dir /data cluster-config-file /data/nodes.conf requirepass redis#cluster#test masterauth redis#cluster#test --- apiVersion: v1 kind: Service metadata: name: redis-cluster-service spec: selector: app: redis-cluster clusterIP: None ports: - name: redis-6379 port: 6379 - name: redis-16379 port: 16379 --- apiVersion: v1 kind: Service metadata: name: redis-cluster-service-access spec: selector: app: redis-cluster type: NodePort sessionAffinity: None ports: - name: redis-6379 port: 6379 targetPort: 6379 nodePort: 30201 --- apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: redis-cluster name: redis-cluster spec: serviceName: redis-cluster-service replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: labels: app: redis-cluster spec: terminationGracePeriodSeconds: 30 containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "redis-server", "/etc/redis/redis-cluster.conf" ] args: - "--cluster-announce-ip" - "$(POD_IP)" env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" ports: - name: redis containerPort: 6379 protocol: TCP - name: cluster containerPort: 16379 protocol: TCP volumeMounts: - name: redis-conf mountPath: /etc/redis - name: pvc-data mountPath: /data volumes: - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai - name: redis-conf configMap: name: redis-cluster-config items: - key: redis-cluster.conf path: redis-cluster.conf volumeClaimTemplates: - metadata: name: pvc-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
附录2:StatefulSet方式部署Redis集群(暴露6个端口)
apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config data: redis-cluster-0.conf: | protected-mode no port 7111 cluster-announce-bus-port 17111 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7111.pid loglevel notice logfile /data/redis-7111.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7111.rdb dir /data masterauth qxb#redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass qxb#redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7111.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 cluster-enabled yes cluster-config-file nodes-7111.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-1.conf: | protected-mode no port 7112 cluster-announce-bus-port 17112 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7112.pid loglevel notice logfile /data/redis-7112.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7112.rdb dir /data masterauth qxb#redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass qxb#redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7112.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 cluster-enabled yes cluster-config-file nodes-7112.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-2.conf: | protected-mode no port 7113 cluster-announce-bus-port 17113 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7113.pid loglevel notice logfile /data/redis-7113.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7113.rdb dir /data masterauth qxb#redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass qxb#redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7113.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 cluster-enabled yes cluster-config-file nodes-7113.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-3.conf: | protected-mode no port 7114 cluster-announce-bus-port 17114 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7114.pid loglevel notice logfile /data/redis-7114.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7114.rdb dir /data masterauth qxb#redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass qxb#redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7114.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 cluster-enabled yes cluster-config-file nodes-7114.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-4.conf: | protected-mode no port 7115 cluster-announce-bus-port 17115 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7115.pid loglevel notice logfile /data/redis-7115.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7115.rdb dir /data masterauth qxb#redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass qxb#redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7115.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 cluster-enabled yes cluster-config-file nodes-7115.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-5.conf: | protected-mode no port 7116 cluster-announce-bus-port 17116 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7116.pid loglevel notice logfile /data/redis-7116.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7116.rdb dir /data masterauth qxb#redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass qxb#redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7116.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 cluster-enabled yes cluster-config-file nodes-7116.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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-0 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-0 type: NodePort sessionAffinity: None ports: - name: redis-30201 port: 7111 targetPort: 7111 nodePort: 30201 - name: redis-30211 port: 17111 targetPort: 17111 nodePort: 30211 --- apiVersion: v1 kind: Service metadata: name: redis-cluster-1 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-1 type: NodePort sessionAffinity: None ports: - name: redis-30202 port: 7112 targetPort: 7112 nodePort: 30202 - name: redis-30212 port: 17112 targetPort: 17112 nodePort: 30212 --- apiVersion: v1 kind: Service metadata: name: redis-cluster-2 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-2 type: NodePort sessionAffinity: None ports: - name: redis-30203 port: 7113 targetPort: 7113 nodePort: 30203 - name: redis-30213 port: 17113 targetPort: 17113 nodePort: 30213 --- apiVersion: v1 kind: Service metadata: name: redis-cluster-3 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-3 type: NodePort sessionAffinity: None ports: - name: redis-30204 port: 7114 targetPort: 7114 nodePort: 30204 - name: redis-30214 port: 17114 targetPort: 17114 nodePort: 30214 --- apiVersion: v1 kind: Service metadata: name: redis-cluster-4 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-4 type: NodePort sessionAffinity: None ports: - name: redis-30205 port: 7115 targetPort: 7115 nodePort: 30205 - name: redis-30215 port: 17115 targetPort: 17115 nodePort: 30215 --- apiVersion: v1 kind: Service metadata: name: redis-cluster-5 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-5 type: NodePort sessionAffinity: None ports: - name: redis-30206 port: 7116 targetPort: 7116 nodePort: 30206 - name: redis-30216 port: 17116 targetPort: 17116 nodePort: 30216 --- apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis-cluster replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: annotations: statefulset.kubernetes.io/pod-name: $(POD_NAME) labels: app: redis-cluster spec: volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/$(POD_NAME).conf" ] args: - --cluster-announce-ip - $(POD_IP)
三、Redis集群存在的问题以及解决方案
尽管我们按照步骤二已经成功部署了Redis集群,但这种方式仅适用于在K8S集群内部使用Redis。如果我们使用可视化工具连接刚部署的Redis集群,一旦发生节点切换,集群将无法正常工作。
想要解决这个问题,我们可以按照如下步骤进行修改我们的部署文件。
步骤一:设置hostNetwork
首先,在Deployment或者StatefulSet中设置hostNetwork
为true
,使pod与宿主机共享网络命名空间。
spec: template: spec: hostNetwork: true
设置hostNetwork
字段为true
可能会带来以下风险:
安全风险:Pod将共享宿主机的网络命名空间,这意味着Pod中的容器可以直接访问宿主机上的其他进程和服务。这可能导致潜在的安全漏洞和攻击。
性能风险:使用宿主机的IP地址可能会导致网络延迟和性能下降,因为Pod需要在宿主机上进行网络通信。
配置复杂性:使用宿主机的IP地址可能会增加K8S集群的配置复杂性,因为需要确保Pod可以正确地访问宿主机上的网络资源。
为了规避这些风险,可以采取以下措施:
- 仅在必要时使用
hostNetwork
:只有在需要完全控制容器网络时才应使用hostNetwork
。在大多数情况下,建议使用默认的Pod网络模式。 - 限制Pod中的访问权限:通过设置适当的SELinux上下文、AppArmor策略等,可以限制Pod中容器的访问权限,从而降低安全风险。
- 使用CNI插件:CNI(Container Network Interface)插件可以帮助你更好地管理容器网络,提供更多的网络隔离和安全性。常见的CNI插件有Calico、Flannel、Weave等。
- 监控和日志记录:定期检查Kubernetes集群中的网络流量和日志,以便及时发现和解决潜在的安全问题。
步骤二:配置环境变量HOST_IP
接下来,我们需要在containers
的env
中配置环境变量HOST_IP
,以便让pod获取到宿主机的IP地址。
- name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP
同时,还需要修改containers
中args
的参数为HOST_IP
。
args: - --cluster-announce-ip - $(HOST_IP)
步骤三:使用宿主机IP初始化Redis集群
使用宿主机ip和集群中任意一个pod的名称执行以下命令:
kubectl exec -it redis-cluster-0-6bb87c5c79-cnrtg -- redis-cli -a redis#cluster#test --cluster create --cluster-replicas 1 10.x.xxx.xx:7111 10.x.xxx.xx:7112 10.x.xxx.xx:7113 10.x.xxx.xx:7114 10.x.xxx.xx:7115 10.x.xxx.xx:7116
步骤四:验证Redis集群
使用可视化工具连接重新部署的Redis集群,验证Redis集群是否正常。
小结
以上就是在K8S中部署Redis集群的相关步骤。通过这些步骤,我们成功地部署了一个可以在K8S集群外可访问的Redis集群,解决了非K8S项目如何使用K8S中Redis集群的问题。由于我们使用了hostNetwork
,使pod与宿主机共享网络命名空间,这会带来一定的安全风险,需要结合实际情况进行充分考虑。
附录1:Deployment方式部署Redis集群(暴露6个端口)
apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config data: redis-cluster-0.conf: | protected-mode no port 7111 cluster-announce-bus-port 17111 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7111.pid loglevel notice logfile /data/redis-7111.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7111.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7111.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 cluster-enabled yes cluster-config-file nodes-7111.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-1.conf: | protected-mode no port 7112 cluster-announce-bus-port 17112 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7112.pid loglevel notice logfile /data/redis-7112.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7112.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7112.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 cluster-enabled yes cluster-config-file nodes-7112.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-2.conf: | protected-mode no port 7113 cluster-announce-bus-port 17113 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7113.pid loglevel notice logfile /data/redis-7113.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7113.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7113.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 cluster-enabled yes cluster-config-file nodes-7113.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-3.conf: | protected-mode no port 7114 cluster-announce-bus-port 17114 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7114.pid loglevel notice logfile /data/redis-7114.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7114.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7114.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 cluster-enabled yes cluster-config-file nodes-7114.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-4.conf: | protected-mode no port 7115 cluster-announce-bus-port 17115 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7115.pid loglevel notice logfile /data/redis-7115.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7115.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7115.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 cluster-enabled yes cluster-config-file nodes-7115.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-5.conf: | protected-mode no port 7116 cluster-announce-bus-port 17116 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7116.pid loglevel notice logfile /data/redis-7116.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7116.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7116.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 cluster-enabled yes cluster-config-file nodes-7116.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-0 name: redis-cluster-0 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-0 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-0 spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7111 protocol: TCP - name: election containerPort: 17111 protocol: TCP env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-0.conf" ] args: - "--cluster-announce-ip" - "$(HOST_IP)" --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-1 name: redis-cluster-1 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-1 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-1 spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7112 protocol: TCP - name: election containerPort: 17112 protocol: TCP env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-1.conf" ] args: - "--cluster-announce-ip" - "$(HOST_IP)" --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-2 name: redis-cluster-2 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-2 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-2 spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7113 protocol: TCP - name: election containerPort: 17113 protocol: TCP env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-2.conf" ] args: - "--cluster-announce-ip" - "$(HOST_IP)" --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-3 name: redis-cluster-3 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-3 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-3 spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7114 protocol: TCP - name: election containerPort: 17114 protocol: TCP env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-3.conf" ] args: - "--cluster-announce-ip" - "$(HOST_IP)" --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-4 name: redis-cluster-4 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-4 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-4 spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7115 protocol: TCP - name: election containerPort: 17115 protocol: TCP env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-4.conf" ] args: - "--cluster-announce-ip" - "$(HOST_IP)" --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: redis-cluster-5 name: redis-cluster-5 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: redis-cluster-5 strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: redis-cluster-5 spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ ports: - name: redis containerPort: 7116 protocol: TCP - name: election containerPort: 17116 protocol: TCP env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/redis-cluster-5.conf" ] args: - "--cluster-announce-ip" - "$(HOST_IP)"
附录2:StatefulSet方式部署Redis集群(暴露6个端口)
apiVersion: v1 kind: ConfigMap metadata: name: redis-cluster-config data: redis-cluster-0.conf: | protected-mode no port 7111 cluster-announce-bus-port 17111 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7111.pid loglevel notice logfile /data/redis-7111.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7111.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7111.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 cluster-enabled yes cluster-config-file nodes-7111.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-1.conf: | protected-mode no port 7112 cluster-announce-bus-port 17112 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7112.pid loglevel notice logfile /data/redis-7112.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7112.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7112.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 cluster-enabled yes cluster-config-file nodes-7112.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-2.conf: | protected-mode no port 7113 cluster-announce-bus-port 17113 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7113.pid loglevel notice logfile /data/redis-7113.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7113.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7113.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 cluster-enabled yes cluster-config-file nodes-7113.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-3.conf: | protected-mode no port 7114 cluster-announce-bus-port 17114 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7114.pid loglevel notice logfile /data/redis-7114.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7114.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7114.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 cluster-enabled yes cluster-config-file nodes-7114.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-4.conf: | protected-mode no port 7115 cluster-announce-bus-port 17115 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7115.pid loglevel notice logfile /data/redis-7115.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7115.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7115.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 cluster-enabled yes cluster-config-file nodes-7115.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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 redis-cluster-5.conf: | protected-mode no port 7116 cluster-announce-bus-port 17116 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /data/redis-7116.pid loglevel notice logfile /data/redis-7116.log databases 1 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump-7116.rdb dir /data masterauth redis#cluster#test slave-serve-stale-data yes slave-read-only yes 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 requirepass redis#cluster#test lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly-7116.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 cluster-enabled yes cluster-config-file nodes-7116.conf cluster-node-timeout 15000 cluster-migration-barrier 1 cluster-require-full-coverage yes 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: apps/v1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis-cluster replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: annotations: statefulset.kubernetes.io/pod-name: $(POD_NAME) labels: app: redis-cluster spec: hostNetwork: true volumes: - name: redis-data hostPath: path: /var/lib/docker/redis/cluster type: DirectoryOrCreate - name: redis-config configMap: name: redis-cluster-config - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai initContainers: - name: init-0 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sysctl", "-w", "net.core.somaxconn=511" ] securityContext: privileged: true - name: init-1 image: busybox imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File command: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ] securityContext: privileged: true containers: - name: redis image: redis:6.0.8 imagePullPolicy: IfNotPresent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /usr/local/etc/redis/ env: - name: HOST_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: TZ value: "Asia/Shanghai" command: [ "redis-server" ,"/usr/local/etc/redis/$(POD_NAME).conf" ] args: - --cluster-announce-ip - $(HOST_IP)
结论
这篇文章详细介绍了在K8S环境中部署Redis单机和Redis集群的具体步骤。通过阅读全文,我们可以发现,我们并没有使用PVC来存储Redis的相关数据,而是直接将其挂载到了宿主机上。这样做的目的是为了方便Redis的迁移。相较于传统的手动部署方式,使用K8S可以更便捷、快速地完成Redis集群的部署和管理。