热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kubernetes架构的八大问题

kubernetes,

Kubernetes架构非常适合有一定服务规模的组织,但它对其他人来说可能过于复杂。

开源容器编排平台Kubernetes已经成为任何在生产环境中部署容器化应用程序的人事实上的解决方案。这有很多原因,包括Kubernetes提供了高度的可靠性、自动化和可伸缩性。尽管如此,我有时认为Kubernetes的架构被过分夸大了。尽管现在已经6岁多了,它还是有各种各样的缺点。其中一些是Kubernetes本身固有的,而另一些则是围绕平台发展起来的生态系统的产物。

在您加入Kubernetes的行列之前,请考虑以下关于开源容器编排平台的问题。

Kubernetes是为有一定网络规模的公司设计的。

首先,Kubernetes体系结构是为那些需要管理非常大规模的应用程序环境的公司而构建的。

如果您是谷歌(它的Borg orchestrator为后来的开源Kubernetes项目奠定了基础),那么Kubernetes是一个伟大的工具。如果你是Netflix、Facebook、亚马逊(Amazon)或其他拥有数十个数据中心、数百个应用程序和服务的网络规模公司,这也是正确的。

但是,如果您是一个拥有一个数据中心和十几个应用程序需要部署的较小的组织,那么Kubernetes体系结构可以说是多余的。这就像用推土机为后院草地翻土一样。除非大规模地使用它,否则配置和管理它所需要的努力是不值得的。

这并不是说Kubernetes永远不适合小规模的部署。我认为它正朝着那个方向发展。但是,现在每当我启动Kubernetes集群,在少数服务器上部署一两个应用程序时,我就确信使用更简单的解决方案会更好。

支离破碎的Kubernetes生态

Kubernetes架构的另一个问题是,有太多的Kubernetes发行版——以及与之相关的太多不同的工具、哲学和观点——Kubernetes生态系统已经高度断裂。

当然,在某种程度上,任何开源生态系统都会发生破裂。

例如,Red Hat Enterprise Linux与Ubuntu Linux有不同的包管理器、管理工具等。然而,Red Hat和Ubuntu的相似之处多于它们的不同之处。如果你是Red Hat的系统管理员,如果你想要迁移到Ubuntu,你不需要花六个月的时间来教自己新的工具。

我不认为Kubernetes也能这么说。如果你现在正在使用OpenShift,但想要切换到VMware Tanzu,你将面临一个非常陡峭的学习曲线。尽管这两个Kubernetes发行版使用相同的底层平台——Kubernetes,但它们所添加的方法和工具却截然不同。

基于云计算的Kubernetes服务也存在类似的分裂。谷歌Kubernetes引擎(GKE)的用户体验和管理工具套件与Amazon EKS等AWS云平台截然不同。

当然,这不是Kubernetes架构本身的错。这是不同供应商试图将Kubernetes产品区分开来的结果。但从Kubernetes用户的角度来看,这仍然是一个真正的问题。

Kubernetes的组件太多了

我们谈论Kubernetes时,好像它是一个单一的平台,但实际上它包含了超过6个不同的组件。这意味着,当你安装或更新Kubernetes时,你必须分别处理每个部分。而且大多数Kubernetes发行版都缺乏很好的自动化解决方案来做这些事情。

当然,Kubernetes确实是一个复杂的平台,它需要多个部分来工作。但是与其他复杂的平台相比,Kubernetes在将其各个部分集成到一个易于管理的整体方面做得特别差。典型的Linux发行版也由许多不同的软件组成。但是您可以以一种集中的、精简的方式安装和管理它们。Kubernetes的架构并非如此。

Kubernetes不会自动保证高可用性

使用Kubernetes的一个最常见的原因是,它神奇地以一种方式管理你的应用程序,以确保它们永远不会失败,即使你的部分基础设施失败。

Kubernetes体系结构确实能够智能、自动地决定在集群中将工作负载放置在何处。然而,Kubernetes并不是高可用性的灵丹妙药。例如,它在只有一个主节点的生产环境中正常运行,这将导致整个集群崩溃。(如果主服务器故障,整个集群将基本停止工作。)

Kubernetes也不能自动保证在集群中运行的不同工作负载之间合理分配资源。为此,您需要手动设置资源配额。

很难手动控制Kubernetes

