- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章一个完整的全面Kubernetes化的集群稳定架构由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点:
总的来看,问题的主要原因是缺少可预知的监控平台,总是等问题出现了才知道。次要的原因是服务器作用不明朗和发版流程的不稳定.
重构发版流程。业务全面Kubernetes化,构建以Kubernetes为核心的CI/CD流程.
发版流程 。
有关发版流程如下:
浅析:研发人员提交代码到developer分支(时刻确保developer分支处于最新的代码),developer分支合并到需要发版环境对应的分支,触发企业微信告警,触发部署在Kubernetes集群的gitlab-runner Pod,新启runner Pod 执行CI/CD操作。在这个过程中需要有三个步骤:测试用例、打包镜像、更新Pod。第一次部署服务在Kubernetes集群环境的时候可能需要:创建Namespace、创建imagePullSecret、创建PV(StorageClass)、创建deployment(Pod controller)、创建SVC、创建Ingress等。其中镜像打包推送阿里云仓库和从阿里云仓库下载镜像使用VPC访问,不走公网,无网速限制。流程完毕,runner Pod销毁,GitLab返回结果.
需要强调的一点是,在这里的资源清单不包含ConfigMap或者Secret,牵扯到安全性的问题,不应该出现在代码仓库中,我司是使用Rancher充当Kubernetes多集群管理平台,上述安全问题在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 。
构建可信赖且符合我司集群环境的联邦监控平台,实现对几个集群环境的同时监控和预故障告警,提前介入.
监控预警逻辑图 。
有关监控预警逻辑图如下:
浅析:总的来说,我这里使用到的监控方案是Prometheus + Shell脚本或Go脚本+ Sentry。使用到的告警方式是企业微信或者企业邮箱。上图三种颜色的线代表三种监控方式需要注意。脚本主要是用来做备份告警、证书告警、抓贼等。Prometheus这里采用的是根据Prometheus-opertor修改的Prometheus资源清单,数据存储在NAS上。Sentry严格的来讲属于日志收集类的平台,在这里我将其归为监控类,是因为我看中了其收集应用底层代码的崩溃信息的能力,属于业务逻辑监控,旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.
注意这里使用的是联邦监控平台,而部署普通的监控平台.
联邦监控预警平台逻辑图 。
多集群联邦监控预警平台逻辑图如下:
因为我司有几个Kubernetes集群,如果在每个集群上都部署一套监控预警平台的话,管理起来太过不便,所以这里我采取的策略是使用将各监控预警平台实行一个联邦的策略,使用统一的可视化界面管理。这里我将实现三个级别饿监控:操作系统级、应用程序级、业务级。对于流量的监控可以直接针对Kong进行监控,模版7424.
随着业务全面Kubernetes化进程的推进,对于日志系统的需求将更加渴望,Kubernetes的特性是服务的故障日志难以获取。建立可观测的能过滤的日志系统可以降低对故障的分析难度.
有关日志系统逻辑图如下:
浅析:在业务全面上Kubernetes化后,方便了管理维护,但对于日志的管理难度就适当上升了。我们知道Pod的重启是有多因素且不可控的,而每次Pod重启都会重新记录日志,即新Pod之前的日志是不可见的。当然了有多种方法可以实现日志长存:远端存储日志、本机挂载日志等。出于对可视化、可分析等的考虑,选择使用Elasticsearch构建日志收集系统.
建立以语雀--@gt; 运维相关资料为中心的文档中心,将有关操作、问题、脚本等详细记录在案,以备随时查看.
浅析因安全性原因,不便于过多同事查阅。运维的工作比较特殊,安全化、文档化是必须要保障的。我认为不论是运维还是运维开发,书写文档都是必须要掌握的,为己也好,为他也罢。文档可以简写,但必须要含苞核心的步骤。我还是认为运维的每一步操作都应该记录下来.
根据集群重构的新思路,重新梳理集群级流量请求路线,构建具备:认证、鉴权、代理、连接、保护、控制、观察等一体的流量管理,有效控制故障爆炸范围.
请求路线逻辑图如下:
浅析:客户经过Kong网关鉴权后进入特定名称空间(通过名称空间区分项目),因为服务已经拆分为微服务,服务间通信经过Istio认证、授权,需要和数据库交互的去找数据库,需要写或者读存储的去找PV,需要转换服务的去找转换服务......然后返回响应.
综上所述,构建以:以Kubernetes为核心的CI/CD发版流程、以Prometheus为核心的联邦监控预警平台、以Elasticsearch为核心的日志收集系统、以语雀为核心的文档管理中心、以Kong及Istio为核心的南北东西流量一体化服务,可以在高平发,高可靠性上做到很好保障.
附总体架构逻辑图:
注:请根据箭头和颜色来分析.
浅析:上图看着似乎过于混乱,静下心来,根据上面的拆分模块一层层分析还是可以看清晰的。这里我用不同颜色的连线代表不同模块的系统,根据箭头走还是蛮清晰的.
根据我司目前的业务流量,上述功能模块,理论上可以实现集群的维稳。私认为此套方案可以确保业务在Kubernetes集群上稳定的运行一段时间,再有问题就属于代码层面的问题了。这里没有使用到中间件,倒是使用到了缓存Redis不过没画出来。我规划在上图搞定后再在日志系统哪里和转换服务哪里增加个中间件Kafka或者RQ看情况吧.
原文链接:http://dockone.io/article/2434572 。
最后此篇关于一个完整的全面Kubernetes化的集群稳定架构的文章就讲到这里了,如果你想了解更多关于一个完整的全面Kubernetes化的集群稳定架构的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Commons Net(commons-net-3.3.jar)
我在日志文件中收到这些警告: WARN 2013-01-15 00:08:15,550 org.eclipse.jetty.http.HttpParser- HttpParser Full for
我在使用特定网页时遇到问题。当我按下链接时,我收到应用程序错误(不是 http 错误等,而是应用程序级别错误)。 但是我打开了开发人员工具和网络控制台,我看到没有请求发送到服务器。 所以我双击并选择查
我没有组装经验,但这是我一直在做的。如果在通过程序集中的指针传递参数和调用函数时缺少任何基本方面,我希望输入。 例如,我想知道是否应该还原ecx,edx,esi,edi,。我读到它们是通用寄存器,但我
我没有组装经验,但这是我一直在做的。如果在通过程序集中的指针传递参数和调用函数时缺少任何基本方面,我希望输入。 例如,我想知道是否应该还原ecx,edx,esi,edi,。我读到它们是通用寄存器,但我
我正在尝试创建完整 uiscrollview 的快照,所有内容大小,我已经搜索了很多,并且我在 SO 上找到了一些东西,如下所示: Getting a screenshot of a UIScroll
我想复制一个包含以下结构的Vector,对我来说重要的是在修改复制的 vector 时保持原始Vector完整: public class objet_poid_n { public int
给定一个示例字符串 s = '嗨,我的名字是 Humpty-Dumpty,来自“爱丽丝,爱丽丝镜中奇遇记”',我想将其分成以下 block : # To Do: something like {l =
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在尝试创建一个正则表达式来查找文本中的 Linux 文件路径,但是正则表达式对我来说非常陌生。我有下面的代码片段,它将识别下面文件结构的开头。 .*(/bin/|/home/).* 完成正则表达式
我正在寻找远程托管的 JPG 的尺寸、宽度和高度。我已经了解了如何通过下载完整图像来执行此操作。 但是,如果我可以通过仅下载足以获取此信息的方式来做到这一点,那将是理想的。 典型的图像大小为 200K
有没有办法让下面的代码: import traceback def log(message): print "%s: %s" %(traceback.extract_stack()[0:-1]
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
git show 显示了修订版中所做的所有更改。但是,它会打印出所有更改——而不仅仅是文件名。 git show --stat 只显示文件名,但它把它们截断了!有没有办法获得已更改文件名的完整列表?
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
当我在模板中调用我的模型 get_absolute_url 方法时,我想要一个绝对/完整的 url。在我的入门模型中,我有以下内容: def get_absolute_url(self): r
我正在使用 jQuery 1.5.1 这是我的代码: $('.cellcontent').animate({ left: '-=190'}, { easing: alert('start
我正在使用下面的方法删除条形图并使用新数据更新条形图,但这样做时出现了一个小故障/完整的图表消失 1 秒,直到加载新数据。但是是否可以通过仅增加/减少柱形而不实际消失图表来实现相同的目的。 d3.se
基于 this question 中的讨论,任何人都可以提供代码或代码链接,显示 NumericLiteralX 模块的完整实现(例如 this one )?我对 NumericLiteralX 模块
我的目标是检索网站的 html,并将其转换为可读的String。我下面的代码可以工作,但我遇到了一个技术问题:当我尝试检索 http://time.gov/HTML5 的 html 时,我在 andr
我是一名优秀的程序员,十分优秀!