安装redis-cluster(三主三从)

环境介绍

软件 版本
Helm v3.11.3
k8s v1.23.17
redis-cluster v7.2.1
Chat v9.0.7

搭建NFS

1、先搭建一个NFS的SC(只需要SC,不需要pvc),额外开一台虚拟机,搭建NFS服务。假设NFS服务器IP地址为192.168.1.34,共享目录为/data/nfs

2、每台机器安装NFS客户端

$ yum install nfs-utils -y

3、在k8s-node01(192.168.1.34)启动nfs

[root@k8s-node01 ~]# systemctl start nfs-server

4、在k8s-node01(192.168.1.34)查看nfs支持的版本

[root@k8s-node01 ~]# cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

5、在k8s-node01(192.168.1.34)上创建一个共享目录

[root@k8s-node01 ~]# mkdir  -p  /data/nfs

6、在k8s-node01(192.168.134)编辑授权文件,这里网段根据自己主机来定,我这里网段是192.168.1.0/24

[root@k8s-node01 ~]# vim /etc/exports
/data/nfs/ 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

7、在k8s-node01(192.168.1.34)配置生效

[root@k8s-node01 ~]# exportfs -r

8、在k8s-node01(192.168.1.34)重新加载NFS

[root@k8s-node01 ~]# systemctl reload nfs-server

创建SC

1、参考8.4 API资源对象StorageClass章节进行SC创建

$ k get sc

NAME         PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  3m34s

安装redis-cluster

1、下载redis-cluster的chart包,直接下载目录

$ helm pull bitnami/redis-cluster  --untar

2、修改values.yaml,定义sc和密码

$ cd redis-cluster/
$ vi values.yaml
...
...
     22   storageClass: "nfs-client"
     23   redis:
     24     password: "admin123"
...
...

Helm工具实践-1

3、安装

$ cd redis-cluster
$ helm install redis-cluster .

查看状态

$ helm status redis-cluster

NAME: redis-cluster
LAST DEPLOYED: Fri Oct  6 19:45:38 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis-cluster
CHART VERSION: 9.0.7
APP VERSION: 7.2.1** Please be patient while the chart is being deployed **

To get your password run:
    export REDIS_PASSWORD=$(kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)

You have deployed a Redis® Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis® cluster:

1. Run a Redis® pod that you can use as a client:
kubectl run --namespace default redis-cluster-client --rm --tty -i --restart='Never' \
 --env REDIS_PASSWORD=$REDIS_PASSWORD \
--image docker.io/bitnami/redis-cluster:7.2.1-debian-11-r0 -- bash

2. Connect using the Redis® CLI:

redis-cli -c -h redis-cluster -a $REDIS_PASSWORD

查看部署的 redis-cluster 集群

$ helm  list

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
redis-cluster   default         1               2023-10-07 09:37:25.169740093 +0800 CST deployed        redis-cluster-9.0.7     7.2.1

$ k get po

NAME                            READY   STATUS    RESTARTS       AGE
redis-cluster-0                 1/1     Running   0              115s
redis-cluster-1                 1/1     Running   0              115s
redis-cluster-2                 1/1     Running   0              115s
redis-cluster-3                 1/1     Running   0              115s
redis-cluster-4                 1/1     Running   0              115s
redis-cluster-5                 1/1     Running   0              115s

说明:

  • 默认 redis-cluster-0 和 redis-cluster-1 为主从,0主1从
  • 默认 redis-cluster-2 和 redis-cluster-3 为主从,0主1从
  • 默认 redis-cluster-4 和 redis-cluster-5 为主从,0主1从

4、连接 Redis 集群 验证服务

获取 Redis 集群的密码

$ kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d

admin123

将 Redis 的密码存到 linux 的环境变量 REDIS_PASSWORD 中

$ export REDIS_PASSWORD=$(kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)

启动一个临时容器

$ kubectl run --namespace default redis-cluster-client --rm --tty -i --restart='Never' \
 --env REDIS_PASSWORD=$REDIS_PASSWORD \
--image docker.io/bitnami/redis-cluster:7.2.1-debian-11-r0 -- bash

登陆 Redis 集群

$ redis-cli -c -h redis-cluster -a $REDIS_PASSWORD

查看集群状态

$ cluster info
$ cluster nodes

创建key和values,并进行查看

$ set k1 'abc'
$ get k1
$ keys *

应用的升级和回滚

升级

1、安装好的应用,如果再次修改values.yaml(比如修改密码为admin12345),则需要做升级处理

$ cd redis-cluster/
$ vi values.yaml

...
...
  storageClass: "nfs-client"
  redis:
    password: "admin12345"
...
...

2、升级处理

$ cd redis-cluster/
$ export REDIS_PASSWORD=$(kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)
$ helm upgrade  redis-cluster  .  --set password=$REDIS_PASSWORD
$ kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d

admin12345

3、登录Redis集群进行验证,查看修改完密码后,数据是否丢失

$ export REDIS_PASSWORD=$(kubectl get secret --namespace "default" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)
$ kubectl run --namespace default redis-cluster-client --rm --tty -i --restart='Never' \
 --env REDIS_PASSWORD=$REDIS_PASSWORD \
--image docker.io/bitnami/redis-cluster:7.2.1-debian-11-r0 -- bash
$ redis-cli -c -h redis-cluster -a $REDIS_PASSWORD
$ keys *

1) "k1"

4、查看升级记录

$ helm history redis-cluster

REVISION        UPDATED                         STATUS          CHART                   APP VERSION     DESCRIPTION
1               Sat Oct  7 09:37:25 2023        superseded      redis-cluster-9.0.7     7.2.1           Install complete
2               Sat Oct  7 10:00:00 2023        deployed        redis-cluster-9.0.7     7.2.1           Upgrade complete

回滚

1、回滚指定版本

$ helm rollback redis-cluster 1