共计 2285 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 如果想了解容器、微服务架构、现代应用程序开发和云原生计算,则需要了解 Kubernetes。 |
Kubernetes 是现代微服务中最突出的技术之一。它旨在使容器化应用程序的微服务集群管理更简单、更自动化。本文从概念上详细介绍了这一核心技术的工作原理。
了解 Kubernetes 的一种有用方法是将其视为容器的分布式操作系统。Kubernetes 提供了协调容器(最常见的 Docker 容器)和运行在其上的基础结构容器的交互和缩放所需的工具和命令。Kubernetes 是一个设计用于各种场景的通用工具,它是一个非常灵活但又复杂的系统。
Kubernetes 分有两个方面:工作节点和控制平面。工作节点是实际的容器化应用程序以及必要的 Kubernetes 工具所在的位置。控制平面是管理集群工具所在的位置。图 1 对此架构进行了高层次的研究。
如图一所示,该体系结构分为工作节点和负责运行工作负载以及运行管理工具的头节点。
两种情况下的节点都是在虚拟机或实际的机器中执行的。
需要注意的是,Kubernetes 底层基础设施是运行工作节点工作负载时可用的资源(计算、内存、磁盘和网络),但它并不直接控制它们。Kubernetes 负责扩展工作负载,但更高级别的机制(如公共云自动扩展或手动干预)负责调整节点的可用性。因此,可以使用控制器与外部系统进行交互。
图 2 展示了 Kubernetes Worker 节点的基本元素。
kubelet 是运行在工作节点上的一个“小”程序,负责在控制平面和节点之间进行平衡。kubelet 核心目的是执行 pods 上来自头节点集群的指令,并报告工作负载当前的状态。
Kube Proxy 负责在节点上实施网络规则,并允许进出节点的流量。
Kube Proxy 不同于入口,入口在集群级别操作,并定义进入集群的网络路由规则。
Pod 是节点上的离散工作单元,具有复制性。它们是封装一个或多个容器化应用程序的抽象。Pod 可以对一起运行的容器进行分组和隔离,并且同一台机器上的 pod 之间也可以通信。容器和 Pod 之间的关系由 Kubernetes 部署描述符控制。
Pod 通常作为 ReplicaSet 的一部分进行配置和部署。ReplicaSet 定义 Pod 所需的运行时特征,并使 Kubernetes 工作以保持该状态。ReplicaSet 通常由 Deployment 定义,Deployment 定义了 ReplicaSet 参数和管理集群时要使用的方法(即 pod 是更新还是重新创建)。
在 Pod 级别,额外的功能是通过 Sidecar 插件实现的。Sidecar 可以处理诸如 Pod 级别的日志记录和信息收集之类的任务。
图 3 更详细地介绍了工作程序节点中的 Pod。
接下来到了控制器端,了解 Kubernetes 如何操作来控制集群的操作。
图 4 详细介绍了头节点组件。
最容易理解的组件是 etcd(发音为“et-cee-dee”)。Etcd 是一个分布式对象存储,充当整个集群的配置和状态记录数据库。
API 服务器(API Server)是集群的中央通信机制。当控制平面、工作节点和管理员通过 Kubernetes 命令行工具(如 kubectl)或其他 UI 应用配置更改时,API Server 则可以代理它们之间的交互。
调度程序(Scheduler)负责标识运行 Pod 的节点。根据 Pod 的特性和可用节点的现有状态所使用的方法是不同,但是其目标都是达到自定义编写的程度。调度程序在执行工作时与 API 服务器进行交互。
控制器(Controller)组件负责将集群保持在配置时所需的状态,并在集群偏离控制时将其移向该状态。控制器的作用就像一种恒温器,它指定所需的状态,然后工作来维持它。
在 Kubernetes 中,可以创建一个对象,用于记录在 etcd 中的持久实体。然后,控制器将执行操作以确保对象具有所需的属性。
例如,ReplicaSet(上面讨论过)根据使用标准定义运行 pod。相对于该 ReplicaSet 的群集的实际状态是状态。ReplicaSet 是对象,指定的 pod 计数是 spec。集群相对于该 ReplicaSet 的实际状态是 status。控制器从集群接收关于此状态的一致报告,并通过创建或销毁 pod 来采取措施使状态与规范一致。
最后一个组件是映像存储库(也称为图像注册表)。此组件存在于集群之外,管理员和控制平面可以访问它以下载所需的容器定义。注册中心由包括 Docker Hub 在内的各种组织托管,可以是公共的,也可以是私有的。主要的云提供商都为企业提供托管存储库。
现在已经了解了 Kubernetes 架构以及 Kubernetes 是如何实现的。由于其部署、管理和扩展基于容器的应用程序,可见 Kubernetes 不是一个简单的系统。Kubernetes 具有高度的可配置性和灵活性,可以处理意想不到的情况。
Kubernetes 是当前软件架构方法中的最突出的技术之一。因此,对 DevOps、容器、云本地应用程序和微服务体系结构感兴趣的人来说,这些 Kubernetes 的知识都是必不可少的。