您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

升级就崩溃,K8s需要LTS版本!

时间:2023-12-05 12:16:54  来源:51CTO  作者:

Kube.NETes集群不是在升级,就是在升级的路上。而对于维护K8s集群的团队来说,最担心的莫过于,系统因为K8s升级而引发了服务器大规模崩溃。

想象一下,K8s升级发生在某个晚上,突然某个集群因为强制更新,导致了所有服务器的崩溃,也没有快速的方法来恢复,造成的损失将会有多么大呢?

升级就崩溃,K8s需要LTS版本!

因此,旧版本的稳定性就会显得尤其重要。那么既然如此,Kubernetes为何不推出一个LTS版本呢?

升级就崩溃,K8s需要LTS版本!

升级太快,公司跟不上节奏

企业期望稳定性并不是出于保守或惰性,而是太多现实的原因——客户与供应商达成的合同、监管和法定要求、技术风险政策的限制,都在此列。

但为了灵活而生的K8s,似乎在作为基础设施的层面上,并不是一个足够稳重的搭档,它的更新速度非常快,大大超出业务迭代。

即便K8s社区支持的深度和广度足够可靠的支持使用者能从社区类似的问题中找到答案,即便大多数组织能够忍受部署K8s的痛苦,但频繁的升级操作却让许多用户叫苦不迭。

据一位开发者反映,在K8s之上运行GKE升级方案中,经常会导致服务中断数周。对于如何修复或升级控制平面和节点池,给出的默认值选项也非常抽象,集群在不知情下的情况下升级并任意中断服务,更会让人感到恐慌。

不断重写东西,对于中小型团队而言几乎是不可能的。

升级就崩溃,K8s需要LTS版本!

跟上K8s版本发布节奏,有多难

Kubernetes 遵循“N-2”支持政策(最近的 3 个次要版本获得安全和错误修复)以及“15周”的发布周期。因此,一个版本会支持14个月(12 个月的支持期和 2 个月的升级期)。

升级就崩溃,K8s需要LTS版本!

如果我们将此与Debian的支持周期进行比较,我们可以看到直接明显的区别。

升级就崩溃,K8s需要LTS版本!

比如,RedHat就是建立在组织无法经常升级的基础上的,它向用户展示了一些组织可以以何种节奏推出大型变更。

然而,即便是云供应商有能力保持最新,也不会让他们的客户遵守这些极其紧迫的时间窗口。谷歌的GCP 可以接触到许多 Kubernetes 维护人员,且与该项目密切合作,但也没有让客户遵守这些时间表。

AWS 或 Azure 同样也没有这样做。

现实情况是,稳定大于一切。没有人期望公司能够跟上K8s这样的发布节奏。因为跟上节奏的代价很高:

首先,验证集群是否可以升级以及是否安全需要使用第三方工具,或者很好地了解哪些 API 何时被弃用。

其次,在临时环境中进行验证的时间以及维护 Kubernetes 集群升级所需的大量时间,一个明显的问题就出现了。

最后,这些组件和模块需要经过持续的维护和更新,以确保其安全性和稳定性。

因此,通过提供 LTS 版本,可以为用户提供一个稳定的基础,使他们能够在长期内使用 Kubernetes 而不必频繁升级。

升级就崩溃,K8s需要LTS版本!

升级K8s集群,不如新建一个

没有手动升级过K8s集群的人,自然不知道其中的辛酸,下面粗略的清单。

  • 检查所有第三方扩展,例如网络和存储插件
  • 更新 etcd(全部实例)
  • 更新 kube-apiserver(全部控制平面主机)
  • 更新 kube-controller-manager
  • 更新 kube 调度程序
  • 更新云控制器管理器(如果有使用)
  • 更新 kubectl
  • 排空每个节点并更换节点或升级节点,然后读取并监视以确保其继续工作
  • kubectl convert根据清单上的要求运行

的确,上述这些并不是什么“造火箭”的技术,而且所有这些都可以自动化,但这仍然需要有人熟练掌握这些版本。最重要的是,它并不比创建一个新集群容易得多。

即便升级充其量只是比创建新集群稍微容易(通常是更困难)一些,团队也会陷入困境,不清楚到底怎样做才是正确的行动方针。然而,鉴于发布速度如此之快,为每个新版本建立一个新集群并将服务迁移到该集群在逻辑上可能确实具有挑战性。

