安装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"
...
...

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