Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >让子弹飞一会儿

让子弹飞一会儿

作者头像
李鹤
发布于 2023-12-07 05:53:31
发布于 2023-12-07 05:53:31
2000
举报
文章被收录于专栏:k-cloud-labsk-cloud-labs

近期互联网故障频发,各大公众号各抒己见,指点江山,激扬文字,颇有百花齐放,百家争鸣的味道。一众吃瓜群众也是对此乐此不疲,津津乐道。

大家能够积极的从故障中去学习,这本身是一件好事,再加上一众业界大佬们颇有深度的观点和经验分享,可以让我们看到大佬们的思维方式,认识到和大佬们的差距。问渠那得清如许,为有源头活水来,向优秀者学习是提升自己的一个有效途径。

在这个过程中我也看到了一些现象,想和大家一起探讨探讨。笔者之前曾有幸参加了滴滴弹性云平台的建设工作,对里面的情况还算有一定的了解,虽然已经离开了两年多的时间。

这里笔者并不会介绍真实原因,也不会涉及到什么技术问题,单纯就目前看到的一些文章表达一下自己的观点,可以理解为本篇并不是阐述从滴滴的故障中我们能学到什,已经有众多大佬分析过了,也已经比较全面了。这里主要想跟大家一起探讨下我们究竟从公众号或者自媒体的文章里面学到了什么,或者当我们看到这些内容的时候有哪些是需要特别注意的地方。

脱离实际

先不说故障原因是否真的如网上所说,假设事故原因就是升级造成的,里面的一些分析也有值得商榷的地方。想就两点来探讨:

  1. 选择原地升级方案就是草台班子吗?
  2. 爆炸半径太大了吗?

原地升级就是"草台班子"吗?

Kubernetes 1.12是2018年7月发布的,在2019年7月8日就终止支持了。也就是说在2023年10月的时候,滴滴在生产环境使用一个社区已经废弃4年多的老版本。不论是看可靠性,还是看安全性,这都是非常草台班子的做法。 在五年没有升级版本的历史债务下,滴滴团队决定孤注一掷,直接从1.12 升级到 1.20。但是 Kubernetes Deprecation Policy[5] 很清楚的说了 Beta API 有可能在三个小版本之后就被删除。一次性升8个版本,风险完全不可控,也完全没有必要。 在冒险跨版本升级的前提下,还进一步选择原地升级,断绝 Plan B 的可能性,是一个更加费解的策略。实际上 Kubernetes 集群的蓝绿升级非常成熟,出问题的时候也更容易挽救。原地升级除了可以节约几个机器资源之外,没有其他好处。而升级Node不重建容器的做法,极容易引入兼容性问题,给自己的安全/调试/性能都带来极大的困难。

脱离滴滴的实际情况去谈 k8s 升级的话,笔者非常认同上述说法。但如果考虑到实际情况的话,就显得有些站不住脚了。

首先,滴滴内部对 k8s 做了大量的定制化工作,一来是为了兼容之前物理机时代业务(用户)的使用习惯,降低上云过程中引入的体验上的差异,套用俞军老师的公式:产品价值 =(新体验 - 旧体验)- 迁移成本;二来是因为 k8s 提供的更多的是一些通用能力,而在具备一定规模的公司在使用过程中或多或少会有一些既有功能无法满足存量需求的情况。

滴滴内部的一些定制比如为 Pod 固定宿主机,固定容器 IP 等功能(这些都可以在网上搜索到,之前已经有不少的相关分享)在很大程度上限制了升级方案的选型,甚至影响了故障恢复方案的选型。倒不是说不能采用社区的蓝绿,而是也需要做一些相关准备,不是单纯新搭建一套集群直接就能去迁移业务过去的,我相信这一点大佬们应该也是对比了两个方案,做了充分评估之后才选择的原地升级方案。而且在更老的版本升级的时候也才用过过原地升级的方案。如果了解了现状之后,可能就会觉得原地升级的方案也是存在一定的可取之处的,虽然风险确实高,但这个风险是相对的,跟人的能力有关,只要风险可控,那选择原地升级也无可厚非。

当然积累这么多个版本不升级,确实可以算一个问题,但如果有节奏的升级,升级次数多了即使单次升级出问题的概率变小了,但是乘以升级次数之后得到的从某个初始版本到最终版本的出问题的期望值是否真的会变小呢,这不好衡量,唯一可以确定的是这样做的话单次升级的风险更低了。

