一个完整的、全面k8s化的集群稳定架构(值得借鉴)

k8s大规模集群如何保证稳定性 阅读详情

前言

我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点:

1、发版流程不稳定

2、缺少监控平台【最重要的原因】

3、缺少日志系统

4、极度缺少有关操作文档

5、请求路线不明朗

总的来看,问题的主要原因是缺少可预知的监控平台,总是等问题出现了才知道。次要的原因是服务器作用不明朗和发版流程的不稳定。

解决方案

发版流程不稳定

重构发版流程。业务全面k8s化,构建以kubernetes为核心的ci/cd流程。

发版流程

有关发版流程如下:

图片

image.png

浅析:研发人员提交代码到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中由运维来做的。

服务部署逻辑图

有关服务部署逻辑图如下:

图片

image.png

根据发版流程的浅析,再根据逻辑图可以明确发版流程。在这里看到我司使用的是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

缺少监控预警平台

构建可信赖且符合我司集群环境的联邦监控平台,实现对几个集群环境的同时监控和预故障告警,提前介入。

监控预警逻辑图

有关监控预警逻辑图如下:

图片

image.png

浅析:总的来说,我这里使用到的监控方案是prometheus+shell脚本或go脚本+sentry。使用到的告警方式是企业微信或者企业邮箱。

上图三种颜色的线代表三种监控方式需要注意。脚本主要是用来做备份告警、证书告警、抓贼等。prometheus这里采用的是根据prometheus-opertor修改的prometheus资源清单,数据存储在nas上。

sentry严格的来讲属于日志收集类的平台,在这里我将其归为监控类,是因为我看中了其收集应用底层代码的崩溃信息的能力,属于业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警。

注意这里使用的是联邦监控平台,而部署普通的监控平台。

联邦监控预警平台逻辑图

多集群联邦监控预警平台逻辑图如下:

图片

image.png

因为我司有几个k8s集群,如果在每个集群上都部署一套监控预警平台的话,管理起来太过不便,所以这里我采取的策略是使用将各监控预警平台实行一个联邦的策略,使用统一的可视化界面管理。

这里我将实现三个级别饿监控:操作系统级、应用程序级、业务级。对于流量的监控可以直接针对kong进行监控,模版7424。

缺少日志系统

随着业务全面k8s化进程的推进,对于日志系统的需求将更加渴望,k8s的特性是服务的故障日志难以获取。建立可观测的能过滤的日志系统可以降低对故障的分析难度。

有关日志系统逻辑图如下:

图片

image.png

浅析:在业务全面上k8s化后,方便了管理维护,但对于日志的管理难度就适当上升了。我们知道pod的重启是有多因素且不可控的,而每次pod重启都会重新记录日志,即新pod之前的日志是不可见的。

当然了有多种方法可以实现日志长存:远端存储日志、本机挂载日志等。出于对可视化、可分析等的考虑,选择使用elasticsearch构建日志收集系统。

极度缺少有关操作文档

建立以语雀--> 运维相关资料为中心的文档中心,将有关操作、问题、脚本等详细记录在案,以备随时查看。

图片

image.png

浅析因安全性原因,不便于过多同事查阅。运维的工作比较特殊,安全化、文档化是必须要保障的。我认为不论是运维还是运维开发,书写文档都是必须要掌握的,为己也好,为他也罢。文档可以简写,但必须要含苞核心的步骤。我还是认为运维的每一步操作都应该记录下来。

请求路线不明朗

根据集群重构的新思路,重新梳理集群级流量请求路线,构建具备:认证、鉴权、代理、连接、保护、控制、观察等一体的流量管理,有效控制故障爆炸范围。

请求路线逻辑图如下:

图片

image.png

浅析:客户访问https://www.cnblogs.com/zisefeizhu 经过kong网关鉴权后进入特定名称空间(通过名称空间区分项目),因为服务已经拆分为微服务,服务间通信经过istio认证、授权,需要和数据库交互的去找数据库,需要写或者读存储的去找pv,需要转换服务的去找转换服务...... 然后返回响应。

总结

综上所述,构建以:以kubernetes为核心的ci/cd发版流程、以prometheus为核心的联邦监控预警平台、以elasticsearch为核心的日志收集系统、以语雀为核心的文档管理中心、以kong及istio为核心的南北东西流量一体化服务,可以在高平发,高可靠性上做到很好保障。

附:总体架构逻辑图

图片

image.png

注:请根据箭头和颜色来分析。

浅析:上图看着似乎过于混乱,静下心来,根据上面的拆分模块一层层分析还是可以看清晰的。这里我用不同颜色的连线代表不同模块的系统,根据箭头走还是蛮清晰的。

