建站服务器 Open API 让 API 提供者可以定义自己的操作和模型,并让开发者可以自动化的生成喜欢语言的客户端,用以和 API 服务器通信。Kubernetes 已经支持 Swagger 1.2(OpenAPI 规范的前身)有一段时间了,但是这一标准不够完整和有效,凭借这一支持,非常难生成工具或客户端。
在 Kubernetes 1.4,我们对目前的模型和操作进行了升级,引入了 Open API 规范(在没被捐献给 Open API 之前被称作 Swagger 2.0)支持的 Alpha 版本。从 Kubernetes 1.5 开始,OpenAPI 规范的支持已经完备,能够直接从 Kubernetes 源码生成规范,对于模型和方法的任何变更,都会保障文档和规范的完全同步。
创新互联服务项目包括兰坪网站建设、兰坪网站制作、兰坪网页制作以及兰坪网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,兰坪网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到兰坪省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!新规范让我们有了更好的 API 文档,甚至还有了一个 Python 客户端。
这一模块化的规范用 GroupVersion 进行分隔,这一做法属于未雨绸缪,我们想要让不同的 API Server 使用不同的 GroupVersion。
规范的结构在 Open API spec definition 中有解释。我们用 operation 标记 来拆分每个 GroupVersion 并尽可能的丰富其中的模型、路径、操作等信息。操作的参数、调用方法以及响应都有文档描述。
例如,获取 Pod 信息的 OpenAPI 规范
{ ... "paths":{ "/api/v1/namespaces/{namespace}/pods/{name}":{ "get":{ "description":"readthespecifiedPod", "consumes":[ "*/*" ], "produces":[ "application/json", "application/yaml", "application/vnd.kubernetes.protobuf" ], "schemes":[ "https" ], "tags":[ "core_v1" ], "operationId":"readCoreV1NamespacedPod", "parameters":[ { "uniqueItems":true, "type":"boolean", "description":"Shouldtheexportbeexact.Exactexportmaintainscluster-specificfieldslike'Namespace'.", "name":"exact", "in":"query" }, { "uniqueItems":true, "type":"boolean", "description":"Shouldthisvaluebeexported.Exportstripsfieldsthatausercannotspecify.", "name":"export", "in":"query" } ], "responses":{ "200":{ "description":"OK", "schema":{ "$ref":"#/definitions/v1.Pod" } }, "401":{ "description":"Unauthorized" } } }, … } …
有了这些信息,以及 kube-apiserver 的 URL,就可以据此来调用接口了(/api/v1/namespaces/{namespace}/pods/{name}),参数包括 name、exact 以及 export 等,调用结果会返回 Pod 信息。客户库生成器也会使用这些信息来创建一个 API 函数调用来读取 Pod 信息。例如 Python 客户端 能够很简单的进行如下调用:
fromkubernetesimportclient ret=client.CoreV1Api().read_namespaced_pod(name="pods_name",namespace="default") https://gist.github.com/mbohlool/d5ec1dace27ef90cf742555c05480146
一个简化版的 read_namespaced_pod;Python Client:https://github.com/kubernetes-incubator/client-python还可以使用 Swagger-codegen 文档生成器来根据这些信息生成文档:
GET/api/v1/namespaces/{namespace}/pods/{name} (readCoreV1NamespacedPod) readthespecifiedPod Pathparameters name(required) PathParameter—nameofthePod namespace(required) PathParameter—objectnameandauthscope,suchasforteamsandprojects Consumes ThisAPIcallconsumesthefollowingmediatypesviatheContent-Typerequestheader: */* Queryparameters pretty(optional) QueryParameter—If'true',thentheoutputisprettyprinted. exact(optional) QueryParameter—Shouldtheexportbeexact.Exactexportmaintainscluster-specificfieldslike'Namespace'. export(optional) QueryParameter—Shouldthisvaluebeexported.Exportstripsfieldsthatausercannotspecify. Returntype v1.Pod Produces ThisAPIcallproducesthefollowingmediatypesaccordingtotheAcceptrequestheader;themediatypewillbeconveyedbytheContent-Typeresponseheader. application/json application/yaml application/vnd.kubernetes.protobuf Responses 200 OKv1.Pod 401 Unauthorized有两种方式访问 OpenAPI
从 kube-apiserver/swagger.json。这个文件会包含所有启用的 GroupVersion 方法和模型,其中的内容会是该 API Server 所对应的最新版本。
Kubernetes 的 Github 仓库,可以访问 master 或者其他指定的 Release。
有很多工具 能和这些 API 协同工作,例如可以用 swagger editor 来打开规范文件并渲染文档,或者生成客户端;还可以直接利用 swagger codegen 来生成文档和客户端。自动生成的客户端多数时候是开箱即用的。不过可能需要做一些登录和 Kubernetes 相关的设置。