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": "read the specified Pod", "consumes": [ "*/*" ], "produces": [ "application/json", "application/yaml", "application/vnd.kubernetes.protobuf" ], "schemes": [ "https" ], "tags": [ "core_v1" ], "operationId": "readCoreV1NamespacedPod", "parameters": [ { "uniqueItems": true, "type": "boolean", "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.", "name": "exact", "in": "query" }, { "uniqueItems": true, "type": "boolean", "description": "Should this value be exported. Export strips fields that a user can not specify.", "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 客户端 能够很简单的进行如下调用:

from kubernetes import clientret = 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)read the specified Pod Path parametersname (required) Path Parameter — name of the Pod namespace (required) Path Parameter — object name and auth scope, such as for teams and projectsConsumes This API call consumes the following media types via the Content-Type request header: */*Query parameterspretty (optional)Query Parameter — If 'true', then the output is pretty printed.exact (optional)Query Parameter — Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'.export (optional)Query Parameter — Should this value be exported. Export strips fields that a user can not specify.Return typev1.PodProducesThis API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/jsonapplication/yamlapplication/vnd.kubernetes.protobufResponses200OK v1.Pod401Unauthorized

有两种方式访问 OpenAPI :

  • 从 kube-apiserver/swagger.json。这个文件会包含所有启用的 GroupVersion 方法和模型,其中的内容会是该 API Server 所对应的最新版本。
  • Kubernetes 的 Github 仓库,可以访问 master 或者其他指定的 Release。

有很多工具 能和这些 API 协同工作,例如可以用 swagger editor 来打开规范文件并渲染文档,或者生成客户端;还可以直接利用 swagger codegen 来生成文档和客户端。自动生成的客户端多数时候是开箱即用的。不过可能需要做一些登录和 Kubernetes 相关的设置。可以使用 Python 客户端 作为模板来开发自己的客户端

本文转自中文社区-Kubernetes 支持 OpenAPI

Kubernetes 支持 OpenAPI相关推荐

  1. Kubernetes支持有状态服务的部署

    原文地址:Kubernetes如何支持有状态服务的部署? 作者:Jack47 转载请保留作者和原文出处 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的R ...

  2. python api中文版_python api中文

    如何在 Apache Flink 中使用 Python API? 作者:孙金城(金竹)整理:韩非 本文根据 Apache Flink 系列直播课程整理而成,由 Apache Flink PMC,阿里巴 ...

  3. 中国公有云三巨头,同时支持Rancher Kubernetes平台

    华为云容器引擎(CCE).阿里云K8S容器服务(ACK)和腾讯云K8S引擎(TKE),中国公有云三巨头正式全面支持Rancher Kubernetes平台. Rancher正式宣布扩大对中国领先Kub ...

  4. 运行支持kubernetes原生调度的Spark程序

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Spark 概念说明 Apache Spark 是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLa ...

  5. Kubernetes 中创建 Pod 时集群中到底发生了些什么?

    想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令: $ kubectl run --image=nginx --replicas=3 然后回车. ...

  6. Kubernetes入门指南

    Kubernetes 简介 Kubernetes 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术 Borg 的开源版本,主要功能包括: 基于容器的应用部署.维护和滚动升级 负载 ...

  7. 扩展Kubernetes API

    目录 自定义资源定义 创建和部署自定义资源定义 定制控制器 Operator开发 Kubernetes示例控制器 Operator Framework 创建和部署Kubernetes Operator ...

  8. Kubernetes写yaml文件遇到的尴尬事情

    我们在写yaml文件的时候字段是非常的多.我们记字段的时候是非常的麻烦,有时间记住了过了几天就忘记了,对我们写yaml文件的时候是非常不便的,为了解决这个问题我们也是经常查阅一些资料才能继续写yaml ...

  9. 《Kubernetes权威指南:从Docker到Kubernetes实践全接触》读书笔记

    写在前面 之前简单的了解过,但是机器的原因,只有单机,因为安装Docker的原因,本机VM上的红帽节点起不来了.懂得不多,视频上都是多节点的,所以教学视屏上的所以Demo没法搞. 前些时间公司的一个用 ...

最新文章

  1. java中解决Launch configuration TimezoneDump references non-existing project问题
  2. 【赠书】新手速递!深度学习视频理解!
  3. IPC\DVS\DVR与NVR之间的区别
  4. Android Studio常用插件
  5. 如何友好的处理 WebApi 中抛出的错误
  6. MYSQL学习笔记 (二)对数据库结构的增删改查
  7. 小学教师计算机说课,浙江温州小学计算机教师资格认证说课稿
  8. win8安装mysql出现2503_win8.1安装msi文件出现2503错误的解决方法
  9. linux定时任务crontab的设置
  10. SpringSecurity系列(三) Spring Security 表单登录
  11. JS之RegExp的使用
  12. linux运行perl脚本,linux运行perl脚本_将Perl脚本从Solaris移植到Linux
  13. 2020年低压电工考试试卷及低压电工复审考试
  14. chm打开秒退_无法打开chm文件
  15. ndows10cad安装不上,win10安装cad2014会显示连接不到网络
  16. 赫兹伯格的双因素激励理论(转载)
  17. 设置好DNS如何检测是是否正确正常通
  18. 农场阳光 (simpson)
  19. TensorFlow 2019
  20. K8S中的pod、services、容器的概念和区别

热门文章

  1. 中国医药品市场供需状况与竞争前景研究报告2022年
  2. 中国照明市场运营现状及发展前景分析报告2021年版
  3. CertEnroll::CX509Enrollment::p_InstallResponse:ASN1 bad tag value met. 0x8009310b
  4. mysql binlog日志的三种模式
  5. IntelliJ - idea15.0.2 破解方法
  6. github托管代码
  7. 使用线程新建WPF窗体(公用进度条窗体)
  8. linux命令总结之traceroute命令
  9. 51 单片机 跑马灯2
  10. 几个主流的Java连接池整理