看过火影忍者的小伙伴可能会有印象,作为医疗忍者体系的开创者,纲手定下了医疗忍者必须遵守的三项铁律,但是纲手是可以打破这三项铁律的,因为她还立下了第四条规则,那就是学会了百豪之术的医疗忍者,可以打破以上所有的规则。

方案选型,风险大小都是相对的,既要考虑常规做法,也要考虑人员能力,最重要的还是要结合现状,切忌脱离实际的空谈。官网给出的指导,业界的通用方案是怎么做的,那些都是基础,如果忽略实际情况完全按照这些来那就有点主观主义的味道了,完全按照官方文档来,那就是教条(本本)主义,按照经验来,那就是经验主义,主观主义的两个极端。实践是检验真理的唯一途径,虽然出了问题,但并不是在升级过程中出现的,从 1.12 直接升级 1.20 也不是不可行的,已经在客观实践中得到了检验证明这是行得通的,只是需要更加完善的流程,先把三板斧做好再上线。来自苏联的德国军事顾问李德指挥的第五次红军反围剿失利,损失惨重,倒是一直被打压,被嘲讽的人站了出来挽狂澜于既倒,扶大厦之将倾。

爆炸半径

Kubernetes的多集群管理工具已经非常成熟了,而且滴滴其实有多集群,所以维护超大集群没有任何意义。作者自己也清楚“爆炸半径大”,那么合理的做法就是把集群拆成合理大小的。比如把两个一万节点的集群拆成十个两千节点的集群,管理成本没有增加,而运行风险和爆炸半径得到极大的降低。

首先,笔者作为 karmada member,之前也在公司内做过一些多集群管理的实践和落地的工作,对"多集群管理工具已经非常成熟“这个结论持保守态度,还是要看内部需求,再成熟的软件也是去为了满足需求,解决问题的。业界开源的多集群管理工具里面,karmada(CNCF首个多云容器编排项目) 算是做的很好的了,其他还有例如 clusternet(CNCF sandbox 项目),OCM 等,笔者在落地过程中也遇到了一些功能和性能方面的问题,当然这与所在公司实际业务场景有关,也感谢 karmada 社区小伙伴的积极响应和支持。

滴滴其实有多集群” 这个结论可能也是受到了网上那些公众号的影响了,不能说没有,但可能和我们认知里面的多集群管理不一样。顶多是支持业务部署到多个集群里面而已,在没有这些多集群管理工具的时候,业务做部署/变更时只要选择多个集群,也是可以部署到多个集群里面的,这是"伪"多集群。这里就不得不再提一下国内的技术氛围,充斥着 PPT 实现,笔者之前在被面试和面试别人的时候都遇到过这些,比如早些年很多公司对外宣称的在 3 系内核上已经支持了 buffer io 隔离和限速的能力,大部分是 PPT 实现而已。

维护超大集群没有任何意义",这个结论有待商榷,从事调度和资源利用率提升相关工作的小伙伴们应该会对此深有感触,统一资源池有利于资源的统筹规划,提升资源利用效率,从而降低成本。我们需要辩证的去看问题,即使是有了多集群管理能力了,目前的多集群实现方案,无论哪个,在遇到根据集群剩余资源调度时有一个共通的技术问题:多集群管控面的调度只是到了集群维度,或者说对应的集群里面需要扣减一定的资源,但调度本身是和集群每个节点的资源有关的,从工作负载在控制面调度完下发到业务集群,到工作负载在业务集群完成调度的这段时间内发生在控制面的其他调度行为,其决定是有潜在问题的,因为这段时间在控制面看到的业务集群的真实资源还没有完全扣减了被下发的工作负载的消耗。类比集群内的调度,单集群的调度器通过 assume 的机制来解决这个问题,即单集群调度完就已经知道容器对应的宿主机了,他提前在调度器缓存内为对应的宿主扣除这个容器所占用的资源,而不用等真正的 Bind 完成,调度器收到 pod update 事件后更新完 cache 再去调度;多集群的调度就没法这么做了,因为控制面的调度决策完全不知道最终业务集群的调度结果,他需要等到业务集群里面真的调度完才能才能知道业务集群资源分布情况。

