k8s的api-server组件负责提供restful api访问端点, 并且将数据持久化到etcd server中. 那么k8s是如何组织它的restful api的?

一, namespaced resources

所谓的namespaced resources,就是这个resource是从属于某个namespace的, 也就是说它不是cluster-scoped的资源. 比如pod, deployment, service都属于namespaced resource. 那么我们看一下如何请求一个namespaced resources.

http://localhost:8080/api/v1/namespaces/default/pods/test-pod

可以看出, 该restful api的组织形式是:

api api版本  namespaces 所属的namespace 资源种类 所请求的资源名称
api v1 namespaces default pods test-pod

这里api version如果是v1的话,表示这是一个很稳定的版本了, 以后不会有大的修改,并且当前版本所支持的所有特性以后都会兼容. 而如果版本号是v1alpha1, v1beta1之类的,则不保证其稳定性.

二, non-namespaced resources

http://localhost:8080/apis/rbac.authorization.k8s.io/v1/clusterroles/test-clusterrole

这里可以观察到它clusterrole与pod不同, apis表示这是一个非核心api. rbac.authorization.k8s.io指代的是api-group, 另外它没有namespaces字段, 其他与namespaced resources类似.不再赘述.

三, non-resource url

这类资源和pod, clusterrole都不同. 例如

http://localhost:8080/healthz/etcd

这就是用来确认etcd服务是不是健康的.它不属于任何namespace,也不属于任何api版本.

总结, k8s的REST API的设计结构为:

[api/apis] /  api-group                           / api-version /  namespaces / namespace-name / resource-kind / resource-name

apis          /   rbac.authorization.k8s.io /  v1              /  namespaces / default                  /  roles              /  test-role

所有的api结构都可以通过访问相关断点来获取信息, 最低一层为api-server的地址, 访问结果如下:

{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/",
"/apis/admissionregistration.k8s.io",
"/apis/admissionregistration.k8s.io/v1beta1",
"/apis/apiextensions.k8s.io",
"/apis/apiextensions.k8s.io/v1beta1",
"/apis/apiregistration.k8s.io",
"/apis/apiregistration.k8s.io/v1",
"/apis/apiregistration.k8s.io/v1beta1",
"/apis/apps",
"/apis/apps/v1",
"/apis/apps/v1beta1",
"/apis/apps/v1beta2",
"/apis/authentication.k8s.io",
"/apis/authentication.k8s.io/v1",
"/apis/authentication.k8s.io/v1beta1",
"/apis/authorization.k8s.io",
"/apis/authorization.k8s.io/v1",
"/apis/authorization.k8s.io/v1beta1",
"/apis/autoscaling",
"/apis/autoscaling/v1",
"/apis/autoscaling/v2beta1",
"/apis/autoscaling/v2beta2",
"/apis/batch",
"/apis/batch/v1",
"/apis/batch/v1beta1",
"/apis/certificates.k8s.io",
"/apis/certificates.k8s.io/v1beta1",
"/apis/coordination.k8s.io",
"/apis/coordination.k8s.io/v1beta1",
"/apis/events.k8s.io",
"/apis/events.k8s.io/v1beta1",
"/apis/extensions",
"/apis/extensions/v1beta1",
"/apis/networking.k8s.io",
"/apis/networking.k8s.io/v1",
"/apis/policy",
"/apis/policy/v1beta1",
"/apis/rbac.authorization.k8s.io",
"/apis/rbac.authorization.k8s.io/v1",
"/apis/rbac.authorization.k8s.io/v1beta1",
"/apis/scheduling.k8s.io",
"/apis/scheduling.k8s.io/v1beta1",
"/apis/storage.k8s.io",
"/apis/storage.k8s.io/v1",
"/apis/storage.k8s.io/v1beta1",
"/healthz",
"/healthz/autoregister-completion",
"/healthz/etcd",
"/healthz/log",
"/healthz/ping",
"/healthz/poststarthook/apiservice-openapi-controller",
"/healthz/poststarthook/apiservice-registration-controller",
"/healthz/poststarthook/apiservice-status-available-controller",
"/healthz/poststarthook/bootstrap-controller",
"/healthz/poststarthook/ca-registration",
"/healthz/poststarthook/generic-apiserver-start-informers",
"/healthz/poststarthook/kube-apiserver-autoregistration",
"/healthz/poststarthook/rbac/bootstrap-roles",
"/healthz/poststarthook/scheduling/bootstrap-system-priority-classes",
"/healthz/poststarthook/start-apiextensions-controllers",
"/healthz/poststarthook/start-apiextensions-informers",
"/healthz/poststarthook/start-kube-aggregator-informers",
"/healthz/poststarthook/start-kube-apiserver-admission-initializer",
"/healthz/poststarthook/start-kube-apiserver-informers",
"/logs",
"/metrics",
"/openapi/v2",
"/swagger-2.0.0.json",
"/swagger-2.0.0.pb-v1",
"/swagger-2.0.0.pb-v1.gz",
"/swagger.json",
"/swaggerapi",
"/version"
]
}

最新文章

  1. 原创:MD5 32位加密软件
  2. android上引入七牛 上传图片或者文件 最终整理版本(可用)
  3. ES 聚合函数
  4. gdb命令与调试方法
  5. codeforces343A A. Rational Resistance
  6. [Everyday Mathematics]20150114
  7. Leetcode 240. Search a 2D Matrix II
  8. Java通过axis调用WebService
  9. [汇编语言]-第九章 jcxz,loop指令,转移位移的意义
  10. WNMP(Windows + Nginx + PHP + MySQL) 安装
  11. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能
  12. ButterKnife注解框架详解
  13. Nginx简易编译安装
  14. Python3学习笔记29-发送邮件
  15. phpmyadmin无法访问503错误的解决方法
  16. SQLSERVER群集故障转移笔记
  17. Java/JSP获得客户端网卡MAC地址的三种方法解析
  18. “吃神么,买神么”的第一个Sprint计划(第五天)
  19. onMeasure实例分析
  20. 原来javascript 自带 encodeURI 和 decodeURI文 方法了

热门文章

  1. UOJ356 【JOI2017春季合宿】Port Facility
  2. For Path
  3. bzoj 2159 - Crash 的 文明世界
  4. xmlhelper类
  5. number(NOIP模拟赛Round 3)
  6. (转)Python 操作 Windows 粘贴板
  7. EVERYTHING 1.3.4参数
  8. VS2005重置所有设置
  9. 利用WM_COPYDATA进行进程间通信
  10. NetStream配置