0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一次k8s升级,滴滴直接故障12小时?

小林coding 来源:小林coding 2023-12-08 15:45 次阅读

前段时间滴滴的故障相信大家都知道了。

中断业务 12 小时定级为 P0 级故障一点都不冤。

45f005c2-9595-11ee-8b88-92fbcf53809c.jpg

故障回顾

网上有传言是运维人员升级 k8s 时,本来计划是从 1.12 版本升级到 1.20,但是操作失误选错了版本,操作了集群降级到低版本。

从下面滴滴技术的博客中也可以看到滴滴的升级方案:

4603b1c6-9595-11ee-8b88-92fbcf53809c.jpg

滴滴为了降低升级成本,选择了原地升级的方式。首先升级 master,然后升级 node。我们一起看一下 k8s 官方架构:

462f33c8-9595-11ee-8b88-92fbcf53809c.jpg

img

master(官网图中叫 CONTROL PLANE) 节点由 3 个重要的组件组成:

cloud-controller-manager:负责容器编排;

kube-api-server:为 Node 节点提供 api 注册服务;

scheduler:负责任务调度。

Node 节点向 kube-api-server 注册成功后,才可以运行 Pod。从滴滴的博客中可以看到,采用原地升级的方式,升级了 master 之后,逐步升级 Node,Node 会有一个重新注册的过程,不过既然选择这个方案,运维人员应该反复演练过,重新注册耗时应该非常短,用户无感知。

但是 master 选错版本发生降级时,会把 kube-api-server 污染,Node 节点注册 master 失败,又不能快速回滚,这样 Node 节点被集群认为是非健康节点,上面的 pod 被 kill 掉,服务停止。

集群隔离

463d72bc-9595-11ee-8b88-92fbcf53809c.png

这次故障大家讨论的话题还有一个比较热门的就是 k8s 集群隔离,因为多个业务比如打车业务、单车业务同时挂,说明都在一个集群上,没有单独建集群来做隔离,这可能也是博客中说的“最大集群规模已经远远超出了社区推荐的5千个 node 上限”的原因。

当然也有可能当时野蛮生长的时候,为了快速上线开展业务,就多个业务建在了一个集群上,后来可能也有过拆分的想法,但发现业务上升空间已经很小,现有集群可以维持,所以就搁置了。

拆分成多个集群好处很明显,业务隔离,故障隔离,可靠性增加,就拿这次升级来说,先升级一个不太关键、业务量也比较小的集群做试点,升级成功了再逐个升级其他集群。

但缺点也很明显,运维复杂度增加,成本增加。

升级方案

工作这些年,也参与过一些大规模的平台重构,但原地升级真的是没有接触过,主要原因就是架构师们不太愿意选择原地升级的方案。而他们主要出于下面考虑:

业务系统原地重构升级,不像推翻重做能够更彻底地升级改造;

考虑对业务影响最小,一般是要通过灰度发布渐进地把流量切过去;

替换升级的方案,更能展现团队的产出。

对于滴滴这样的大公司,相信运维团队大咖如云,无论采用哪种方案,肯定都是经过反复验证的,或许不要选错版本,原地升级也没有问题。

降本增效

看了微博上滴滴道歉的留言区,好多人猜测这次事故的原因是降本增效,裁掉了一线高成本的运维,保留了成本低的新人

从数据上来看,出于降本增效的目的,滴滴这两年确实少了很多人,但我不相信这是造成事故的直接原因。

在快速增长的阶段,确实需要投入大量的技术人员来建设系统。但国内互联网规模也基本见顶了,一个业务经营这么多年,不会再有爆发式地增长,系统也已经非常稳定。这样的背景下,公司确实用不了这么多技术人员了,留下部分人员来维护就够了。

所以,无论哪家公司,降本增效是业务稳定后必定会经历的阶段。想想滴滴这次 12 小时故障的损失,能比养 1000 个技术人员的成本高吗?

对于我们研发人员,如果有机会进入快速增长的公司,那就抓住机会多挣钱,被裁员的时候平常心看待就可以了,想在一家公司干到退休太难了。同时也要看到自己给公司带来的价值,千万不要认为我们技术厉害就比那个 PPT 工程师更有价值。

