谈谈 Redis 云原生实践经验|探班火山引擎开发者社区 Meetup 讲师:解宁篇

技术

点击上方👆蓝字关注我们!

作为云原生生态系统的核心,Kubernetes 可自动部署、管理和扩展容器化应用程序,降低繁琐的人工部署和运维过程。随着 Kubernetes 日渐成熟,越来越多的企业开始将 Kubernetes 作为新的基础设施,在其上部署和维护应用及服务。

3 月 27 日,在火山引擎开发者社区首次 Meetup 上,火山引擎研发工程师解宁将为大家带来《Redis 云原生实践》的分享,小火山提前采访了解宁,带大家一窥精彩的内容分享

小火山:能否简单介绍一下自己?日常有什么爱好?平时是如何技术保持输入的?

解宁 :我本科和研究生在东北大学学习计算机科学与技术专业。研究生毕业之后在去哪儿网开发监控报警系统,后又在小米云平台的 Open-Falcon Team 工作过半年,再然后来到字节。在字节先后参与过公司内部基于 Kubernetes 的私有云服务 TCE,消息队列 NSQ(期间探索过 NSQ 云原生),2020 年初开始参与 Redis 云原生项目。

我喜欢爬山,目前已经爬遍了北京周边大大小小的山。爬山的过程让我很有目标感,能够产生心流,每当登顶看到眼前不一样的景色,会有一种特别的满足感。

picture.image

解宁拍摄

平时我每天会看半小时的前沿技术内容,现在看新技术的时间已经比上学的时候少很多了(笑)。上大学的时候几乎所有的时间都用来看技术书籍,可能在你看来挺无聊的,这也算是一种上学期间习惯的延续吧。

小火山:你是怎么接触到云原生的?参与过什么云原生的大项目么?

解宁

:5 年前入职字节的时候,正好赶上团队调研、上线 Kubernetes,有幸参与到 Kubernetes 落地的工作中,就这样接触到了云原生。因为工作需要,使用到了社区的一些组件,在使用过程中发现了一些问题同时也衍生出一些新的功能需求,就开始给 Kubernetes 社区贡献代码,后来成为了社区的 Member,同时成为几个卫星项目 (node-problem-detector/kubes-state-metrics/heapster) 的 Maintainer。在 Redis 云原生的项目中,我希望把云原生化过程中遇到的问题逐步解决掉,然后同步思考在存储服务云原生化的过程中存在的共性问题,做成框架变成公共服务,减少大家的接入成本。

小火山:这次你的分享内容是关于把有状态服务 Redis 部署到 Kubernetes,那么在 Kubernetes 上一般如何部署有状态和无状态的服务?

解宁

无状态服务一般根据服务自身的特性,可以考虑用 Deployment/DaemonSet 部署 。比如 API 类的服务可以用 Deployment 部署;Daemon/Agent 类的服务可以用 DaemonSet 部署;如果对于固定的唯一性标识有强需求,也可以考虑用 StatefulSet 来部署无状态服务。

有状态服务一般要求有固定的唯一标识或者固定的存储,一般都是用 StatefulSet 来部署 。复杂的有状态服务就需要考虑参考 CoreOS 提出的 Operator Pattern,使用 CustomResourceDefinition+Custom Controller 来基于 Kubernetes 原子语义,参考特定的业务逻辑来实现云原生化。

picture.image

小火山:火山引擎是如何将 Redis 部署到 Kubernetes 上的?

解宁

:Redis 有两个组件,一个是 Proxy,一个是 Server。Proxy 是无状态的,使用 Deployment 来部署。Server 需要存储数据,是有状态的,需要使用 StatefulSet 来部署。水平扩缩容、升级、副本扩缩容、垂直扩缩容等操作需要更复杂的控制才能完成,所以 Redis 云原生化是通过参考 Operator Pattern,结合 Redis 架构模型,设计了一个 Redis Cluster 的 CRD 和实现了 Custom Controller 的 redis-operator 来实现的

小火山:Kubernetes 上部署的有状态服务如何实现数据持久化?Redis 部署到 Kubernetes 上之后的数据持久化是否也是这样实现?

解宁 :通过 Kubernetes 的 Volumes 可以实现数据的持久化,比如使用 hostPath、local、persistentVolumeClaim 类型的 volume 可以将数据保存在本地盘或者分布式存储系统。

为了方便使用,降低运维的复杂度, 推荐使用 Dynamic Provision Storage Class + PersistentVolume + PersistentVolumeClaim 实现存储的管理 ,PV 的存储后端可以是本地硬盘也可以是分布式存储系统。Redis 目前也是通过 Dynamic Provision Storage Class + PersistentVolume + PersistentVolumeClaim 实现存储管理的,支持本地盘和分布式存储系统。

小火山:Kubernetes 适合部署无状态的服务,火山引擎将 Redis 部署到 Kubernetes 有何考虑,对比传统部署有何优势?

解宁 :传统基于物理机的部署方式,需要根据不同的机型(CPU/Memory/Disk)决定每个机型机器部署的实例数量,需要人肉介入。

Redis 云原生化以后,资源抽象和交付由 Kubernetes 完成,不再需要关注具体的机型。节点的调度由 Kubernetes 完成,降低运维负担。此外,Kubernetes 的声明式 API 思想天生适合用来解决部署和运维中遇到的“状态保持”的共性问题,降低了运维系统的复杂度。 在火山引擎开发者社区首次 Meetup 中,我将分享更多 Redis 部署到 Kubernetes 上云原生化以后的特性,欢迎大家关注!扫描下方图片二维码或点击【

阅读原文

】报名,并添加小助手微信和更多开发者交流,我们 3 月 27 日见!

picture.image

25
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论