一、API-Server
- Api-Server除了将客户端(如kubectl)传来的资源信息存入Etcd中,还对这些资源进行校验,这样客户端就不能存入非法的资源信息。
- Api-Server还会处理乐观锁,这样对于并发更新的情况,对对象做更改就不会被其他客户端覆盖。
当我们创建一个资源,Api-Server都做了哪些工作?
通过Kubectl创建一个资源后,他会通过一个HTTP POST请求将资源定义信息发送给Api-Server。当Api-Server接收到创建资源的请求后:
通过认证插件认证客户端:确认是谁发送的请求
首先会轮流调用所有的认证插件,直到有一个能确认**(因此不用遍历完所有的认证插件)**是谁发送了该请求(这是通过检查HTTP请求来实现的)。
根据认证方式,用户信息可以从客户端证书 或者 HTTP的请求头Authorization获取。插件会抽取客户端的用户名、用户ID和归属组,这些信息会交给下一些段授权是时候使用。
通过授权插件授权客户端:决定认证的用户是否可以对请求资源执行请求操作。
通过准入控制插件验证:它主要对传入的资源进行修改完善
验证资源以及持久化存储
请求通过了所有的准入控制插件以后,Api-Server会验证存储到Etcd的对象,然后返回一个响应给客户端。
API-Server的监听机制
在资源发生变更时通知这些组件,然后这些组件再执行自己需要完成的任务
这些组件通过创建到Api-Server的HTTP连接来监听变更。通过此连接,各个组件会接收到监听对象的一些列变更通过。每当更新对象,服务器把新版本对象发送至所有监听该对象的组件。
kube-apiserver作为整个Kubernetes集群操作etcd的唯一入口,负责Kubernetes各资源的认证&鉴权,校验以及CRUD等操作,提供RESTful APIs,供其它组件调用
Kubernetes API Server的核心功能
提供Kubernetes各类资源对象(如Pod、RC、Service等)的增、删、改、查及Watch等HTTP REST接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽,是整个系统的数据总线和数据中心。除此之外,他还是,集群管理的API入口,是资源配额控制的入口,提供了完备的集群安全机制。
Kubernetes为所有资源增删改查的唯一入口,各组件均以list-watch的方式向Apiserve发送请求。为减少Apiserver的压力,各组件都采用缓存来缓存数据。功能模块在某些情况下不直接访问Apiserver,而是通过访问缓存来间接访问Apiserver。
- Kubelet&Apiserver
每个node上的kubelet每隔一个时间周期(通过参数--node-status-update-frequency指定上报频率,默认是 10s 上报一次),就会调用Apiserver的REST接口来报告自身状态。Kubelet通过watch接口,监听pod信息。监听创建、删除、修改事件。