Skip to content

12 apiserver

ziqianzhang edited this page Jun 7, 2023 · 1 revision

sidebar_position: 12 title: API-Server接口表

minik8s APIServer

API Server是minik8s控制平面的核心。主要负责和ETCD存贮打交道,并提供一些核心的APIObject的API,供其他组件使用。在设计API Server的时候,我们主要考虑了两个特性,一个是状态和期望分离的情况,另外一个是Etcd的路径和API分离。

因为如果没有分离,我们考虑下面的情景:当一个Kubelet想要更新某一个Pod的状态的时候,试图Post或者Put请求写入一个完整的Pod对象,在此之前假如用户刚刚通过kubectl apply更新了一个Pod的信息,如果按照上面我所叙述的时间线,就会出现用户的apply的更新的Pod被覆盖了。同样的道理,如果用户删除了一个Pod,按照上面的设计,Kubelet在回传的时候写入了一个完整的Pod,相当于没有做任何的删除。

虽然说上面的例子是因为期望和状态没有分离,但是本质是kubelet的权限太大,能够写入一个完整的Pod。所以为了解决这种问题,我们对于一个对象,往往设计了更新对象接口(更新整个对象),更新对象的状态接口(仅仅更新Status,如果找不到对象那么久不更新。)

Etcd存储API对象的路径都是registry/pods/<namespace>/<name>,而API的格式大多都是/api/v1/pods/namespaces/:namespace/name/:name,可以看到两者的差别还是比较明显的,这是因为API版本看发生动态变化(在实际的k8s中也是这样),但是存储的路径保证兼容原来的。所以在我们的minik8s中,我们同样借鉴了这样的思路。

最后,特别感谢github.com/gin-gonic/gin 为我们提供了简洁易实现的go语言的Web Server框架。更多详细的接口问题,请查看下面的表格。

API接口表

所有的接口都是严格的Restful接口。

