rancher2搭建redis集群
这里基于nfs动态搭建
一、创建存储类
2.5版本是在商店里,2.6版本是在chart应用创建nfs-client-provisioner
二、创建配置类
redis.conf
port 6379
# 开启集群
cluster-enabled yes
cluster-require-full-coverage no
cluster-config-file /data/nodes.conf
cluster-node-timeout 5000
cluster-migration-barrier 1
# 开启持久化
appendonly yes
protected-mode no
# 密码
requirepass 123456789
update-node.sh
#!/bin/sh
REDIS_NODES="/data/nodes.conf"
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES}
exec "$@"
update-node.sh是为了pod启动和创建时,把IP地址写入到集群nodes配置中
三、创建工作负载
3.1 配置映射端口
3.2 设置环境变量和启动命令
环境变量,变量名:POD_IP 键:status.podIP
环境变量,变量名:POD_NAME 键:metadata.name
启动命令:/conf/update-node.sh redis-server /conf/redis.conf
3.3 设置配置文件卷
3.4 配置持久卷模板
3.5 添加标签
注意这里的标签是pod下的标签
键:app
值:redis-cluster
四、构建redis集群
启动pod,一直加到6个。通过kubectl get pod -n storage获取pod名称
在k8s命令界面执行一下命令(注意下方-n后面的命名空间参数):
kubectl exec -it redis-cluster-0 -n storage -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -n storage -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP} ') -a 123456789
网上使用的是下面这种命令,在rancher2.6版本的时候,使用这个命令,在读取redis集群的ip和端口的时候,最后会生成一个这样的集群地址:10.42.0.54:6379 10.42.2.90:6379 10.42.1.66:6379 10.42.0.53:6379 10.42.2.89:6379 10.42.1.65:6379 :6379
最后一个会生成无ip的地址,会影响构建,这里使用go-template命令去构建:
kubectl exec -it redis-cluster-0 -n storage -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -n storage -l app=redis-cluster -o go-template --template='{{range.items}}{{.status.podIP}}:6379 {{end}}') -a 123456789
验证集群
#查看单个节点
kubectl exec -it redis-cluster-0 -n storage -- redis-cli -a 123456789 cluster info
#查看集群角色
for x in $(seq 0 5); do echo "redis-cluster-$x"; kubectl exec redis-cluster-$x -n storage -- redis-cli -a 123456789 role; echo; done