当前位置:首页 » 《随便一记》 » 正文

K8S如何部署Redis(单机、集群)

1 人参与  2024年03月23日 16:20  分类 : 《随便一记》  评论

点击全文阅读


3.png

在今天的讨论中,我们将深入研究如何将Redis数据库迁移到云端,以便更好地利用云计算的优势提高数据管理的灵活性。

Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息代理。Redis支持多种数据结构,如字符串、列表、集合、散列等,具有高性能、低延迟、持久化等特点。

在Kubernetes(K8S)中部署Redis是一项常见的任务,因为Redis是一个高性能的键值存储数据库,非常适合用于缓存、消息队列等场景。本文将分别介绍如何在K8S集群中部署单机Redis和Redis集群。

一、部署单机Redis

步骤一:创建ConfigMap

首先,我们需要创建一个ConfigMap,用来存储和管理Redis的相关配置。

apiVersion: v1kind: ConfigMapmetadata:  name: redis-single-configdata:  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/v1kind: Deploymentmetadata:  name: redis-singlespec:  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的目的是为了解决启动时出现的两个警告。

1.png

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: v1kind: Servicemetadata:  name: service-redis-single  labels:    app: redis-singlespec:  selector:    app: redis-single  ports:    - name: redis-single      port: 6379      targetPort: 6379      nodePort: 30000  type: NodePort

步骤四:验证单机Redis

首先,使用Redis可视化工具连接到刚部署的单机Redis上,验证Redis是否正常。

2.png

接下来,将副本数量调整为0,模拟Redis宕机情况。此时与Redis已断开连接。

3.png

4.png

然后,将副本数量恢复,模拟Redis宕机后重启。此时与Redis重新建立连接,功能使用正常。

6.png

小结

以上就是在K8S中部署单机Redis的相关步骤。通过这些步骤,我们成功地使用无状态的Deployment部署了一个可用的单机Redis。当然,我们也可以使用StatefulSet来部署单机Redis,两者之间的区别不大,这里就不再赘述。

二、部署6节点Redis集群

步骤一:创建ConfigMap

与单机版类似,我们需要创建一个ConfigMap来存储和管理Redis的相关配置。在这里,我们将创建6个配置文件,分别对应Redis集群中的6个节点,主要区别在于端口号的不同。

apiVersion: v1kind: ConfigMapmetadata:  name: redis-cluster-configdata:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-0  name: redis-cluster-0spec:  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: v1kind: Servicemetadata:  labels:    app: redis-cluster-0  name: redis-cluster-0spec:  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: v1kind: Servicemetadata:  labels:    app: redis-cluster-1  name: redis-cluster-1spec:  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: v1kind: Servicemetadata:  labels:    app: redis-cluster-2  name: redis-cluster-2spec:  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: v1kind: Servicemetadata:  labels:    app: redis-cluster-3  name: redis-cluster-3spec:  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: v1kind: Servicemetadata:  labels:    app: redis-cluster-4  name: redis-cluster-4spec:  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: v1kind: Servicemetadata:  labels:    app: redis-cluster-5  name: redis-cluster-5spec:  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

1.png

执行以下命令创建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

2.png

返回类似以下信息表示初始化成功。

[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命令来测试集群的功能。

1.png

2.png

小结

在K8S中部署Redis集群的相关步骤已经介绍完毕。通过这些步骤,我们成功地使用无状态的Deployment部署了一个可用的Redis集群。当然,我们还可以使用StatefulSet来部署Redis集群,两者之间的区别不大,相关配置文件参考详见附录。

附录1:StatefulSet方式部署Redis集群(暴露1个端口)

apiVersion: v1kind: ConfigMapmetadata:  name: redis-cluster-configdata:  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: v1kind: Servicemetadata:  name: redis-cluster-servicespec:  selector:    app: redis-cluster  clusterIP: None  ports:    - name: redis-6379      port: 6379    - name: redis-16379      port: 16379---apiVersion: v1kind: Servicemetadata:  name: redis-cluster-service-accessspec:  selector:    app: redis-cluster  type: NodePort  sessionAffinity: None  ports:    - name: redis-6379      port: 6379      targetPort: 6379      nodePort: 30201---apiVersion: apps/v1kind: StatefulSetmetadata:  labels:    app: redis-cluster  name: redis-clusterspec:  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: v1kind: ConfigMapmetadata:  name: redis-cluster-configdata:  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: v1kind: Servicemetadata:  name: redis-cluster-0spec:  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: v1kind: Servicemetadata:  name: redis-cluster-1spec:  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: v1kind: Servicemetadata:  name: redis-cluster-2spec:  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: v1kind: Servicemetadata:  name: redis-cluster-3spec:  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: v1kind: Servicemetadata:  name: redis-cluster-4spec:  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: v1kind: Servicemetadata:  name: redis-cluster-5spec:  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/v1kind: StatefulSetmetadata:  name: redis-clusterspec:  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集群,一旦发生节点切换,集群将无法正常工作。

3.png

想要解决这个问题,我们可以按照如下步骤进行修改我们的部署文件。

步骤一:设置hostNetwork

首先,在Deployment或者StatefulSet中设置hostNetworktrue,使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

接下来,我们需要在containersenv中配置环境变量HOST_IP,以便让pod获取到宿主机的IP地址。

- name: HOST_IP  valueFrom:    fieldRef:      fieldPath: status.hostIP

同时,还需要修改containersargs的参数为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集群是否正常。

1.png

小结

以上就是在K8S中部署Redis集群的相关步骤。通过这些步骤,我们成功地部署了一个可以在K8S集群外可访问的Redis集群,解决了非K8S项目如何使用K8S中Redis集群的问题。由于我们使用了hostNetwork,使pod与宿主机共享网络命名空间,这会带来一定的安全风险,需要结合实际情况进行充分考虑。

附录1:Deployment方式部署Redis集群(暴露6个端口)

apiVersion: v1kind: ConfigMapmetadata:  name: redis-cluster-configdata:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-0  name: redis-cluster-0spec:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-1  name: redis-cluster-1spec:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-2  name: redis-cluster-2spec:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-3  name: redis-cluster-3spec:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-4  name: redis-cluster-4spec:  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/v1kind: Deploymentmetadata:  labels:    app: redis-cluster-5  name: redis-cluster-5spec:  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: v1kind: ConfigMapmetadata:  name: redis-cluster-configdata:  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/v1kind: StatefulSetmetadata:  name: redis-clusterspec:  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集群的部署和管理。


点击全文阅读


本文链接:http://zhangshiyu.com/post/84413.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1