ID 请求类型 URI 描述 参数说明 资源类型 URI字段 期望返回值 字段名
1 GET /api/v1/nodes 获取所有的Node 暂无 Node NodesURL 200 OK
2 POST /api/v1/nodes 创建一个Node 暂无 Node NodesURL 201 Created
3 GET /api/v1/nodes/:name 获取一个Node的信息 name是节点的名字,必须 Node NodeSpecURL 200 OK
5 DEL /api/v1/nodes/:name 从集群删除Node name是节点的名字,必须 Node NodeSpecURL 204 DEL
4 PUT /api/v1/nodes/:name 更新一个Node的信息 name是节点的名字,必须 Node NodeSpecURL 200 OK
6 GET /api/v1/nodes/:name/status 获取Node的状态 name是节点的名字,必须 Node NodeSpecStatusURL 200 OK
7 PUT /api/v1/nodes/:name/status 更新Node的状态 name是节点的名字,必须 Node NodeSpecStatusURL 200 OK
8
9 GET /api/v1/namespaces/:namespace/pods 获取所有的Pod namespace名字空间 Pod PodsURL 200 OK
10 POST /api/v1/namespaces/:namespace/pods 创建一个Pod namespace名字空间 Pod PodsURL 201 Created
11 GET /api/v1/namespaces/:namespace/pods/:name 获取某个特定的Pod 同上,name是pod名字 Pod PodSpecURL 200 OK
12 PUT /api/v1/namespaces/:namespace/pods/:name 更新某个特定的Pod 同上,name是pod名字 Pod PodSpecURL 200 OK
13 DEL /api/v1/namespaces/:namespace/pods/:name 删除某个Pod 同上,name是pod名字 Pod PodSpecURL 204 DEL
14 GET /api/v1/namespaces/:namespace/pods/:name/status 获取某个Pod的状态 同上,name是pod名字 Pod PodSpecStatusURL 200 OK
15 POST /api/v1/namespaces/:namespace/pods/:name/status 更新某个Pod的状态 同上,name是pod名字 Pod PodSpecStatusURL 200 OK
_
_ POST /api/v1/namespaces/:namespace/services 创建一个Service namespace名字空间 Service ServiceURL 201 Created
_ GET /api/v1/namespaces/:namespace/services 获取所有的Service namespace名字空间 Service ServiceURL 200 OK
_ GET /api/v1/namespaces/:namespace/services/:name 获取一个特定Service 同上,name是service名字 Service ServiceSpecURL 200 OK
_ DEL /api/v1/namespaces/:namespace/services/:name 删除一个特定Service 同上,name是service名字 Service ServiceSpecURL 204 DEL
_ PUT /api/v1/namespaces/:namespace/services/:name 更新一个特定Service 同上,name是service名字 Service ServiceSpecURL 200 OK
_
_ GET /apis/v1/namespaces/:namespace/jobs 获取所有的Jobs namespace名字空间 Job JobsURL 200 OK
_ POST /apis/v1/namespaces/:namespace/jobs 创建一个Job namespace名字空间 Job JobsURL 201 Created
_ GET /apis/v1/namespaces/:namespace/jobs/:name 获取一个特定Job 同上,name是Job名字 Job JobSpecURL 200 OK
_ DEL /apis/v1/namespaces/:namespace/jobs/:name 删除一个特定Job 同上,name是Job名字 Job JobSpecURL 204 DEL
_ GET /apis/v1/namespaces/:namespace/jobs/:name/status 获取一个Job的状态 同上,name是Job名字 Job JobSpecStatusURL 200 OK
_ PUT /apis/v1/namespaces/:namespace/jobs/:name/status 更新一个Job的状态 同上,name是Job名字 Job JobSpecStatusURL 200 OK
_ POST /apis/v1/namespaces/:namespace/jobfiles 创建一个JobFile namespace名字空间 JobFile JobFileURL 201 Created
_ GET /apis/v1/namespaces/:namespace/jobfiles 获取一个JobFile内容 同上,name是Job名字 JobFile JobFileSpecURL 200 OK
_ PUT /apis/v1/namespaces/:namespace/jobfiles/:name 更新一个JobFile内容 同上,name是Job名字 JobFile JobFileSpecURL 200 OK
_
_ GET /apis/v1/replicasets 获取全局所有Replica replicaSet GlobalReplicaSetsURL 200 OK
_ GET /apis/v1/namespaces/:namespace/replicasets 获取所有的Replica namespace名字空间 replicaSet ReplicaSetsURL 200 OK
_ GET /apis/v1/namespaces/:namespace/replicasets/:name 获取特定的Replica 同上,name是Job名字 replicaSet ReplicaSetSpecURL 200 OK
_ DEL /apis/v1/namespaces/:namespace/replicasets/:name 删除特定的Replica 同上,name是Job名字 replicaSet ReplicaSetSpecURL 204 DEL
_ PUT /apis/v1/namespaces/:namespace/replicasets/:name 更新特定的Replica 同上,name是Job名字 replicaSet ReplicaSetSpecURL 200 OK
_ GET /apis/v1/namespaces/:namespace/replicasets/:name/status 获取特定的Replica 同上,name是Job名字 replicaSet ReplicaSetSpecStatusURL 200 OK
_ PUT /apis/v1/namespaces/:namespace/replicasets/:name/status 更新特定的Replica状态 同上,name是Job名字 replicaSet ReplicaSetSpecStatusURL 200 OK
_
_ GET /apis/v1/namespaces/:namespace/dns 获取DNS namespace名字空间 DNS DnsURL 200 OK
_ GET /apis/v1/namespaces/:namespace/dns/:name 获取DNS 同上,name是DNS名字 DNS DnsSpecURL 200 OK
_ POST /apis/v1/namespaces/:namespace/dns 创建DNS namespace名字空间 DNS DnsSpecURL 201 Created
_ DEL /apis/v1/namespaces/:namespace/dns/:name 删除DNS 同上,name是DNS名字 DNS DnsSpecURL 204 DEL
_
_ GET /apis/v1/namespaces/:namespace/hpa 获取所有的HPA namespace名字空间 HPA HPAURL 200 OK
_ POST /apis/v1/namespaces/:namespace/hpa 创建HPA namespace名字空间 HPA HPAURL 201 Created
_ GET /apis/v1/namespaces/:namespace/hpa/:name 获取特定的HPA 同上,name是HPA名字 HPA HPASpecURL 200 OK
_ PUT /apis/v1/namespaces/:namespace/hpa/:name 更新特定的HPA 同上,name是HPA名字 HPA HPASpecURL 200 OK
_ DEL /apis/v1/namespaces/:namespace/hpa/:name 删除特定的HPA 同上,name是HPA名字 HPA HPASpecURL 204 DEL
_ GET /apis/v1/hpa HPA GlobalHPAURL
_
_ GET /apis/v1/namespaces/:namespace/functions 获取所有函数 namespace名字空间 Function FunctionURL 200 OK
_ POST /apis/v1/namespaces/:namespace/functions 创建一个函数 namespace名字空间 Function FunctionURL 201 Created
_ GET /apis/v1/namespaces/:namespace/functions/:name 获取特定的函数 同上,name是Func名字 Function FunctionSpecURL 200 OK
_ PUT /apis/v1/namespaces/:namespace/functions/:name 更新特定的函数 同上,name是Func名字 Function FunctionSpecURL 200 OK
_ DEL /apis/v1/namespaces/:namespace/functions/:name 删除特定的函数 同上,name是Func名字 Function FunctionSpecURL 204 DEL
_ GET /apis/v1/functions 获取全局的函数 Function GlobalFunctionsURL 200 OK
_
_ GET /apis/v1/namespaces/:namespace/workflow 获取某个Workflow namespace名字空间 Workflow WorkflowURL 200 OK
_ POST /apis/v1/namespaces/:namespace/workflow 创建一个Workflow namespace名字空间 Workflow WorkflowURL 201 Created
_ GET /apis/v1/namespaces/:namespace/workflow/:name 获取特定Workflow 同上,name是workflow名字 Workflow WorkflowSpecURL 200 OK
_ PUT /apis/v1/namespaces/:namespace/workflow/:name 更新Workflow 同上,name是workflow名字 Workflow WorkflowSpecURL 200 OK
_ DEL /apis/v1/namespaces/:namespace/workflow/:name 删除Workflow 同上,name是workflow名字 Workflow WorkflowSpecURL 200 OK
_ GET /apis/v1/namespaces/:namespace/workflow/:name/status 获取Workflow状态 同上,name是workflow名字 Workflow WorkflowSpecStatusURL 204 DEL
_ PUT /apis/v1/namespaces/:namespace/workflow/:name/status 更新状态 同上,name是workflow名字 Workflow WorkflowSpecStatusURL 200 OK
_ 200 OK

返回的json字段

返回字段 说明
data 返回的数据,可能是数组,也可能是实体
error 操作出现错误的原因
message 操作执行的结果,一般是成功的信息
Clone this wiki locally