拆成合理大小的集群,这一点非常认同,关键就在合理二字。但多少算合理,还是得按照实际的业务规模和管理需求看。早些年阿里的对外分享动辄上万节点,也经常会有人提问,为什么要搞这么大的集群,普遍的回答就是这是根据内部业务规模评估得到的结论。所以多大合适,这个问题不光涉及到 k8s 管理人员,还和上面所承接的业务规模密切相关,这会涉及多方合作问题,不是平台自己就能搞定的,但无论如何,评估合理的可以接受的集群规模仍然是一件值得做的事情。

相比控制爆炸半径,一个更亟需解决的事情是管控面和业务的故障域隔离。把一些运维系统或平台与业务从一个集群中拆出去,即使业务集群挂了,控制面的平台至少还活着,还可以做一些操作,当然这个还是建立在那些运维平台本身功能正常的前提下的,如果他们本身实现就有问题,那就是另外的话题了。

有趣的现象

在大家讨论相关问题的时候,有一个有意思的现象。SRE 和运维似乎在吐槽开发,而开发似乎又在吐槽 SRE 和运维。

工程师都应该知道,一个工程项目的资源总是有限的,工程师的任务永远都是在给定时间和成本的多重限制下,满足既定的质量要求。如果一个目标需要“大量的投入”,那么决策者在衡量投入产出比之后,降低该目标,是非常正常的项目管理动作,没有任何值得抱怨的。

笔者非常认同这个观点,不管什么方案,谁出的方案,很多时候都是在一定限制,或者一定条件下做的决定,这些限制可能是暂时的,也可能是长期的,可能是和人有关,也可能和组件功能有关。我们经常站在当前的时间点,以现状去评估和衡量早前的方案,得出方案有问题的结论。这有一部原因是随着时间推移,之前做方案时的那些限制条件或者约束已经不存在或者微乎其微了,但我们并没有及时的去调整这个方案,这本身也是需要决策者保持关注的。但公司里面普遍的现象就是"能跑就别动”,“人和程序有一个能跑就行”。久而久之就会积重难返,直到一个大故障的爆发,或者幸运的话可能会安享晚年,亦或者在不为人知的地方悄然逝去。

很多方案是折中的产物,似乎每个方案的制定者或者决策者都有不得不做妥协的地方,好一点的可能还会列一下排期,按优先级分期实现。但有意思的是连最初的方案制定都因为各种原因而折中处理,更别提上线后的迭代了,有几个能把历史的坑去填了的。之后就会进入大家熟悉的流程里面,就看哪个倒霉蛋接手了。

最后

在看了各位大佬们的分析后感觉认知又得到了提升。由于笔者也在发一些东西出来做分享,自己深知在互联网自媒体井喷式发展的时代,自媒体,尤其技术类的,保持自身的专业性,严谨性理因是享受自媒体红利这项权利时应尽的义务。同样作为吃瓜群众,面对众说纷纭的消息,提升我们辨别是非,去伪存真的能力,保持自己不迷失在乱花渐欲迷人眼的自媒体世界里面,权当做韭菜的自我修养吧。

为什么会发这篇,可能和作为技术人员爱钻牛角尖有关吧,也是借机表达自己的一些看法,如果能得到大佬们的指点,和更多小伙伴交流,就更好了。最近又有一个有关数据库是否应该容器化的话题火了,又开始了神仙打架,战况激烈。还有一篇 k8s 越来越复杂的文章,然后有的人开始拿别人的一些文章在那里断章取义,诱导读者。

