API Server
API Server是集群的核心组件,它提供了对集群资源操作的统一入口点。
它与etcd存储系统紧密集成,负责读取和写入集群状态数据。
其他所有组件(包括kubelet、Controller Manager、Scheduler以及自定义控制器等)都通过HTTP/HTTPS RESTful API与API Server交互,
获取或更新资源状态。
为了安全起见,API Server通常配置了TLS证书以支持HTTPS,并使用认证(如Bearer Tokens、Service Accounts、Client Certificates等)
和授权(RBAC、ABAC等)机制来控制对API的访问。
Controller Manager
Controller Manager包含多个内置控制器,例如ReplicationController、StatefulSetController、JobController等。
每个控制器会持续地监听API Server中的资源对象变化,当检测到实际状态与期望状态不一致时,通过调用API Server接口执行相应的调整操作。
控制器通过watch机制订阅API Server事件,这意味着它们能实时收到相关资源对象的变化通知。
Scheduler
Scheduler根据Pod规格和节点条件决定将Pod调度到哪个节点上运行。
当一个新的Pod被创建但未指定 .spec.nodeName 字段时,Scheduler会查询API Server获得集群中所有节点的信息,然后根据预定义的调度策略
选择合适的节点。
选择完成后,Scheduler会通过调用API Server接口更新Pod对象的 .spec.nodeName 字段,从而触发kubelet在选定节点上启动Pod的过程。
kubelet
kubelet在每个工作节点上运行,其核心职责之一就是确保节点上的容器符合从API Server获取的Pod规范。
kubelet定期向API Server发起请求,拉取分配给该节点的Pod清单,或者通过API Server开启watch机制接收Pod变更通知。
kubelet还会通过HTTP/HTTPS API向API Server报告节点状态信息,包括健康状况、磁盘使用情况、网络状况等。
对于容器生命周期管理,kubelet在接收到API Server传递的Pod清单后,会直接与容器运行时(如Docker或containerd)交互,完成容器的创建、
启动、停止等操作。
kube-proxy
kube-proxy同样在每个节点上运行,用于实现k8s服务发现和负载均衡功能。
它监听API Server的服务定义变更,然后根据这些变更动态更新节点上的网络规则,比如iptables或IPVS规则,以保证服务之间的网络连通性。
其他自定义控制器和外部组件:
第三方Operator或者用户编写的自定义控制器也会像内置控制器一样,通过API Server的RESTful接口来创建、修改或删除资源对象,以满足特定业务
需求。
这些组件通常通过客户端库(如Go语言中的client-go)与API Server进行高效而可靠的交互。
总之,在整个k8s生态系统中,API Server扮演了极其关键的角色,通过提供标准化的HTTP/HTTPS接口,实现了各个组件间的状态同步和协调工作。