热门标签 | 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源创计划”,欢迎正在阅读的你也加入,一起分享。


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 近年来,BPM(业务流程管理)系统在国内市场逐渐普及,多家厂商在这一领域崭露头角。本文将对当前主要的BPM厂商进行概述,并分析其各自的优势。目前,市场上较为成熟的BPM产品主要分为两类:一类是综合型厂商,如IBM和SAP,这些企业在整体解决方案方面具有明显优势;另一类则是专注于BPM领域的专业厂商,它们在特定行业或应用场景中表现出色。通过对比分析,本文旨在为企业选择合适的BPM系统提供参考。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
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社区 版权所有