K8S:开源容器编排平台,助力高效稳定的容器化应用管理
云计算de小白
Kubernetes(简称K8s)是一个开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
K8S诞生于Google,基于其多年在生产环境运行容器的经验,目前已成为现代微服务架构和云原生应用的核心技术。
图片
K8S对容器的生命周期进行管理,保证系统在大规模生产环境中高效稳定地运行。
K8S 组件
K8s采用主从架构,集群内所有节点都由控制平面进行管理和调度。
如下图所示:
图片
K8S组件主要包括两个核心组件:Control Plane、Worker Nodes。
Control Plane:负责管理整个集群的状态,调度任务,监控集群的正常运行;
Worker Nodes:运行实际的应用程序容器,并负责:容器的运行和管理。
如果想掌握K8s,最重要的就是掌握:Control Plane 和 Worker Nodes。
接下来我会详细讲解:Control Plane 和 Worker Node@mikechen
控制平面组件
控制平面:负责管理 Kubernetes 集群中的所有节点和 Pod。
它由以下几个部分组成,重点关注下图中的“黄色框”:
图片
“黄色框”涉及以下组件:API Server,Scheduler,Controller……等核心组件。
API 服务器
API Server:集群的入口,类似微服务网关,所有的操作都要经过API Server。
负责接收用户和其他组件的请求,并通过REST API提供集群管理功能。
控制器管理器
控制器管理器(Controller Manager):是集群管理中的重要组件,负责保证集群的实际状态和预期状态的一致性。
Controller Manager由多个控制器组成,每个控制器负责处理集群中一个或多个资源对象的状态管理。
如下图所示:
图片
每个控制器负责:特定类型的资源或功能。
常见的控制器有:
总之,控制器的设计使得K8S能够在大规模环境下自动管理容器和服务。
调度器
负责根据调度策略(如资源利用率、亲和性等)将新创建的Pod分配到合适的节点。
例如:通过CPU、内存、GPU等的需求,Scheduler保证节点有足够的可用资源来满足Pod的需求。
另外通过公平调度、优先级等调度策略,保证资源的合理分配和高效利用。
etcd
用于存储集群所有配置信息和状态数据的分布式键值存储系统。
etcd 专注于保证数据的一致性和持久性。
并且,提供快速读取和修改集群状态的能力。
工作节点的组件
工作节点组件:运行实际的应用程序容器,并负责:容器的执行和管理。
每个工作节点包含以下绿色框中所示的组件:
图片
工作节点是实际应用程序运行的地方。它从 API Server 接收调度指令并运行 Pod。
工作节点上的核心组件包括:
库贝莱特
每个节点上的agent负责保证Pod正常运行。
Pod是K8S中最小的可部署单元,通常由一个或多个紧耦合的容器组成。
如下图所示:
图片
Pod是Kubernetes中的基本构建块,提供容器的封装和管理功能。
它们可以包含一个或多个共享网络和存储资源并在同一环境中运行的容器。
当Pod被创建之后,K8S调度器会把该Pod调度到合适的工作节点上。
调度程序根据资源需求、节点负载和调度策略选择节点。
一旦 Pod 被调度到某个节点,kubelet 就会启动并运行该节点上 Pod 中的容器。
Kube-proxy
网络代理,管理网络规则并确保容器和服务之间的网络通信。
例如:使用iptables或者ipvs来维护网络规则,将流量转发到相应的Pod。
容器运行时
负责运行容器,例如Docker、containerd等。
主复制:拉取容器镜像,创建并运行容器。
并且,提供容器的生命周期管理,比如:启动、停止、监控容器……等等。
总之,K8S 的控制平面和工作节点是集群正常运行的核心,通过这两部分的协同工作,K8S 可以实现高效的容器编排、管理和自动化运维。