基于k8s的集群稳定架构-转载
基于k8s的集群稳定架构-转载
前言
我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点:
1、发版流程不稳定
2、缺少监控平台【最重要的原因】
3、缺少日志系统
4、极度缺少有关操作文档
5、请求路线不明朗
总的来看,问题的主要原因是缺少可预知的监控平台,总是等问题出现了才知道。次要的原因是服务器作用不明朗和发版流程的不稳定。
解决方案
发版流程不稳定
重构发版流程。业务全面k8s化,构建以kubernetes为核心的ci/cd流程。
发版流程
有关发版流程如下:

浅析:研发人员提交代码到developer分支(时刻确保developer分支处于最新的代码),developer分支合并到需要发版环境对应的分支,触发企业微信告警,触发部署在k8s集群的gitlab-runner pod,新启runner pod 执行ci/cd操作。在这个过程中需要有三个步骤:测试用例、打包镜像、更新pod。第一次部署服务在k8s集群环境的时候可能需要:创建namespace、创建imagepullsecret、创建pv(storageclass)、创建deployment(pod controller)、创建svc、创建ingress、等。其中镜像打包推送阿里云仓库和从阿里云仓库下载镜像使用vpc访问,不走公网,无网速限制。流程完毕,runner pod 销毁,gitlab 返回结果。
需要强调的一点是,在这里的资源资源清单不包含configmap或者secret,牵扯到安全性的问题,不应该出
现在代码仓库中,我司是使用rancher充当k8s多集群管理平台,上述安全问题在rancher的dashboard中由运维来做的。
服务部署逻辑图
有关服务部署逻辑图如下:

根据发版流程的浅析,再根据逻辑图可以明确发版流程。在这里看到我司使用的是kong代替nginx,做认证、鉴权、代理。而slb的ip绑定在kong上。0,1,2属于test job;3属于build job;4,5,6,7属于change pod 阶段。并非所有的服务都需要做存储,需要根据实际情况来定,所以需要在kubernetes.sh里写判断。在这里我试图使用一套CI应用与所有的环境,所以需要在kubernetes.sh中用到的判断较多,且.gitlab-ci.yml显得过多。建议是使用一个ci模版,应用于所有的环境,毕竟怎么省事怎么来。还要考虑自己的分支模式,具体参考:https://www.cnblogs.com/zisefeizhu/p/13621797.html
缺少监控预警平台
构建可信赖且符合我司集群环境的联邦监控平台,实现对几个集群环境的同时监控和预故障告警,提前介入。
监控预警逻辑图
有关监控预警逻辑图如下:

浅析:总的来说,我这里使用到的监控方案是prometheusshell脚本或go脚本sentry。使用到的告警方式是企业微信或者企业邮箱。上图三种颜色的线代表三种监控方式需要注意。脚本主要是用来做备份告警、证书告警、抓贼等。prometheus这里采用的是根据prometheus-opertor修改的prometheus资源清单,数据存储在nas上。sentry严格的来讲属于日志收集类的平台,在这里我将其归为监控类,是因为我看中了其收集应用底层代码的崩溃信息的能力,属于业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警。
注意这里使用的是联邦监控平台,而部署普通的监控平台。
联邦监控预警平台逻辑图
多集群联邦监控预警平台逻辑图如下:

因为我司有几个k8s集群,如果在每个集群上都部署一套监控预警平台的话,管理起来太过不便,所以这里我采取的策略是使用将各监控预警平台实行一个联邦的策略,使用统一的可视化界面管理。这里我将实现三个级别饿监控:操作系统级、应用程序级、业务级。对于流量的监控可以直接针对kong进行监控,模版7424。
缺少日志系统
随着业务全面k8s化进程的推进,对于日志系统的需求将更加渴望,k8s的特性是服务的故障日志难以获取。建立可观测的能过滤的日志系统可以降低对故障的分析难度。
有关日志系统逻辑图如下:

浅析:在业务全面上k8s化后,方便了管理维护,但对于日志的管理难度就适当上升了。我们知道pod的重启是有多因素且不可控的,而每次pod重启都会重新记录日志,即新pod之前的日志是不可见的。当然了有多种方法可以实现日志长存:远端存储日志、本机挂载日志等。出于对可视化、可分析等的考虑,选择使用elasticsearch构建日志收集系统。
极度缺少有关操作文档
建立以语雀--> 运维相关资料为中心的文档中心,将有关操作、问题、脚本等详细记录在案,以备随时查看。

浅析因安全性原因,不便于过多同事查阅。运维的工作比较特殊,安全化、文档化是必须要保障的。我认为不论是运维还是运维开发,书写文档都是必须要掌握的,为己也好,为他也罢。文档可以简写,但必须要含苞核心的步骤。我还是认为运维的每一步操作都应该记录下来。
请求路线不明朗
根据集群重构的新思路,重新梳理集群级流量请求路线,构建具备:认证、鉴权、代理、连接、保护、控制、观察等一体的流量管理,有效控制故障爆炸范围。
请求路线逻辑图如下:

浅析:客户访问https://www.cnblogs.com/zisefeizhu 经过kong网关鉴权后进入特定名称空间(通过名称空间区分项目),因为服务已经拆分为微服务,服务间通信经过istio认证、授权,需要和数据库交互的去找数据库,需要写或者读存储的去找pv,需要转换服务的去找转换服务...... 然后返回响应。
总结
综上所述,构建以:以kubernetes为核心的ci/cd发版流程、以prometheus为核心的联邦监控预警平台、以elasticsearch为核心的日志收集系统、以语雀为核心的文档管理中心、以kong及istio为核心的南北东西流量一体化服务,可以在高平发,高可靠性上做到很好保障。
附:总体架构逻辑图

