如何基于 k8s 开发高可靠服务?容器云牛人有话说

网友投稿 275 2022-10-16

如何基于 k8s 开发高可靠服务?容器云牛人有话说

k8s 是当前主流的容器编排服务,它主要解决「集群环境」下「容器化应用」的「管理问题」,主要包括如下几方面:
  容器集群管理 编排
 调度
 访问
   基础设施管理 计算资源
 网络资源
 存储资源

k8s 的强大依赖于它良好的设计理念和抽象,吸引了越来越多的开发者投入到 k8s 社区,把 k8s 作为基础设施运行服务的公司也逐步增多。
在设计理念方面,k8s 只有 APIServer 与 etcd (存储) 通信,其他组件在内存中维护状态,通过 APIServer 持久化数据。管理组件动作的触发是 level-based 而非 edge-based,并根据资源「当前状态」和「期望状态」进行相应动作。k8s 采用分层设计,基于各类抽象接口、由不同的插件满足不同的需求。
在抽象方面,不同的 workload 服务于不同的应用,如针对无状态应用的 Deployment、针对有状态应用的 StatefulSet 等。在访问管理方面,Service 解耦了集群内部服务访问方和提供者,Ingress 提供了集群外部到集群内部的访问管理。
k8s 虽然有良好的设计理念和抽象,但陡峭的学习曲线和不完善的开发资料极大增加了应用开发的难度。
本次分享将基于笔者的开发实践,以 MySQL on k8s 为例,描述如何基于 k8s 开发高可靠应用,尽可能抽象出最佳实践,降低基于 k8s 开发高可靠应用的成本。

MySQL on k8s

应用的设计和开发不能脱离业务需求,对 MySQL 应用的需求如下:

数据高可靠
 服务高可用
 易使用
 易运维

为了实现上述需求,需要依靠 k8s 和应用两方面协同工作,即开发基于 k8s 高可靠应用,既需要 k8s 相关的知识,也需要应用领域内的知识。
下述将根据上述需求来分析相应的解决方案。

1.数据高可靠

数据的高可靠一般依赖于这几方面:

Resource 自定义资源
 为用户提供一种简单的方式描述对服务的期望
 Controller 创建 Resource
 监听 Resource 的变更,用来实现用户对服务的期望

同时针对每个 mysqld 节点,定义了如下状态:

Green• 节点在运行
• 节点在 MySQL 集群中
Yellow
• 节点在运行
• 节点不在 MySQL 集群中
Red-clean
• 节点优雅退出
Red-unclean
• 节点非优雅退出
Unknown
• 节点状态不可知

小结

Operator 开发框架
 健康检测服务
 故障自动处理服务
 任务调度服务
 配置管理服务
 监控服务
 日志服务
 etc.


随着这些通用逻辑和最佳实践的模块化,在开发新的基于 k8s 的高可靠应用时,开发者可像「搭积木」一样将与 k8s 相关的交互快速搭建起来,这样的应用由于已经运用了最佳实践,从一开始就具备高可靠的特性。同时,开发者可将注意力从 k8s 陡峭的学习曲线转移到应用自身领域,从应用自身加强服务的可靠性。

牛人说

牛人说专栏致力于技术人思想的发现,其中包括技术实践、技术干货、技术见解、成长心得,还有一切值得被发现的技术内容。我们希望集合最优秀的技术人,挖掘独到、犀利、具有时代感的声音。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:你真的了解Java的多线程方法吗
下一篇:SCOM的管理包以及指定监控服务IIS网页服务
相关文章

 发表评论

暂时没有评论,来抢沙发吧~