容器编排平台Kubernetes介绍

艺帆风顺 发布于 2025-04-02 15 次阅读


一、Kubernetes平台简介

Kubernetes是由Google基于其内部大规模集群管理系统Borg发布的开源分布式容器管理平台,简称k8s。Kubernetes为用户提供了集群管理能力、多租户应用支撑能力、透明的服务注册和服务发现机制、负载均衡能力以及故障发现和自修复等能力。

Kubernetes架构如图所示,主要由一个或多个Master节点和一个或多个Node节点组成。

Master节点包含多个重要组件,例如和存储相关的Etcd组件、和调度相关的Scheduler组件、集群控制高可用组件Controller Manager、与外部通讯协调整个集群的组件API Server、与Kubernetes集群DNS解析相关的CoreDNS组件等。

Node节点含有两个重要的组件,分别为管理集群中Pod生命周期的Kubelet组件和负责Kubernetes中网络配置的Kube-proxy组件。

Kubernetes中有一些重要单元,例如:

Pod:Kubernetes中运行应用或服务的最小单元,其设计理念是支持多个容器在一个Pod中共享网络地址和文件系统。
Service:访问Pod的代理抽象服务,主要用于集群内部的服务发现和负载均衡。
Deployment:用于管理Pod对象,集成了上线部署、滚动升级、创建副本、暂停/恢复上线任务、回滚等功能。
Volumes:即目录,其中存有数据,在容器启动时指定参数会自动挂载至容器内部,Volumes分静态和动态,其具有不同的生命周期。
StatefulSet:通常创建的Pod是无状态的,这样会导致一旦Pod挂掉再重启后会找不到之前挂载的Volume,所以可以通过StatefulSet来保留Pod的状态。
DaemonSet:DaemonSet确保所有节点均运行Pod副本。当集群中添加节点时,节点自动进行Pod添加。当集群中删除节点时,Pod自动删除。

综合以上Kubernetes单元的解释,Kubernetes Pod工作流程可描述如下:

1、提交请求

用户通常提交一个yaml文件,向API Server发送请求创建一个Pod,yaml文件含有此Pod的详细信息,包含此Pod运行副本数、镜像、Labels、名称、端口暴露情况等。API Server接收到请求后将yaml文件中的spec数据存入Etcd中。

2、资源分配

Scheduler通过API Server的watch接口定时监听Etcd数据库中资源的变化(此处指上一步待分配的Pod),当监测到了Pod后,通过Scheduler的调度策略选择出具有运行Pod能力的Node节点并将Pod与目标Node节点进行绑定,同时更新Etcd数据库中Pod的分配情况。

3、新建容器

此时目标Node节点上的Kubelet通过API Server的Watch接口监测到Etcd中Pod的分配信息,同时将Pod的相关数据传递给容器运行时以负责此Pod的整个生命周期,之后Kubelet还会通过容器运行时获取Pod的状态信息并通过API Server更新至Etcd。

4、资源状态同步

为了保证此Pod在Node节点中运行正常(Pod可能会因为某些原因被杀死),Controller Manager中的Replication Set组件通过API Server定时监听Etcd以获得Pod的最新状态并最终对Pod进行数量上的同步,从而保证了Pod运行副本数与用户指定副本数相同。

二、Kubernetes组件介绍

Kubernetes由五种主要组件构成,它们之间的协同工作完成了整个集群的管理,这五种组件分别为API Server、Controller Manager、Scheduler、Kubelet、Etcd。

从kubernetes工作流可以看出,从客户端发送创建Pod请求到Pod最终部署至节点期间参与的主要组件有API Server、Controller-Manager、Scheduler、Kubelet、Etcd。Etcd组件在整个工作流中主要为其余四个组件提供组件状态存储,具体不做解释。以下我们主要对其它四个组件的工作机制予以具体说明:

2.1、API Server

API Server组件为各类Kubernetes资源对象的增删改查提供了REST接口,为贯穿整个Kubernetes系统的数据总线。

API Server组件在如上介绍的Pod工作流中体现的功能可总结为以下几点:

1、API Server为整个Pod工作流提供了资源对象(Pod、Deployment、Service等)的增、删、改、查以及用于集群管理的Rest API接口,集群管理主要包括认证授权、集群状态管理和数据校验等。
2、API Server提供集群中各组件的通信以及交互的功能。
3、API Server提供资源配额控制入口功能。
4、API Server提供访问控制功能。

