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

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

3天内不再提示

K8s有何优缺点?

马哥Linux运维 来源:马哥Linux运维 2023-10-17 14:50 次阅读

用上Kubernetes后,我们非常兴奋,团队的运作速度也变得如此之快,以至于没有注意到新的分歧正在悄然出现。

K8s激增,但也带来了分歧

Kubernetes 已经存在近 10 年了。在过去五年中,我们看到各种规模的工程团队的采用率急剧增加。从静态网站到成熟的微服务解决方案,部署标准化和跨类型的应用程序扩展的承诺推动了这种爆发式的增长。

Kubernetes 目前正处于“炒作周期”阶段。对于工程师来说,建议 Kubernetes 作为他们选择的平台是更容易接受的,无论他们使用的是云还是本地基础设施。我们已经看到实体零售店部署单节点 Kubernetes 集群来管理其收银系统,我们还看到电子商务网站在数百个数据中心部署数千个节点来管理正常运行时间。

毫无疑问,Kubernetes 势不可挡,但这股热潮消退之时,我们也会发现:Kubernetes留给我们的,即便不是一地鸡毛,也是分歧良多。

有些事情是标准化不了的

人们在宣传 Kubernetes,往往避不开这个话题:标准化。这个想法是,你运行的所有内容都可以容器化,使每个服务都具有标准形状,并具有标准连接器

的确,Kubernetes 以标准化的方式解决了大规模部署软件的问题。但问题在于:它没有解决如何知道该软件是否正在做它应该做的事情。我们根本无法标准化了解某件事是否正在做该做的事情,因为不同的应用程序解决不同的问题。

K8s破坏了DevOps

我是一名应用工程师,而且,我是一名完全拥抱 DevOps 运动的应用工程师。我称其为一场运动,因为这对我来说就是如此。这不是一个新角色或新职责,也不是关于 CI/CD 管道或 IaC。对我来说,DevOps 就是与专家更密切地合作,他们为我编写的代码提供了超越本地计算机的生命力,并与他们合作以确保我的应用程序以最佳状态运行并快速到达用户手中。

这对我来说非常好,因为我开始了解他们面临的挑战,而且他们也开始看到我所面临的限制并可以提供解决方案。我们一起创建了用户想要的应用程序。

使用 Kubernetes,开发团队的运行速度如此之快,以至于他们没有注意到新的分歧正在悄然出现,当然这一次换了一个名字:平台工程。现在,我们有 Kubernetes 管理员可以创建我们的集群,但他们对集群上运行的内容一无所知,因为我们已经标准化了容器周围的所有内容。

有人可能认为这很棒,因为现在应用程序(容器)和基础设施(集群)之间的界限更加清晰。但对此,我不同意。因为在我看来,工程师必须考虑部署、服务、sidecar、服务网格、节点、节点关联性——这样的例子不胜枚举。

你可以说,“但这不是他们应该担心的,这是平台的工作!” 但这恰恰证明上文我提到的观点:现在存在分歧。我们推动基础设施和应用工程师一起工作,深入了解彼此的世界并了解每个部分,以便我们可以向彼此提出明智的问题。现在我们说,“把它留给别人吧;” 他们知道自己在做什么”,这就是我们 10 年前的情况。当出现问题时,孤立的团队会互相指责。应用工程师现在可以说:“它在我的机器上运行,但在生产中停止运行,因此平台的工作就是修复它”,平台工程师可以指着他们的仪表板说一切正常。

不要误会我的意思。在这些团队之间进行良好的对话,并意识到沟通和接受他们需要不同的工具来完成各自的任务,才能让项目能够执行下去。平台工程师管理从自动扩展到网络路由的所有事务,应用工程师负责产品功能并确保客户获得最佳体验

然而,我们看到的是,迁移到 Kubernetes 被视为结束。但第二天呢?一旦一切都在那里运行,我们就没有其他事可做了,对吗?我们不需要每年升级 Kubernetes,不是吗?

K8s来了,监控工具也失灵了!

随着转向 Kubernetes,以及我们用来托管应用程序的基础设施(例如 Pod)的短暂性,我们用于监控和调试应用程序的方法失败了。我们正在采用在基础设施级别使用的方法,并将其应用于应用程序调试技术,因为现在一切都是标准化的,所以一切都是基础设施。这严重影响了在 Kubernetes 中构建的应用程序开发人员,以及希望为他们提供更多系统上下文的平台工程师的服务。

K8s在支持现代应用程序开发时,维护的方法同样需要进化。Kubernetes 并没有让我们的应用程序更易于观察,只是让它们更容易部署和迭代。这并不是一件坏事。

轻松更新应用程序、促进更多部署、进行红/绿部署和金丝雀的能力——这些都是伟大的事情,将提高应用程序工程师支持其应用程序的能力。它并没有让应用程序开发人员更轻松地调试他们的应用程序。最好的情况是,在 Kubernetes 成为首选部署系统之前,我们就处于这样的状态。最坏的情况是,我们引入了更多现在需要调查的故障点。