根据我司目前的业务流量,上述功能模块,理论上可以实现集群的维稳。私认为此套方案可以确保业务在k8s集群上稳定的运行一段时间,再有问题就属于代码层面的问题了。

这里没有使用到中间件,倒是使用到了缓存redis不过没画出来。我规划在上图搞定后再在日志系统哪里和转换服务哪里增加个中间件kafka或者rq 看情况吧。

                                                   - END -

多维度聊一聊 k8s 和 openstack k8s 和 openstack 无疑是当今云计算领域的两大巨头,它们分别占据着 IaaS 和 PaaS 领域的事实标准,经常被拿来一起比较。我记得大概在三四年前 k8s 如火如荼的发展的时候,“openstack 已死”,“openstack 没落了”之类的文章层出不穷。但是这么年过去了 openstack 老当益壮依然在云计算领域占有重要地位,而且还有一个多月,openstack 字母表的最后一个版本就要发布了,可喜可贺。这篇文章,我们再来仔细的对比一下 openstack 和 k8s。 阅读详情

相关推荐

阿里p9泄密一个完整的、全面k8s化集群稳定架构《值得借鉴》

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

dcj19980805的博客 281

rancher redis集群_基于k8s的集群稳定架构

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

weixin_34252946的博客 688

Kubernetes(K8S)最全详解

Kubernetes (K8S),通过一系列组件(比如:kube-apiserver、kube-scheduler、kube-controller-manager...等)协调、调度和维护整个集群的正常运行。Kubernetes (K8S),通过一系列组件(比如:kube-apiserver、kube-scheduler、kube-controller-manager...等)协调、调度和维护整个集群的正常运行。

cgk_ALEM的博客 2286

Rancher上部署Redis部署

Rancher上部署Redis部署 (1) 进入应用, 点击添加服务, 名称redis, 镜像redis, 端口映射6379 (2) 创建后使用客户端测试连接 redis-cli -h 172.16.66.130 (3) 测试成功

xiao-啸 2793

滑模控制概述

滑模控制概述1.滑模控制概念2.滑模控制原理3.滑模控制设计步骤4.研究现状5.发展趋势5.1自适应滑模变结构控制5.2模糊滑模控制5.3神经网络与滑模控制的结合 1.滑模控制概念   滑模控制(Sliding Mode Control,SMC)是一种特殊类型的变结构控制(Variable Structure Control,VSC),因此又称之为滑模变结构控制,是近年来广泛应用和发展的一种控制方法。滑模控制本质上是一种非线性控制,即控制结构随时间变化而变化。滑模变结构控制是非线性系统中普遍采用的一种分析方

shiyi20190828的博客 2万+

告别混乱!在Unity中为Best MQTT v3设计清晰的服务层:配置、连接、订阅发布模块拆分指南

本文详细介绍了如何在Unity中使用Best MQTT v3插件构建清晰的服务层架构,包括配置管理、连接服务、订阅管理和发布服务的模块化拆分。通过解耦设计、事件驱动和接口抽象,提升代码可维护性和可测试性,适用于物联网和实时通信开发场景。

weixin_30576827的博客 358

Rancher下部署Redis集群

http://www.mayanpeng.cn/archives/130.html Rancher下部署Redis集群 一个最小的redis集群,需要3个主节点,以及3个从节点,每个主节点对应一个从节点,主从做数据备份,主节点间做数据分片。当Master掉线后,redis cluster集群会从多个Slave中选举出来一个新的Matser作为代替,而旧的Master重新上线后变成 Master 的Slave。 在Rancher上部署redis集群,需要对每个节点的配置和数据做持久化,并且要确保

yygr的博客 3026

上网第二课:办了百兆宽带,为什么测速只有一半?

最慢的那一环。

qq_36765170的博客 110

一个完整的、全面 k8s 化的集群稳定架构(值得借鉴)

点击下方公众号「关注」和「星标」回复“1024”获取独家整理的学习资料!前言我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点:1、发版流程不稳定2、缺...

民工哥的博客 876

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1663

CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?

接着,它创建了一个 Player 对象,并使用 protobuf.js 提供的 API 对其进行序列化和反序列化操作。其中,name 和 level 是普通的字段,items 是一个 repeated 字段,表示它可以包含多个值。在 Cocos Creator 中使用 protobuf.js,我们需要先加载 .proto 文件,然后使用 protobuf.js 提供的 API 进行序列化和反序列化操作。JSON和XML是文本格式,更易于阅读和调试,而且在对人类友好的接口和数据交换上更为常见和广泛支持。

w风雨无阻w的专栏 2628