总结

本文根据网上流传的滴滴故障的原因,分析了升级方案和降本增效。

最后,又快年末了,希望大家都能维护好自己的系统,不要发生严重故障影响自己的年底考核。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 节点
    +关注

    关注

    0

    文章

    216

    浏览量

    24345
  • MASTER
    +关注

    关注

    0

    文章

    102

    浏览量

    11244
  • 滴滴
    +关注

    关注

    1

    文章

    193

    浏览量

    12948

原文标题:一次 k8s 升级,滴滴直接故障 12 小时?

文章出处:【微信号:小林coding,微信公众号:小林coding】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的站式采集。点此
    发表于 02-28 12:49

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    如何利用K8S全面拥抱微服务架构?

    K8S是第个将“切以服务为中心,切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这指导思想,构建在
    的头像 发表于 10-08 15:59 2.7w次阅读

    OpenStack与K8s结合的两种方案的详细介绍和比较

    OpenStack与K8S结合主要有两种方案。K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
    的头像 发表于 10-14 09:38 2.7w次阅读

    如何使用kubernetes client-go实践个简单的与K8s交互过程

    【导读】Kubernetes项目使用Go语言编写,对Go api原生支持非常便捷。 本篇文章介绍了如何使用kubernetes client-go实践个简单的与K8s交互过程
    的头像 发表于 02-02 11:16 6691次阅读
    如何使用kubernetes client-go实践<b class='flag-5'>一</b>个简单的与<b class='flag-5'>K8s</b>交互过程

    Docker不香吗为什么还要用K8s

    Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解K8s 的基本概念,后面再介绍实践,由浅入深步步为营
    的头像 发表于 06-02 11:56 3384次阅读

    简单说明k8s和Docker之间的关系

    这篇文章主要介绍了k8s和Docker关系简单说明,本文利用图文讲解的很透彻,有需要的同学可以研究下 最近项目用到kubernetes(以下简称k8sks之间有
    的头像 发表于 06-24 15:48 3312次阅读

    K8S集群服务访问失败怎么办 K8S故障处理集锦

    问题1:K8S集群服务访问失败?     原因分析:证书不能被识别,其原因为:自定义证书,过期等。 解决方法:更新证书即可。 问题2:K8S集群服务访问失败? curl: (7) Failed
    的头像 发表于 09-01 11:11 1.6w次阅读
    <b class='flag-5'>K8S</b>集群服务访问失败怎么办 <b class='flag-5'>K8S</b><b class='flag-5'>故障</b>处理集锦

    K8S(kubernetes)学习指南

    K8S(kubernetes)学习指南
    发表于 06-29 14:14 0次下载

    mysql部署在k8s上的实现方案

    的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之。这里主要讲 mysql 部署在 k8s 上,mysql 部署在 k8s 上的优势主要有以下几点。
    的头像 发表于 09-26 10:39 2427次阅读

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes简称K8s,是个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
    发表于 07-19 13:14 1081次阅读

    什么是K3sK8sK3sK8s有什么区别?

    Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的切。
    的头像 发表于 08-03 10:53 7070次阅读

    k8s生态链包含哪些技术

    1. Apache APISIX Ingress 定义   在 K8s 生态中,Ingress 作为表示 K8s 流量入口的种资源,想要让其生效,就需要有个 Ingress Con
    的头像 发表于 08-07 10:56 1136次阅读
    <b class='flag-5'>k8s</b>生态链包含哪些技术

    K8S落地实践经验分享

    k8s 即 Kubernetes,是个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
    的头像 发表于 01-02 11:45 989次阅读
    <b class='flag-5'>K8S</b>落地实践经验分享

    k8s云原生开发要求

    Kubernetes(K8s)云原生开发对硬件有定要求。CPU方面,建议至少配备2个逻辑核心,高性能CPU更佳。内存至少4GB,但8GB或更高更推荐。存储需至少20-30GB可用空间,SSD提升
    的头像 发表于 10-24 10:03 109次阅读
    <b class='flag-5'>k8s</b>云原生开发要求