首页 运维干货Kubernetes部署redis集群

Kubernetes部署redis集群

运维派是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai

部署方式

Statefulset
Service & depolyment
对于redis,mysql这种有状态的服务,我们使用statefulset方式为首选.我们这边主要就是介绍statefulset这种方式。

statefulset 的设计原理模型:

  • 拓扑状态:
    应用的多个实例之间不是完全对等的关系,这个应用实例的启动必须按照某些顺序启动,比如应用的主节点 A 要先于从节点 B 启动。而如果你把 A 和 B 两个Pod删除掉,他们再次被创建出来是也必须严格按照这个顺序才行,并且,新创建出来的Pod,必须和原来的Pod的网络标识一样,这样原先的访问者才能使用同样的方法,访问到这个新的Pod

  • 存储状态:
    应用的多个实例分别绑定了不同的存储数据.对于这些应用实例来说,Pod A第一次读取到的数据,和隔了十分钟之后再次读取到的数据,应该是同一份,哪怕在此期间Pod A被重新创建过.一个数据库应用的多个存储实例。

存储卷

了解statefulset状态后,你应该知道要为数据准备一个存储卷了,创建方式有静态方式和动态方式,静态方式就是手动创建PV、PVC,然后POD进行进行调用即可。我们这里使用动态nfs作为挂载卷,可以参考上文:部署NFS动态StorageClass

准备名称空间

我这里使用了sts-app名称空间来部署redis,所以必须先创建该名称空间,你也可以不创建使用默认的default名称空间。

准备redis配置文件

redis配置文件使用configmap方式进行挂载,如果将配置封装到docker image中的话,俺么每次修改配置就需要重新docker build。个人觉得比较麻烦,所以使用configmap方式挂载配置。

fix-ip.sh 脚本的作用用于当redis集群某pod重建后Pod IP发生变化,在/data/nodes.conf中将新的Pod IP替换原Pod IP。不然集群会出问题。

准备redis statsfulset文件

应用配置

稍等片刻查看redis是否已经运行。

初始化redis集群

如上redis 实例已经全部处于Running状态了。因此我们可以来初始化集群了,如下步骤:

redis-trib.rb必须使用ip进行初始化redis集群,使用域名会报如下错误!因此这里使用dig +short获取pod IP。

附上Dockerfile

redis-trib.rb工具可以去redis源码中拷贝一个到当前目录,然后构建镜像。

本文作者: Pyker
本文链接: https://www.ipyker.com/2019/07/17/redis-cluster.html

本文链接:http://www.yunweipai.com/36338.html

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2012-2020 YUNWEIPAI.COM - 运维派
扫二维码
扫二维码
返回顶部