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