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