Kubernetes是否真的适合您的栈?
许多团队很高兴开始使用Kubernetes。 一些人对Kubernetes本身提供的弹性,弹性,可移植性,可靠性和其他优势感兴趣。 有些人是技术爱好者,他们只是想有机会使用该平台,以进一步了解它。 一些开发人员希望获得使用它的经验,因此他们可以在简历中添加另一项非常需要的技能。 通常,如今,大多数开发人员都希望在某个时候与Kubernetes一起工作。
那可能是一个非常好的主意,但事实并非如此。
Kubernetes旨在解决分布式架构问题
根据官方文档网站的定义:
" Kubernetes为您提供了一个框架,可以弹性地运行分布式系统。 它负责为应用程序扩展和故障转移,提供部署模式等。" |
它不是专门为分布式系统而设计的,而是为容器化应用程序制造的。 即使这样,它的确提供了许多资源,使诸如Microservices解决方案之类的分布式系统的管理和扩展变得更容易。 它也被视为编排系统。
自动化和编排是不同的,但是相关的概念。 自动化通过减少或取代与IT系统的人工交互,而是使用软件执行任务来降低成本,复杂性和错误,从而帮助您提高业务效率。
通常,自动化是指使单个任务自动化。 这与业务流程不同,业务流程是您可以自动执行涉及多个不同系统中许多步骤的流程或工作流的方法。 当您开始将自动化构建到流程中时,可以将它们编排为自动运行。
—什么是编排? RedHat官方网站
换句话说,Kubernetes使管理复杂的解决方案变得更加容易,而如果没有适当的编排系统,这些解决方案将很难维护。 虽然您可以自己实施DevOps工程实践,但如果要从数十种服务扩展到数百种服务,则无法扩展。
Kubernetes很复杂
为了利用其功能,开发人员和IT运营商必须具有容器,网络,安全性,可移植性,弹性和Kubernetes本身的知识。 为了正确利用其工作负载,您应该了解每个组件的工作方式。 要管理集群,您应该了解其架构,存储,API和管理系统,这与传统的虚拟化环境有很大的不同。 为了扩展该解决方案,您应该学习如何集成工具来部署,监视和跟踪服务,例如Helm和Istio。 在那里添加了许多新概念,因此您的团队必须为应对这一挑战做好准备。
Kubernetes的小型解决方案价格昂贵
为了理解原因,让我们强化Kubernetes的关键概念之一-弹性。 要利用此优势,您需要其他节点-超出运行应用程序所需的最小数量。 如果某个节点发生故障,则请求的Pod将重定位到可用节点。 对于生产工作负载,建议至少三个节点具有弹性。
不难想象,如果您只托管一个应用程序,那是不值得的。 但是,即使您拥有十个或更多,您也必须考虑群集的成本是否值得维护它。
维护环境的成本还包括运营支持。 平台越复杂,就应该涉及更多的专业人士。 这可能意味着雇用第三方专业公司来提供支持或包含Openshift之类的支持服务的解决方案。
何时选择Kubernetes
根据您使用的体系结构,应用程序的数量以及它们之间的依赖程度以及团队的运营能力,可以检查Kubernetes是否是所有可用技术中的合适选择。
借助用于容器的Web Apps,您将获得完全可用于生产环境。 借助标准计划,SSL功能和应用程序见解,您无需任何操作即可拥有一个安全,可扩展和受监视的环境。
如果仅处理隔离的应用程序或少量连接的应用程序,则将Azure Web Apps和在同一虚拟网络中运行的容器实例组合在一起可能就足够了。
另一方面,如果您有越来越多的容器化应用程序,将它们托管在Kubernetes中会很有趣。 您将能够在一个集中式环境中托管多种类型的应用程序,例如Web应用程序,API和重复性作业。 您的团队将能够专注于Kubernetes,而不是几个云原生的解决方案。
如果您要处理诸如微服务之类的分布式方案,那就去吧。 分布式架构非常复杂,而Kubernetes旨在使其变得更容易。 除了Kubernetes,我无法认为其他任何平台对于分布式应用程序来说都是完整且可扩展的。
结论
当您处理少量的容器化应用程序,相互隔离或彼此之间没有依赖性时,其他主机选项(例如用于容器的Azure Web Apps或Azure容器实例)或它们的组合可能更简单,甚至更便宜。
如果您的团队对Kubernetes感到满意,并且您拥有越来越多的容器化应用程序,则值得在单个Kubernetes平台(例如Azure Kubernetes服务)中集中托管。
Kubernetes是一个旨在提高性能并减少分布式系统的操作量的平台。 基本上,这使复杂的场景(如微服务)的操作复杂度降低了。
如果您处理的不是很多应用程序,不使用分布式体系结构或没有专业人员在职,那么您将无法利用Kubernetes提供的优势-因为它不是为您而造 。 您最终将给解决方案增加意外和不必要的复杂性。