考虑到团队不想使用 K8s版本的 .0,通常是 0.2,这会损失相当长的14个月时间来等待该标准。然后启动新集群并开始将服务迁移到其中。对于大多数团队来说,这涉及大量的重复和资源浪费,因为至少在一段时间内运行的节点数量可能会增加一倍。CI/CD 管道需要修改,文档需要更改,DNS 条目必须交换。

有些情况或许并不是那么困难,但它由于每一个细节都至关重要,即使采用自动化,其中一个步骤的悄然失败,所造成的风险也足以高到令想干人整日提心吊胆。于是,集群似乎就处于不断落后的状态,除非哪天团队被通知:将“跟上升级进度”视为他们给组织带来的“关键价值”。

不少人都有类似的经历:基础团队的集群已经闲置太久,维护者担心它是否还能够进行安全升级。因此为了避免给整个现有系统带来严重的麻烦,通常都会在运行旧集群的前三个月,告诉领导层:“我需要稍微超出预算来启动一个新集群,并逐个命名空间切换到它。”

即便这种流程方式看起来不太温和。

升级就崩溃,K8s需要LTS版本!

假如K8s有LTS版本

当然,想要永久使用一个版本而不升级,也是不太可能的。因此有人建议,有没有一种可能,K8s可以有一种“死胡同”版本,没有任何升级路径。这个LTS版本提供正式发布后 24 个月的支持,并且Kubernetes团队不会提供到下一个 LTS 的升级。

这种做法似乎更符合目前很多组织的安全升级的现状。这样的话,运维团队的工作流程就变成了运行 24 个月的集群,然后组织需要迁移它们并创建一个新的集群。

而且,这个工作流程有很多意义。首先,定期创建新节点将成为最佳实践,组织可以升级底层 linux 操作系统和虚拟机管理程序。虽然这个频率显然要短于每两年一升级,但这将是一个很好的检查点。

其次,基础设施的运维团队需要再次审视整个堆栈,从新的 ETCD、新版本的 Ingress 控制器开始,而不是像以往,除非绝对必要,组织很可能不愿意触及所有关键部分。

然后,这种做法可能对于商业产品或OSS工具来说,也是一个不错的切入点。目前不少云厂商都有类似的收费版K8s(托管平台),比如谷歌的GKE(google Kubernetes Engine)允许用户使用1.24版本584天,1.26版本可以使用572天。而微软Azure的LTS日期更为宽松,从正式发布日期算起为期2年,AWS的EKS则更长,从发布到LTS结束,版本支持的时间约为800天。

K8s社区可以通过提供大量关于LTS版本升级的指导来协助这些产品或工具。而这也不至于令维护人员束缚在升级项目上。

升级就崩溃,K8s需要LTS版本!

K8s该不该有一个LTS版本?

有业内人士认为,K8s(以及相关软件)存在定期引进重大更改的情况,开发者在工作中需要很多的时间精力去完成升级工作。因此,应该提供LTS版本

许多其他开源软件都提供具有支持多年的LTS版本,例如Ubuntu/Debian 提供5年的LTS版本,NodeJS提供2.5年的支持。还有人认为,即便是2年的支持期对于大型企业而言也不够长。

总结下来,支持派的专家认为,K8s是一个复杂的软件集合,有很多移动部件,继续维护原状来进行测试变得太多棘手,可以说已经达到了大多数人在整个职业生涯中不需要考虑的规模。将如此繁杂的升级工作交给同一波维护人员是不公平的。

在世界各地的托管平台和OSS堆栈间建立一个更nice的中间场地。对于世界各地的 K8s运营商来说,不必处于“繁忙且不安”的不断升级现有集群的状态,这将是一个巨大的好处。

此外,这样还将有利于简化第三方生态系统,从而可以更轻松地针对将存在一段时间的、已知稳定目标进行验证。

同时,这样还会鼓励集群运维员采用更好的工作流程,推动其养成定期创建新集群的习惯,而不是永久保留一个集群升级到天黑,直至刷到“宕机”。

但反对派的观点也不容易忽视:“LTS为运维人员带来了便捷,但也会给开发人员增加潜在的向后移植安全修复的复杂性,而且获得LTS支持的成本同样很高。”

在他们看来,K8s是为了灵活性而生的,本来不适合那些想要使用90年代软件开发流程的大公司。