一个全面、完整、稳定的 k8s 集群架构,值得借鉴!

我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点:1、发版流程不稳定2、缺少监控平台【最重要的原因】3、缺少日志系统4、极度缺少有关操作文档5、请求路线不明朗总的来看,问题的主要原因是缺少可预知的监控平台,总是等问题出现了才知道。次要的原因是服务器作用不明朗和发版流程的不稳定。

Java技术栈,分享最主流的Java技术 566

Docker部署FRP实现内网穿透

FRP是一款开源内网穿透工具,通过在公网服务器部署服务端(FRPS),内网设备运行客户端(FRPC)实现外部访问。支持TCP、UDP、HTTP等多种协议。部署时需配置服务端(如群晖NAS使用Docker)和客户端(如Windows下载可执行文件)。服务端需设置监听端口、控制面板及Token认证,客户端需指定服务器地址和相同Token。完成配置后可通过公网IP或域名访问内网资源,并在控制面板监控连接状态。

波哥技术栈 1599

【K8s】—— Kubernetes架构

【秒懂·云原生】目前主要更新容器,一起学习一起进步。主要介绍【K8s】—— 安装和设置kubectlBorg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。Borg主要由BorgMaster、Borglet、borgcfg和Scheduler组成,如下图所示BorgMaster是整个集群的大脑,负责维护整个集群的状态,并将数据持久化到Paxos存储中;

4万+

【vsomeip3 教程】基于 vSomeIP 3.5 的路由域实践:从配置到运行状态的完整指南

___ > 前言(读者定位与准备) 目标读者:在 Linux 上做分布式/车载中间件通信的 C++ 工程师。 > 先决条件:CMake、Boost 基础;理解 TCP/UDP 与多进程通信。 > 文中术语:Routing Host(路由进程)、Application、Service/Instance、Method、Event/EventGroup、SOME/IP-SD。 > 演示环境:单机多进程 & 跨主机两套对照。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1159

Vue3 - Element Plus 表格组件 el-table “表格行数据中又嵌套了二维对象数组“,按平级循环渲染(嵌套数组视为同级行数据), 对嵌套的数组循环展示为表格,智能合并行或列详细教程

vue3,nuxt3,element-plus,table表格组件,el-table,vue3element表格组件,数据中有二维数组怎么遍历循环显示,表格数据带二级数组怎么循环渲染显示,表格数据中存在一个数组要怎么才能显示到表格,el-table表格合并详细教程示例,table表格如果对象里面还有对象数组那该怎么去渲染,平常都是数组中一个对象渲染成一行,每行中还有嵌套数组怎么办,每个行数据下还有一个数组怎么显示,怎么把表格相同的数据合并为一行,合并上下两行相同数据单元格,合并行或列如果遇到相同单元格就合

🏆 前端领域优质创作者 1万+

K8S 架构实现及工作原理

K8S 架构实现及工作原理介绍

youzhouliu的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

云计算系列之Kubernetes(K8S)集群部署实战解析

Kubernetes用于自动部署、扩缩和管理容器化应用程序的开源系统。 Kubernetes简称为K8S或K8,是业界领先的容器编排解决方案。

sinat_30844883的博客 1727

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Kubernetes集群部署

Kubernetes集群部署一.k8s简介1、什么是K8s2、K8s 设计架构3、 k8s重要节点描述4、 过程原理:5、 k8s的核心功能6. k8s的优缺点二.k8s的部署1. 还原实验环境2. 部署软件仓库,安装k8s3. 部署k8s5. 初始化集群三.安装flannel网络组件1.获取flannel最新版本2.下载yml文件 一.k8s简介 1、什么是K8s k8s是一个docker集群的管理工具 k8s是容器的编排工具 Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内

qq_37801888的博客 563

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Kubernetes—k8s介绍_kubernetes8s

比如Pod,Service,Node,ReplicaSet等等。pod在英文中是豆荚的意思,也就是说k8s的管理调度最小单位是以“豆荚”来进行的,豆荚里面的一个一个豆子就是一个个的容器。Pod运行在一个Worker Node中,这个Worker Node可以是物理机,也可以是虚拟机。在Pod中,有一个容器叫pause,这个是当前pod中所有容器的父容器,也叫基础容器。Pod是kubernetes中最小的调度单位,可以把他理解成在集群上运行的进程。Pod里面可以运行单个容器或者运行多个需要协同工作的容器。

2401_87197303的博客 606
上一篇: 看了架构师的代码,切身感受到了代码可扩展性高的魅力
下一篇: 头条二面:你们公司怎么处理MySQL的 Binlog 日志?
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值