前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于helm部署Kubernetes下的高可用redis

基于helm部署Kubernetes下的高可用redis

作者头像
用户5166556
发布2020-06-19 17:39:01
2.4K0
发布2020-06-19 17:39:01
举报

笔者用过 helm,它是Kubernetes下的包管理器,相当于apt-get、yum、brew这样的软件工具,用的是 helm(v2)版本,下面所介绍的 helm指的都是 v2 版本。通过使用 helm 解决了安装和部署复杂的 Kubernetes 应用,比如经常使用的 memecache、redis、MySQL。也解决过部分粉丝在用 helm 部署程序过程遇到一些问题,其中有几个粉丝一再建议我写一篇文章介绍下 helm,其实我是不想写的,究其原因有两点,第一、helm 官网和镜像仓库介绍非常详尽,当然安装也非常简单。第二、helm 如果想深入使用,必须搞明白 go 的模板语法,对于大多数用户来说,只是用来管理不同环境的编排文件,现在又要学一门模板语言,有一定的学习成本,所以就这点我是不太认可 helm 的。当然很多人会说,不如直接选择 Kubernetes 集成的 Kustomize,不用安装任何多余程序,即可完成不同环境应用配置和打包,但从本质上来说,helmKustomize 是有一定区别的,Kustomize 利用base+overlay的思想生成最终的描述文件,对原有yaml 编排文件不用怎么修改,即可无缝集成,使用上更简单。而 helm 则又分为仓库、helm 客户端、tiller 服务端,使用过程中,在底层定义模板,外层赋值。使用起来更复杂,但不可否认 helm 更强大,它不仅能够完成不同环境应用的打包和配置,更是对应用进行全生命周期的管理,比如查看历史部署版本、回退、升级等;另外支持应用程序的查找、以及应用程序依赖关系定制化等功能。之前介绍过 Kustomize 的使用,下文结合 redis-ha 安装部署介绍下 helm,使你对 Kustomizehelm 之间的功能点有一个更清楚的认识。

安装helm

  • helm 客户端安装

下载:wget https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz 下载完成后解压:tar xf helm-v2.15.2-linux-amd64.tar.gz && cp linux-amd64/helm /usr/bin 至此就完成了 helm 的安装。

  • tiller安装

创建命名空间以及账户权限

代码语言:javascript
复制
helm init --service-account tiller --tiller-namespace kube-system

至此就完成 tiller 的安装,helm 本身是一个二进制文件,可以安装在 kubernetes 集群内部,也可以安装外部,但 tiller 必须安装在集群内部。helm 安装完成之后能够跟 Kubernetes 集群进行交互完成 tiller 安装。笔者暂时没有搭建 helm 远程仓库,暂时通过使用本地和官方提供仓库完成 chart 存储。具体交互过程见下图所示:

  • helm :客户端,管理本地 chart 仓库,管理 Chart,与 tiller 服务器交互,实例查询安装卸载等操作。
  • tiller:服务端,作为 pod 运行在集群中,接受 helm 发来的 chartsconfig合并生成release
  • RepoChart仓库,也就是底层的模板文件,你可能会有疑问,明明是 yaml 编排文件,到这里怎么变成了 Chart???它到底是怎样一种存在,请看下图,其实思想非常简单,helm 通过 Chatyaml 编排文件进行了模板化,我们只需要在外层赋值就完成了内部编排文件的动态变化。

helm安装部署高可用redis-ha

  • 查看 helm 仓库地址,如下图所示:

当然如果因为网络问题,导致不能下载,可以通过 helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 添加阿里云仓库地址。

  • 查看redis版本,这里我们直接部署 redis-ha 版本
  • 拉取 redis chart 到本地
代码语言:javascript
复制
helm fetch stable/redis-ha --untar --untardir ./

查看 chart 文件格式,内层是编排模板文件、最外层是赋值文件

打开 values.yaml,对 values 进行修改,我这里总共修改了如下几处:

因为我的集群计算节点个数小于 pod 数量,所以改成了 false

我是用了 nfs 作为 pvc 所以做了如下修改,这一点也是很多其它同学容器出错的地方,因为没有创建动态 pvc 导致 pod 无法正常启动,下面会专门说明。

  • 安装部署 redis-ha如下图所示,即完成 redis-ha 的部署。

获取 pod 信息,可以发现,基于哨兵模式的高可用 redis 已经运行起来,如下图所示:

如上所示,简单几步已经 redis-ha 的部署,但是部署完成之后如何使用呢,其实使用方式跟你过去区别不大,而且 helm 本身会提示你如何连接和使用 redis,执行helm status redis-ha 通过下图可以看出如何连接使用 redis,我这里不在过多赘述。

关于redis-ha持久化问题

大多数底层基础数据服务,都离不开一个话题,数据的持久化;既然持久化,那么对应到 Kubernetes 中就是 pvc,持久化工具很多,比如常见的ceph、gfs、nfs等,本文使用的是 nfs storageClass,很多同学在使用过程中,一再咨询为啥 pvc 一直提示 unbound; 最终导致服务无法正常运行,这个时候建议你看下为什么不能绑定,大致原因如下三种:

  • 没有声明 pv 或者声明了 pv 但是 accessModes 有问题,人家要求的模式是 RWO,但是你声明的确是 RWX,自然永远无法绑定。
  • 使用了动态 storageClass,但是名称不对,有很多同学 storageClass: "manager-nfs-client"是从网上粘贴过来的,但是本地根本没有这个名称,自然一直提示无法绑定。可以通过如下命令查看:
  • 最后一种就是使用了 storageClass,但是根本没有安装动态置备程序,自然不会自动创建 pvc,当然有了 helm 可以非常快速完成置备程序的安装,比如安装 nfs 自动置备程序,当然前提是你已经通过 yum 安装 nfs。具体命令如下所示:helm install stable/nfs-client-provisioner --set nfs.server=111.112.18.44 --set nfs.path=/home/share 当然如果不使用 helm,也可以通过 Kubernetes 资源对象 Deployment+StorageClass 形式安装。

总结

本文主要讲解 helm 整体架构介绍以及安装使用、快速部署 Redis 高可用方案 Sentinel(哨兵)模式,以及部署过程中可能出现的问题进行了总结分析。如有问题请留言或者关注后拉你进群讨论。希望能够帮助到大家,谢谢阅读!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装helm
  • helm安装部署高可用redis-ha
  • 关于redis-ha持久化问题
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档