尽管Kubernetes需要大量的手动干预来提供高可用性,但如果您真正想要手动控制的话,它会使手动控制变得相当困难。

可以肯定的是,有一些方法可以修改Kubernetes执行探针时间,以确定容器是否正确地执行,或者强制工作负载在集群中的特定服务器上运行。但是Kubernetes体系结构的设计初衷并不是让管理员手动进行这些更改。它假设您总是喜欢使用默认值。

这是有意义的,因为(如上所述)Kubernetes首先是为web规模的部署而创建的。如果您有数千台服务器和数百个工作负载,您不需要手动配置很多东西。但是,如果您是一个规模较小的企业,希望对集群内的工作负载结构有更多的控制,那么Kubernetes很难做到这一点。

Kubernetes监控和性能优化存在一些挑战

Kubernetes试图让您的工作负载保持正常运行(尽管如上所述,它做到这一点的能力取决于一些因素,比如您设置了多少个主机以及您如何结构化的进行资源分配)。

但是Kubernetes体系结构并不能帮助您监控工作负载或确保它们的性能达到最佳。当出现问题时,它不会向您发出警报,而且从集群中收集监控数据并不容易。Kubernetes发行版附带的大多数监视仪表板也没有提供对环境的深入可见性。有第三方工具可以给你提供可见性,但如果你想运行Kubernetes,这些是你必须建立、学习和管理的另一件事。

同样,Kubernetes也不擅长帮助您优化成本。如果集群中的服务器仅被使用了20%的容量,它不会通知您,这可能意味着您在过度供应的基础设施上浪费资源。在这里,第三方工具可以帮助您应对类似的挑战,但它们增加了更多的复杂性。

Kubernetes将一切都简化为代码

在Kubernetes中,完成任何任务都需要编写代码。通常,这些代码采用YAML文件的形式,然后必须应用于Kubernetes命令行。

许多人将Kubernetes体系结构的一切皆代码的需求视为一种特性,而不是一个bug。然而,当然我理解使用单一方法和工具(意味着YAML文件)管理整个平台的价值,但我确实希望Kubernetes能为需要它们的人们提供其他选项。

有时候,我不想编写一个很长的YAML文件(或者从GitHub中提取一个YAML文件,然后手动调整其中的随机部分以适应我的环境)来部署一个简单的工作负载。我真希望我可以按下一个按钮或运行一个简单的命令(我指的是kubectl命令不需要12个参数,其中许多配置了神秘的数据字符串必须复制粘贴)有没有办法在Kubernetes做一些简单的操作就可以完成这个过程。但就目前而言无法实现。

Kubernetes想要控制一切

我对Kubernetes的最后一个抱怨是,它的设计并不能很好地与其他类型的系统一起运行。它希望成为您用于部署和管理应用程序的唯一平台。

如果您的所有工作负载都是容器化的,并且可以由Kubernetes进行编排,那就太好了。但是,如果您的遗留应用程序不能作为容器运行呢?或者,如果希望在Kubernetes集群上运行部分工作负载,而在外部运行另一部分工作负载,又该怎么办?Kubernetes没有提供原生的功能来做这类事情。它的设计假设是每个人都想一直使用容器运行所有的内容。

总结

为了避免有人指责我讨厌Kubernetes,让我重申一下,它是编排大型容器化应用程序的强大工具。然而Kubernetes架构也有一些缺点。总的来说,如果您需要管理的工作负载,或者您的部署规模不够大,不足以证明Kubernetes带来的复杂性,那么它就不是一个很好的解决方案。为了证明它的全部价值,Kubernetes应该解决您的复杂问题,这样它才能完全达到它在it生态系统的某些领域所享有的声誉。

推荐

Kubernetes入门培训(内含PPT)

从Ice到Kubernetes容器技术,微服务架构经历了什么?

随手关注或者”在看“,诚挚感谢!

本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。


推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • PHP中Smarty模板引擎自定义函数详解
    本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文探讨了如何在Docker构建过程中使用动态环境变量,特别是针对Docker v1.9及以上版本的用户。我们将介绍如何声明和使用构建参数,以及这些参数对构建缓存的影响。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 提升工作效率:掌握15个键盘快捷键
    在日常工作中,熟练掌握计算机操作技巧能够显著提升工作效率。本文将介绍15个常用的键盘快捷键,帮助用户更加高效地完成工作任务。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
author-avatar
nilue1_203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有