当我们处理的服务器数量固定时,我们会将每台服务器添加为应用程序指标中的一个维度。然后我们添加应用程序的版本号。从那里,我们可以深入了解哪个版本/哪个服务器有问题——或者是否所有服务器都有问题。服务器名称和应用程序版本的组合是低基数数据,非常适合时间序列聚合数据库。不过,我们现在所处的情况是 Pod 可以随时重新安排,从而导致可能使用新节点。对于每次部署,我们都有一个新的 Pod 名称,大多数时候,这都是高基数数据,传统的基于指标的系统很难处理。

平台、应用团队各自孤立,上下文缺失

正如我所说,用户并不关心您的基础设施。Pod只是Kubernetes中最小的资源管理组件,他们根本不关心 Pod 上的 CPU、网络带宽或者是否使用服务网格。他们不在乎每项服务是 1 个还是 10 个。他们只关心你的整个系统是否响应他们的请求。

我们所处的情况是,除非代码中有异常、HTTP 错误或其他类型的错误,否则很可能会将其作为基础设施问题推送给平台团队。任何与延迟相关的事情——或者对应用工程师来说没有意义的响应——都会被推给平台团队进行调查。此时,平台团队对应用程序的信息很少,只能根据粗粒度指标调查基础设施问题。再说一遍,我们处于孤立的团队中,彼此之间不交谈。

然而现实情况是,问题可能是 Pod,但也可能是代码。在此阶段,我们需要能够了解问题是否局限于单个基础设施组件(例如 Pod 或节点),或者是否影响到所有内容。这就是考虑高基数数据(例如 Pod 名称)对于应用程序遥测变得至关重要的地方。

这就是为什么需要弥合这一差距的原因。平台和应用工程师需要齐心协力。他们需要有关应用程序和基础设施的上下文、深层上下文数据。他们需要将以客户为中心的数据(例如由应用程序工程师定制的跟踪,以提供特定于其应用程序的上下文)与以基础设施为中心的数据(例如由平台团队管理的 Kubernetes 指标)相关联,以充分了解客户不满意的原因。

写在最后:K8s不是灵丹妙药

当企业完成向 Kubernetes 的迁移并进入运营模式时,他们需要当心:要避免孤立作战的方法。平台工程涉及应用工程师的支持以及他们如何共同为客户提供最佳服务。要提供流程、工具和文化,以便这些团队能够一起工作至关重要。它将确保不存在“我们和他们”的心态,从而导致糟糕的整体客户体验。

这是通过协作而不是控制来完成的。请记住:如果某个工具,必须通过命令使用,而不是人们自发想要使用它,则该工具可能存在问题。

要建立这些无缝协作的高绩效团队,你需要使用通用技术语言充当桥梁。使用 OpenTelemetry 等工具可以通过跟踪(以开发人员、以客户为中心)和指标(以平台基础设施为中心)提供联合思维,这将有所帮助。

平台工程团队和应用程序/产品工程团队一起才能提供最佳的客户体验,但这些关系是需要培养的,当然这不是免费的。

简而言之,Kubernetes 并不是让软件获得获更好性能的灵丹妙药,几个团队一起协作才是至关重要的。

编辑:黄飞

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

    关注

    68

    文章

    10863

    浏览量

    211783
  • 服务器
    +关注

    关注

    12

    文章

    9163

    浏览量

    85429
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68617
  • devops
    +关注

    关注

    0

    文章

    114

    浏览量

    12025
  • kubernetes
    +关注

    关注

    0

    文章

    224

    浏览量

    8720

原文标题:K8s留给我们一地鸡毛!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问并联均流优缺点

    模块电源市场日趋成熟,并联均流优缺点
    发表于 03-16 09:24

    步进电机哪几种驱动方式?分别有优缺点

    单电压驱动是指什么?优缺点?高低压驱动是指什么?优缺点
    发表于 10-28 08:54

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

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

    Docker不香吗为什么还要用K8s

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

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

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

    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>故障处理集锦

    K8S(kubernetes)学习指南

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

    切换k8s上下文多快

    use-context 命令就会很低效。 今天介绍3个工具会让你在多k8s集群环境中工作的很轻松。我将从以下几个方面来评估工具实用性: 速度 如果你多个k8s集群可选择,你切换k8s
    的头像 发表于 05-29 15:26 765次阅读
    切换<b class='flag-5'>k8s</b>上下文<b class='flag-5'>有</b>多快

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

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

    什么是K3sK8sK3sK8s什么区别?

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

    k8s生态链包含哪些技术

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

    常用的k8s容器网络模式哪些?

    常用的k8s容器网络模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器网络模式多种多样
    的头像 发表于 09-19 11:29 243次阅读

    k8s云原生开发要求

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

    混合云部署k8s集群方法哪些?

    混合云部署k8s集群方法是首先需在本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以实现资源互通。然后,编写Deployment文件部署应用,并使用kubectl命令应用至集群。最后,验证应用状态并监控集群性能
    的头像 发表于 11-07 09:37 150次阅读

    k8s和docker区别对比,哪个更强?

    Docker和Kubernetes(K8s)是容器化技术的两大流行工具。Docker关注构建和打包容器,适用于本地开发和单主机管理;而K8s则提供容器编排和管理平台,适用于多主机或云环境,具备自动化
    的头像 发表于 12-11 13:55 104次阅读