Kubernetes集群中,API Server运行在Master节点上,默认开放两个端口,分别为本地端口8080和安全端口6443,其中,非认证或授权的http请求通过8080端口访问API Server;而6443端口用于接收HTTPS请求。Kubernetes中默认不启动HTTPS安全访问控制。

API Server在整个Pod工作流中主要负责各个组件间的通信,Scheduler、Controller Manager、Kubelet通过API Server将资源对象信息存入Etcd中,当各组件需要这些数据时又通过API Server的REST接口来实现信息交互,API Server主要与以下组件进行信息同步:

2.2、Kubelet与API Server

Pod工作流中,位于集群中的每个Node节点上的Kubelet会定期调用API Server的REST接口以便向Controller Manager告知当前状态,API Sever接收到状态信息后,将其更新至Etcd中,Kubelet也同时通过API Server的Watch接口去监听Pod信息,从而对各个Node节点上的pod进行管理,监听信息与对应的Kubelet操作可汇总为监听信息表:

监听信息Kubelet执行
是否有新的Pod被绑定到Node节点执行Pod对应容器的创建和启动
是否有Pod对象被删除删除Node上相应Pod容器
是否修改了Pod信息修改Node上Pod的信息

2.3、Controller-Manager与API Server

Controller Manager包含许多控制器,例如Endpoint Controller、Replication Controller、Service Account Controller等,这些控制器通过API Server提供的接口实时监控当前集群中每个资源对象的状态变化并将最新的信息保存在Etcd中,当集群中发生各种故障导致系统发生变化时,各个控制器会从Etcd中获取资源对象信息并尝试将系统状态修复至理想状态。

2.4、Scheduler与API Server

Scheduler通过API Server的Watch接口监听Master节点新建的Pod副本信息并检索所有符合该Pod要求的Node列表同时执行调度逻辑,成功后将Pod绑定在目标节点处。

由于在集群中各组件频繁对API Server进行访问,各组件采用了缓存机制来缓解请求量,各组件定时从API Server获取资源对象信息并将其保存在本地缓存中,所以组件大部分时间是通过访问缓存数据来获得信息的。

2.5、Controller Manager

Controller Manager在整个Pod工作流起着管理和控制整个集群内部的作用,主要对资源对象进行管理,当Node节点中运行的Pod对象或是Node自身发生意外或故障时,Controller Manager会及时发现并处理以确保整个集群处以理想工作状态。

Controller Manager包含五个不同的控制器:

1、Replication Controller

Replication Controller称为副本控制器,在Pod工作流中主要用于保证集群中的Pod副本数始终保持在预期值,若节点发生故障导致Pod被意外杀死,Replication Controller会重新调度保证集群仍然运行指定副本数,另外还可通过调整Replication Controller中spec.replicas属性值来实现扩容或缩容。

2、Endpoints Controller

Endpoints用来表示Service对应后端Pod副本的访问地址,Endpoints Controller则是用来生成和维护Endpoints对象的控制器,其主要负责监听Service和对应Pod副本变化。若监测到Service被删除,则删除和该Service同名的Endpoints对象;若监测到新的Service被创建或是被修改,则根据该Service信息获得相关的Pod列表,然后创建或更新对应的Endpoints对象;若监测到Pod的事件,则更新其对应的Service的Endpoints对象。

3、Node Controller

主要负责集群中某节点宕机时对API Server进行通知和响应。

4、Service Account和Token Controller

主要负责在新的命名空间被部署时为其创建默认的Service Account账户及对应的API访问令牌。

2.6、Scheduler

Scheduler在整个Pod工作流中负责将Pod调度至具体的Node节点,Scheduler通过API Server监听Pod状态,若有待调度的Pod则根据Scheduler Controller中的预选策略和优选策略给各个预备Node节点打分排序,最后将Pod调度到分数最高的Node上,由Node中的Kubelet组件负责Pod的整个生命周期管理。

2.7、Kubelet

Kubelet保证了其所在节点Pod的正常工作,当节点的Pod配置发生变化时,Kubelet组件根据最新的配置执行相应的操作,从而保证Pod可在理想的预期状态。当Pod进行启停更新操作时,容器运行时负责对Pod中的容器进行生命周期管理。此外,Kubelet还负责Volume插件(CVI)和网络插件(CNI)的管理。

    版权声明:本文内容来自CSDN:武天旭,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/wutianxu123/article/details/127914248?spm=1001.2014.3001.5501如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。