Kubernetes为何如此复杂?


容器将应用程序及其所有依赖项打包,以使其可以在不同的计算环境中移植。容器为在物理或虚拟基础架构上更高效地运行云本机应用程序提供了灵活性。它允许根据需求的高峰来扩展或缩减应用程序实例。Kubernetes是使用最广泛的容器编排工具之一。
管理单个容器很容易,但是管理分布在多个主机上的数百个容器非常复杂。需要管理容器并将其连接到外部,以执行诸如调度,负载平衡,分配,扩展等任务,而这正是诸如Kubernetes(K8s)之类的容器编排工具发挥作用的地方。
Kubernetes由Google团队根据其在生产中运行数千个容器的经验构建而成。这确保Kubernetes成为可以满足几乎任何组织的扩展需求的坚如磐石的平台之一。
那里就是复杂!
Kubernetes本身是一个巨大的开源项目,具有很大的操作复杂性和敏锐的学习曲线。尽管K8旨在消除基础结构和容器管理的复杂性,但开发人员仍然发现它具有挑战性和复杂性。
Kubernetes是一个旨在解决复杂问题的复杂系统。在下面找到一些最常见的原因,为什么Kubernetes很复杂。

  • 分布式系统:Kubernetes是一个分布式系统。有很多组件,主机,工作机,调度程序等。当您进行扩展时,可能会有数十或数百个分布式计算机。有许多不同的服务,系统和部件。创建,测试,调试和管理分布式系统通常很复杂。

  • 难于使用:操作Kubernetes集群并不是一件容易的事。按照最佳实践来学习和使用Kubernetes既困难又痛苦。

  • 内在的复杂性:Kubernetes中存在架构上的复杂性,操作上的复杂性,配置上的复杂性和概念上的复杂性。这是一个巨大的开源项目。

  • 抽象:Kubernetes做了很多工作,并带来了许多新的抽象,从而增加了复杂性,实际上对于这么大的系统来说这是一定必要的。

  • 学习曲线:陡峭的学习曲线。并非所有的工程团队都具有相同的技能水平或准备尝试新技术和项目。

  • DevOps:开发和操作变得更加复杂。设置K8s环境以进行本地开发,测试和登台并使其运行变得困难。需要更大的团队。

  • 缺乏专业知识:缺乏专业知识和专家资源。Kubernetes的专业知识仍然不多,而且成本也很高。

  • 众多功能:复杂性的部分原因在于Kubernetes中可用的选项数量众多,并且需要做出选择正确和最佳选项的决策。

  • 对业务的影响:对于组织而言,复杂性会影响问题的采用,培训,迁移,交付速度以及问题发生时的恢复速度。有些企业花费了数万美元,但仍然无法成功迁移到Kubernetes。

 
如何解决复杂?
  • 观念的转变:首先,考虑到它解决的问题,Kubernetes并不复杂。解决复杂问题的复杂工具自然不会是简单的工具。实际上,Kubernetes是为了帮助管理容器化微服务架构的复杂性而开发的。

  • 运维得很好:Kubernetes是一个引擎,安装了一个更好的方向盘来驱动它。寻求专家,托管云服务和合适的合作伙伴的帮助。有经验丰富的团队拥有成熟的产品/平台,可以在您的Kubernetes旅程中为您提供帮助。

  • 随着年龄的增长而变得越来越好:随着年龄的增长,它会变得越来越好,并且每天都变得越来越容易使用。Kubernetes不会随着年龄的增长而变得复杂,就像Hadoop项目发生的事情一样。

  • 正确的用例:将其用于正确的用例。Kubernetes是一个复杂的编排工具,请记住,它并不是所有用例的理想选择。

  • 兼容性:Kubernetes的结构使得您可以扩展它,并且仍然与基本版本兼容。Kubernetes仍然拥有数十家运营商,而Kubernetes仍然是Kubernetes(不是该产品的新版本)。

  • 只使用必需的钟声和口哨声:每个人都不需要一直使用Kubernetes的所有抽象,钟声和哨声。有很多人以更简单的方式使用Kubernetes。

  • 有机增长:如果有机增长,没有系统会感到复杂。遵循自然的方式进行Kubernetes迁移。

  • 生产力:Kubernetes资源基于一系列Kubernetes抽象来建立对常见问题的理解和技能。因此,资源可以在不同的环境,项目和工作中变得更具生产力,价值和可切换性。

 
  • 一次学习,在任何地方都可以应用:您掌握的Kubernetes的复杂性,知识可以随项目而变化。这样,与其他系统相比,它变得不那么复杂。

  • 降低进入门槛:人们可以在本地设置,运行和学习Kubernetes,这比其他类似系统要容易得多,从而降低了进入门槛并降低了感知的复杂性。

  • 托管服务:大多数云提供商都提供托管Kubernetes解决方案,可帮助大多数用户大规模管理复杂性。托管平台将简化平台团队和开发人员的工作。

  • 护栏:使用必要的护栏以确保开发人员不会弄乱事情。

  • 自动化:在组织和过程级别,降低复杂度的最佳方法是通过自动化。当有人必须手动旋转所有旋钮时,Kubernetes感觉要复杂得多,但是一旦安装了正确的自动化工具,则只需设置一次配置或策略。

  • 独立的团队:不要将开发人员拖到底层来学习Kubernetes的复杂性和基础架构的管理,而应使用专家团队或经过验证的产品进行一键式部署。让他们在擅长的地方提高生产力。

  • 可靠性:您可以依靠Kubernetes的复杂性。Kubernetes带有用于运行状况检查,滚动部署等的内置功能,并减少了停机时间。

 
概括
Kubernetes继续蓬勃发展,成为容器编排的行业标准。越来越多的云提供商,服务和第三方供应商将提供产品和解决方案,这些产品和解决方案将消除基础架构的复杂性并向我们分配系统,而开发人员将更加专注于其代码并提高生产力。企业可以更频繁地扩大规模并发布产品和服务,以打败市场竞争。有时,采用Kubernetes的程序和组织变革比学习像Kubernetes这样的新技术更具挑战性。