【编者的话】开始着手Kubernetes?看看这个快速入门的Kubernetes架构基础知识和关键点!
Kubernetes作为一个强大平台,尤其是对于云本地应用来说,它的声誉是当之无愧的。它提供了丰富、灵活的功能集。这种声誉还包括一个学习曲线,对于初学者可能有点陡峭,特别是如果你试图以自己的方式参与开放源码平台。
Aqua security的联合创始人兼首席技术官Amir Jerbi表示:“Kubernetes最初的设置看似简单,但要根据需要、规模和安全性正确配置却相当复杂。作为一个开源项目,它是故意松散地结合在一起的,有一些令人困惑的选项。”
这些选项实际上是编排工具强大功能的一部分:你拥有触手可及的强大功能,而且数量很多。从长远来看,Kubernetes可以简化DevOps团队管理容器化工作负载的负担。如果没有编排平台,容器和微服务可能会产生大量的操作开销。但在短期内,这可能会让人感到难以承受。
Kasten的工程主管Tom Manville说:“Kubernetes提供了一组非常丰富的抽象,有效的软件原语,这些原语自动化了计算、存储、网络和其他基础设施服务的功能。在很多方面,开发人员在这些领域的思考会更少,但他们需要学习Kubernetes如何定义和自动化这些功能,以便适当地调用这些功能。”
“如今Kubernetes存在的任何抽象概念都不能使底层系统更容易理解。Red Hat OpenShift的首席技术营销经理克里斯·肖特(Chris Short)说。你和你的团队应该做好从错误中学习的准备。
如果你刚刚开始了解Kubernetes体系结构的基础知识,并了解需要做出的一些选择是非常重要的。有点经验的Kubernetes老手可能会觉得这很简单,但是仍然有成千上万的IT专业人士对这个平台很陌生。这是Kubernetes体系结构基础知识的快速入门,以及在开始时需要了解的一些其他关键内容。
Manville说:“在提供这些功能时,Kubernetes拥有不同的架构组件,操作人员需要学习这些组件——Kubernetes的控制平面和运行在每个节点上的控制平面。他们(还)需要了解保护主组件(比如API服务器)需要什么,因为很多关键功能都是在那里处理的。”
让我们用来自Manville和其他人的更专业的见解来建立理解的基础。
Kubernetes本质上是一个客户机-服务器架构,只是术语可能与你熟悉的其他系统稍有不同。这里的一个关键概念是节点:每个Kubernetes集群包括一个主节点和至少一个工作节点。(一个集群通常包含多个工作节点。)
主节点本质上是操作的大脑:它控制你想要的状态,一切都从它那里得到反馈。工作节点是运行实际应用程序和工作负载的物理或虚拟机。
“Kubernetes有两个目标:成为集群管理人员和资源管理人员,”开发人员Ravi Lachhman解释说。Kubernetes使用的是主到工作节点模型,这意味着工作节点是可伸缩的,并且是可使用的。Kubernetes架构可以为不同的工作负载提供不同的工作节点大小,因此资源管理器部分将在你的集群中找到一个合适的位置来执行工作。”
主节点有三个关键组件:Kubernetes API服务器、调度器和控制器管理器。完整的Kubernetes控制平面还包括etcd和kubectl。后者是Kubernetes用于管理集群的命令行界面,它本质上是告诉主节点做什么的方式。
同时,工作节点包括kubelet、kube-proxy和容器运行时。Kubernetes官方文档提供了一个有用的图表,显示了主节点和工作节点之间的关系,包括其中的每个组件。
这是每个集群的基本设置:一个主节点和至少一个(可能是多个)工作节点或工作机器,它们可以是虚拟的或物理的。
接下来让我们谈谈平台和安全的选择。
考虑到这一点,你需要做出一些关键的设计选择。一个基本的问题是:你是在Kubernetes中为每个应用程序运行一个单独的集群,还是在同一个集群中管理多个应用程序?两者都是可能的;Aqua Security的Jerbi指出,这是关键的架构考虑之一,通常它也有一些优点和缺点。
“多租户模型稍微复杂一些,通常使用Kubernetes命名空间在应用程序之间创建管理隔离,但是在资源利用方面更有效,”Jerbi说。“另一方面,如果你的应用程序本身是大规模的,并且没有太多的共同点,那么设置单独的集群会更简单——尤其是对于初学者来说。”
Jerbi补充说,如果你使用的是商业或托管的Kubernetes服务,后一种方法尤其适用,而且还可以使你更好地针对特定的应用程序调整资源和安全性需求。
Kasten的Manville指出,即使你选择运行在开源Kubernetes项目之上的商业平台来减少日常的管理工作,你仍然有必要了解底层系统。
Manville说:“采用这种方法并不能让他们在理解Kubernetes及其能力方面摆脱困境。”
安全性是你需要做出一些关键决策的另一个领域。
Manville说:“对Kubernetes来说,安全本身就是一个有趣的学习曲线。这个平台支持很多本地控件,但它们在默认情况下不一定是安全启用的,而且也不容易实现。”
当你熟悉了速度和规模之后,请记住Kubernetes是“可扩展的”和“可插拔的”。这又回到了选择的问题上:这不是一个放之四海而皆准的工具。
“当我刚开始的时候,我花了一段时间才意识到Kubernetes是非常可插拔的,”来自Harness的Lachhman说。“如果你不同意Kubernetes平台内部的一个观点或实现,大多数项目都可以被替换。比如,不喜欢Kubernetes处理压力的方式?你可以换到其他服务提供商,比如Istio或Traefik。”
Manville为思考抽象的Kubernetes提供了一个有趣的参考点:云本身。简而言之:它既相似又不同。
“在它与什么相似和不同方面,云提供了一个有趣的比较,”Manville说。“Kubernetes就像云提供抽象和原语以编程方式提供基础设施功能,但Kubernetes不同于云,它不仅仅是基础设施和一个可扩展的对象/资源模型等工作负载——这些是标准化对象,像部署和Pod也指定应用程序界面。”
这是另一层令人眼花缭乱的选择。从大的方面来看,这是一件好事,包括提高安全性,但一开始可能会让人望而生畏。
Manville说:“这种差异允许开发人员对工作负载功能进行非常规范的描述,从而使重要的控制和安全策略能够被检测出来。开发人员可以在生命周期的早期使用这些功能来确保更大的工作负载安全性,但是他们也需要知道,保护环境所需的配置并不总是显而易见的。”
想了解更多关于Kubernetes的信息吗?让企业家项目(原文网站)深入了解你需要知道的一切。然后看看这些电子书、文章和网络研讨会,在Kubernetes上了解更多,并与你的团队分享:
原文链接:Kubernetes architecture for beginners