Redis 云原生实践经验|探班火山引擎开发者社区 Meetup 讲师:解宁篇
Posted K8sMeetup社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 云原生实践经验|探班火山引擎开发者社区 Meetup 讲师:解宁篇相关的知识,希望对你有一定的参考价值。
作为云原生生态系统的核心,Kubernetes 可自动部署、扩展和管理容器化应用程序,降低繁琐的人工部署和运维过程。随着 Kubernetes 日渐成熟,越来越多的企业开始将 Kubernetes 作为新的基础设施,在其上部署和维护应用及服务。
3 月 27 日,在火山引擎开发者社区首次 Meetup 上,火山引擎研发工程师解宁将为大家带来《Redis 云原生实践》的分享,小火山提前采访了解宁,带大家提前一窥精彩的分享内容
。
小火山:能否简单介绍一下自己?日常有什么爱好?平时是如何技术保持输入的?
解宁
:我本科和研究生在东北大学学习计算机科学与技术专业。研究生毕业之后在去哪儿网开发监控报警系统,后又在小米云平台的 Open-Falcon Team 工作过半年,再然后来到字节,在字节先后参与过公司内部基于 Kubernetes 的私有云服务 TCE,消息队列 NSQ(期间探索过 NSQ 云原生),2020 年初开始参与 Redis 云原生项目。
我喜欢爬山,目前已经爬遍了北京周边大大小小的山。爬山的过程让我很有目标感,能够产生心流,每当登顶看到眼前不一样的景色,会有一种特别的满足感。
平时我每天会看半小时的前沿技术内容,现在看新技术的时间已经比上学的时候少很多了(笑)。上大学的时候几乎所有的时间都用来看技术书籍,可能在你看来挺无聊的,这也算是一种上学期间习惯的延续吧。
小火山:你是怎么接触到云原生的?参与过什么云原生的大项目么?
解宁
: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 原子语义,参考特定的业务逻辑来实现云原生化。
小火山:火山引擎是如何将 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 日见!
以上是关于Redis 云原生实践经验|探班火山引擎开发者社区 Meetup 讲师:解宁篇的主要内容,如果未能解决你的问题,请参考以下文章
云原生负载均衡和网关应用实践
助力企业数据飞轮转起来!火山引擎云原生数仓ByteHouse全面大促中
火山引擎云数据库 veDB 在字节内部的业务实践
云化生长,火山引擎的“云原生”在讲些什么?
字节收购 强化云原生
火山引擎进军云市场,计划未来三年服务十万客户