注:请根据箭头和颜色来分析。
浅析:上图看着似乎过于混乱,静下心来,根据上面的拆分模块一层层分析还是可以看清晰的。这里我用不同颜色的连线代表不同模块的系统,根据箭头走还是蛮清晰的。
根据我司目前的业务流量,上述功能模块,理论上可以实现集群的维稳。私认为此套方案可以确保业务在k8s集群上稳定的运行一段时间,再有问题就属于代码层面的问题了。这里没有使用到中间件,倒是使用到了缓存redis不过没画出来。我规划在上图搞定后再在日志系统哪里和转换服务哪里增加个中间件kafka或者rq 看情况吧。
参考:https://www.cnblogs.com/zisefeizhu/p/13692782.html
参考2: 我的容器之旅:https://www.cnblogs.com/zisefeizhu/category/1513596.html
羽雀参考:https://www.yuque.com/wangfangping
基于k8s的集群稳定架构-转载的更多相关文章
- 基于k8s的集群稳定架构
前言 我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点: 1.发版流程不稳定 2.缺少监控平台[最重要的原因] 3.缺少日志系统 4.极度缺少有关操作文档 5.请 ...
- 基于puppet分布式集群管理公有云多租户的架构浅谈
基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍 在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...
- 理解OpenShift(7):基于 Prometheus 的集群监控
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...
- 腾讯发布 K8s 多集群管理开源项目 Clusternet
11月4日,在腾讯数字生态大会上,腾讯宣布了云原生领域一项重磅开源进展-- K8s 多集群管理项目 Clusternet 正式开源. Clusternet 由腾讯联合多点生活.QQ音乐.富途证券.微众 ...
- redis集群主流架构方案分析
Redis在互联网大数据平台有着广泛的应用,主要被用来缓存热点数据,避免海量请求压垮数据库,同时可以提升服务节点的响应速度和并发量.随着数据量的增多,由于redis是占用单台物理机或虚机的内存,内存资 ...
- k8s极简史:K8s多集群技术发展的历史、现状与未来
引子 随着云原生技术的普及,越来越多的企业使用Kubernetes来管理应用,并且集群规模也呈爆发式增长,企业也亟需应对随集群规模增长而带来的各种挑战.同时,为了更好地提供高可用.弹性伸缩的应用,企业 ...
- 《基于Kubernetes舵手集群的设计与实现》
前言 <基于Kubernetes舵手集群的设计与实现>是我的毕业设计项目.本系统采用Kubernetes容器编排.基于Jenkins\Gitlab的CICD技术.EFK日志收集.Prome ...
- dubbo源码解析五 --- 集群容错架构设计与原理分析
欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之 ...
- .net core i上 K8S(一)集群搭建
1.前言 以前搭建集群都是使用nginx反向代理,但现在我们有了更好的选择——K8S.我不打算一上来就讲K8S的知识点,因为知识点还是比较多,我打算先从搭建K8S集群讲起,我也是在搭建集群的过程中熟悉 ...
随机推荐
- You Don't Know the Hack tech in the frontend development
You Don't Know the Hack tech in the frontend development 你所不知道的前端黑科技 css in js animation https://www ...
- NGK算力市场,不止有动静态收益还有SPC空投!
随着数字货币交易的火热,云算力挖矿也悄然崛起.越来越多的用户开启云算力挖矿,以获取更多的收益.相较于传统的矿机挖矿,用户通过购买算力进行云挖矿,节省了购买矿机以及维护的成本.另一方面,也降低了安全风险 ...
- 如何快速搞定websocket
5 个步骤快速掌握websocket消息发送和接收 1. 获取您的 appkey 先注册一个账号,登录后,创建一个应用,就能得到您的 appkey. 详情见 获取开发者账号和 appkey 2. 客户 ...
- 直播预告 | 全面的审计分析和权限管控——CloudQuery年终发布!
2020年9月,CloudQuery 发布. 针对开发.运维人员面临的如何高效便捷访问.操作管理数据的问题,我们设计并研发了云原生安全数据操作平台,CloudQuery 就此诞生! 2020年结束之际 ...
- 微信小程序:如何删除所有的console.log?
使用vscode正则匹配,手动去除 1.用vscode打开微信小程序项目 2.Edit-----replace in Files 1. console.log()加了分号 console\.log\( ...
- Django批量插入数据和分页器
目录 一.ajax结合sweetalert实现删除按钮动态效果 二.bulk_create批量插入数据 1. 一条一条插入 2. 批量插入 三.自定义分页器 一.ajax结合sweetalert实现删 ...
- Django练习遇到的错误记录
_reverse_with_prefix() argument after ** must be a mapping, not set 错误代码: def get_absolute_url(self) ...
- Flask-SQLAlchemy使用
Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展. 官方文档:https://flask-sqlalchemy.palletsprojects.c ...
- CVE-2015-1635-HTTP.SYS远程执行代码
这个漏洞刚好是在挖SRC的时候找到的,漏洞危害能打到服务器蓝屏,以下只作验证 参考 https://www.jianshu.com/p/2e00da8a12de https://blog.csdn.n ...
- 优化自动化测试流程,使用 flask 开发一个 toy jenkins工具
1.自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意. 但是美好时光一般不长,这种生活很快被女主管打破.为了提升公司测试效率, ...