以上内容基于笔者已有认知所阐述,可以看到几乎都在针对特别具体,细节的地方阐述观点,没有扩散,因为笔者清楚的知道自己在某些方面仍然是个菜鸡,不敢高谈阔论。针对以上内容如果有问题,欢迎讨论互喷(我假装听不见)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
程序员从幼稚到成熟的标志是什么?
作为一个在编程界摸爬滚打多年的老鸟,今天我想和大家聊聊咱们程序员成长的那些事儿。我们都知道,这条路可不简单,但每一步都特别关键。
伍六七AI编程
2024/08/20
910
程序员从幼稚到成熟的标志是什么?
k8s: 到底谁才是草台班子?
大家在对 2023 年诸多互联网公司故障的总结中多次提到了控制 “爆炸半径”,几乎都在说缩小集群规模,那除了缩小集群规模外还有没有其他办法呢?如果一出问题就通过缩小规模去解决,多少会显得有点不够专业(草台班子)。k8s 已经经历了九年半的发展,众多的终端用户在以什么样的方式使用 k8s,即便社区高手如云,也很难把所有使用场景都考虑到并且处理好,但也不至于差到连我们这群"草台班子"都能想到的一些最基本的问题(比如控制爆炸半径)都想不到。比起把集群搞大出问题的人,反而是在出问题后只会喊控制集群规模的那些 k8s 相关的云原生专家们,那些 k8s 集群管理员们,更像是草台班子。(并没有说 k8s 等于云原生的意思,但只要做的事情和 k8s 沾点边就号称云原生,这是事实)
李鹤
2024/01/07
4660
多云容器编排 Karmada-Operator 实践
Karmada作为开源的云原生多云容器编排项目,吸引了众多企业共同参与项目开发,并运行于生产环境中。同时多云也逐步成为数据中心建设的基础架构,多区域容灾与多活、大规模多集群管理、跨云弹性与迁移等场景推动云原生多云相关技术的快速发展。
2020labs小助手
2022/09/29
9560
云原生实践总结
CLOUD NATIVE LANDSCAPE https://cncf.landscape2.io/?group=projects-and-products
SRE运维进阶之路
2024/04/23
1900
云原生实践总结
Kubernetes多集群管理之路
随着Kubernetes在企业中的应用愈发广泛、普及,越来越多的公司开始在生产环境中运维多个Kubernetes集群。本文主要讲述了一些对于Kubernetes多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构。
CNCF
2022/11/28
1.9K0
Kubernetes多集群管理之路
节点运维新范式,原生节点助力企业全链路降本
在云原生领域,Serverless 已然是大势所趋。相比 Serverful 模式(基于云服务器集群的K8s运维模式),Serverless 模式屏蔽了资源概念,大幅提升运维效率。用户无需介入底层运维:像操作系统的安全补丁升级这样的动作,判断升级时机 - 升级前置检查 - 无损分批升级全部都由平台自动闭环。但 Serverless 真的适合所有场景么?其实不然。
腾讯云原生
2022/11/25
8370
小红书近线服务统一调度平台建设实践
随着公司的发展,技术架构逐步演进为在线、近线、离线三位一体架构。近线服务介于在线和离线之间,一般采用异步计算的方式,并不要求立即返回结果,但是计算的执行却和在线服务类似。容器架构团队设计了一套基于容器的近线服务统一调度平台,支持数十万核近线服务接近0计算成本运行。
用户6543014
2023/03/02
8600
小红书近线服务统一调度平台建设实践
多集群编排很难很繁琐?一定是你没用对管理系统
云原生技术的不断普及,不仅让使用Kubernetes部署应用成为了当下最主流的方式,而且标志着众多企业迈入了多集群时代。随着集群数量的不断增长,企业在集群管理和运维方面也迎来了诸如集群配置重复劳动、维护管理繁琐等等问题和挑战。
米开朗基杨
2021/07/15
6030
Karmada: 云原生多云容器编排平台
7月17日,在Cloud Native Days China云原生多云多集群专场,华为云原生开源负责人王泽锋发表了《Karmada: 云原生多云容器编排平台》主题演讲,分享了在云原生多云多集群方面的思考与实践。
崔秀龙
2021/08/12
1.4K0
Karmada: 云原生多云容器编排平台
搞定微服务线上生命周期管理,同时发布上千个服务节点不是事儿
如果只看一个服务节点的部署,貌似是一项非常简单的工作,但如果同时发布成百上千个服务节点,尤其是需要在不影响线上业务的前提下完成发布工作,就会变得比较复杂。
博文视点Broadview
2020/06/15
1.1K0
每周云安全资讯-2023年第14周
1 Microsoft修补Azure云服务中的“危险”RCE漏洞 微软修补了云托管基础设施 Azure Service Fabric 组件中的一个“危险”的缺陷。如果被利用,将允许未经身份验证的攻击者在平台托管的容器中执行恶意代码。 https://cloudsec.tencent.com/article/1kYUYT 2 K8S攻击案例:内存泄漏导致集群接管 本案例通过heapdump泄露分析内存,发现了SA Token、API Server地址,并从API Server接口中获得了ConfigMaps凭
云鼎实验室
2023/04/06
3470
每周云安全资讯-2023年第14周
K8s 多集群思考、实践和探索
把联邦的所有配置信息都写到 annotations 里,整个创建流程与 K8s 类似。配置信息先到 Federated API Server,Federated Controller 把应用创建到各子集群。
SRE运维进阶之路
2024/05/11
3110
K8s 多集群思考、实践和探索
什么是 Kubernetes
​它是一个全新的基于容器技术的分布式架构领先方案,确切地说,Kubernetes是谷歌严格保密十几年的秘密武器Borg的一个开源版本。Borg是谷歌内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。
星哥玩云
2022/09/15
3440
什么是 Kubernetes
对k8s的一些总结
比如大模型很热,这么马上大谈特谈大模型,似乎大模型能解决一切问题。然后网上到处去抄,把别人的模型,拿来用一下,关键抄都不会抄。问题一堆,然后骂手下无能,逼这个赶那个的。
赵云龙龙
2024/07/24
1080
对k8s的一些总结
vivo大规模 Kubernetes 集群自动化运维实践
随着vivo业务迁移到K8s的增长,我们需要将K8s部署到多个数据中心。如何高效、可靠的在数据中心管理多个大规模的K8s集群是我们面临的关键挑战。kubernetes的节点需要对OS、Docker、etcd、K8s、CNI和网络插件的安装和配置,维护这些依赖关系繁琐又容易出错。
2020labs小助手
2022/06/13
9520
推荐21-备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?
导读:Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统,它大幅降低了容器化应用部署的门槛,但运维和管理一个生产级的高可用 Kubernetes 集群仍十分困难。本文将分享蚂蚁金服是如何有效可靠地管理大规模 Kubernetes 集群的,并会详细介绍集群管理系统核心组件的设计。
猿哥
2019/10/29
7.7K0
微众银行案例|容器化实践在金融行业落地面临的问题和挑战
作者陈广镇、李焕,微众银行容器平台负责人,拥有大规模 Kubernetes 集群开发运维经验。目前负责微众银行容器项目规划、容器平台架构和开发。 本文整理自微众银行容器负责人陈广镇和李焕 在 Techo 开发者大会云原生专题的分享内容——微众容器化实践。本文主要和大家介绍微众的容器化实践,具体分为三个部分:里程碑、实践之路,以及未来的规划。 微众应用容器化项目始于2018年底,我们的生产环境在私有机房上,由于基础设施的差异,容器管理系统主要走自研路线,基于开源产品定制。 2019年1月,微众上线了第一
腾讯云原生
2021/01/05
1.4K0
vivo 云原生容器探索和落地实践 | Q推荐
作者 | vivo 互联网容器团队 - Pan Liangbiao 本文根据潘良彪老师在“2022 vivo 开发者大会"现场演讲内容整理而成。vivo 互联网技术公众号后台回复【2022 VDC】获取互联网技术分会场议题相关资料。 2018 年起,vivo 以容器作为基础底座,打造了一站式云原生机器学习平台。向上支撑了算法中台,为算法工程师提供数据管理、模型训练、模型管理、模型部署等能力,为广告、推荐和搜索等业务赋能,成功为算法实现了降本、提效,让云原生和容器价值初露锋芒。基于机器学习平台的试点成果
深度学习与Python
2023/03/29
6230
vivo 云原生容器探索和落地实践 | Q推荐
工商银行十年磨砺:建成同业最大规模云计算平台,既要开源又得可控
2009 年,“双十一”的大幕首次拉开,2010 年总成交额就翻了 18 倍,到了 2011 年更是翻了近 65 倍。以“双十一”为代表的各类电商大促活动直接带动了银行交易频率和数量的大幅增加,对银行系统的弹性扩缩容等能力提出了更高的要求。
深度学习与Python
2022/11/28
9780
工商银行十年磨砺:建成同业最大规模云计算平台,既要开源又得可控
剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略
Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔……
用户1532637
2018/03/29
11.9K8
剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略
推荐阅读
相关推荐
程序员从幼稚到成熟的标志是什么?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档