“经常进行升级和发布,才能确保堆栈中的所有内容都得到充分理解,并且防止让堆栈变得僵化,而且尽早而不是堆积的升级,往往更容易处理。”

升级就崩溃,K8s需要LTS版本!

折中的方案

针对上述两种观点,一位K8s某个发行版的前开发人员提到了一种折中的看法:“有些客户出于各种原因希望延长支持期限。真正的问题应该是,LTS是否应该留给发行版。”

许多发行版会选择不提供比上游更长期的版本,但会提供一些更商业的产品,这些产品对于客户足够重要且需付费。“如果让Kubernetes作者承担LTS的责任,那么项目速度方面就会牺牲不少。因此还是将LTS留给K8s分销商更合适。”

不可否认,在容器思维盛行的开发范式下,Kubernetes 作为容器编排领域的王者,不管你喜欢还是讨厌,它都已经成为行业广泛采用的标准平台。那么,各位又是如何看待K8s版本升级过快的问题呢?



Tags:K8s   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
我们一起聊聊K8s定时备份MySQL并发送到指定邮箱
边车容器(sidecar):边车容器就是与主容器一起在一个pod中运行的容器,为业务容器赋能,共享一个网络空间,所以可以用127.0.0.1:3306连接主容器的数据库。一、背景:一开始的初衷是,想...【详细内容】
2023-12-29  Search: K8s  点击:(72)  评论:(0)  加入收藏
升级就崩溃,K8s需要LTS版本!
Kubernetes集群不是在升级,就是在升级的路上。而对于维护K8s集群的团队来说,最担心的莫过于,系统因为K8s升级而引发了服务器大规模崩溃。想象一下,K8s升级发生在某个晚上,突然某...【详细内容】
2023-12-05  Search: K8s  点击:(213)  评论:(0)  加入收藏
k8s部署维护问题汇总
集群问题系统Error: unknown flag: --etcd-quorum-read删除service 里面的相应字段start request repeated too quickly for kube-apiserver.service查看是不是有之前的进程...【详细内容】
2023-11-30  Search: K8s  点击:(192)  评论:(0)  加入收藏
五分钟 k8s 实战-滚动更新与优雅停机
当我们在生产环境发布应用时,必须要考虑到当前系统还有用户正在使用的情况,所以尽量需要做到不停机发版。所以在发布过程中理论上之前的 v1 版本依然存在,必须得等待 v2 版本启...【详细内容】
2023-11-30  Search: K8s  点击:(237)  评论:(0)  加入收藏
五分钟 K8s 实战-应用探针
今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了...【详细内容】
2023-11-27  Search: K8s  点击:(181)  评论:(0)  加入收藏
Kubernetes创始人发声!K8s在被反噬!
Kubernetes 变得太复杂了,它需要学会克制,否则就会停止创新,直至丢失大本营。Kubernetes 联合创始人Tim Hockin 罕见发声。在今年的 KubeCon 上,他建议,Kubernetes 核心维护者应...【详细内容】
2023-11-27  Search: K8s  点击:(155)  评论:(0)  加入收藏
K8s-服务网格实战-配置 Mesh(灰度发布)
在上一篇 k8s-服务网格实战-入门Istio中分享了如何安装部署 Istio,同时可以利用 Istio 实现 gRPC 的负载均衡。今天我们更进一步,深入了解使用 Istio 的功能。从 Istio 的流量...【详细内容】
2023-11-08  Search: K8s  点击:(339)  评论:(0)  加入收藏
Wasm的野心:取代K8s,不如结合K8s
作者丨B. Cameron Gain编译丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)虽然WebAssembly (Wasm)已被证明在浏览器和某些有针对性的服务器部署中可以很好地工作,但允许开发人员“...【详细内容】
2023-11-07  Search: K8s  点击:(375)  评论:(0)  加入收藏
在本地 K8s 中轻松部署自签 TLS 证书
随着互联网的飞速发展,安全性日益成为我们关注的焦点。HTTPS 已从一项奢侈的技术逐渐成为现代网络交互的标准。它不仅仅是保护信息的重要工具,更是实现信任和品质的象征...【详细内容】
2023-11-03  Search: K8s  点击:(254)  评论:(0)  加入收藏
K8s-服务网格实战-入门Istio
背景终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配...【详细内容】
2023-11-01  Search: K8s  点击:(230)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(7)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(52)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(46)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(85)  评论:(0)  加入收藏
站内最新
站内热门
站内头条