重学k8s: 05.认识Kubernetes的API
2021-08-06
K8S的API和API资源对象 #
通过前面几节的学习,我们已经知道k8s集群中控制平面节点(control-plane)上的核心组件时kube-apiserver
。
kube-apiserver是集群控制管理、资源配置、安全机制的入口,提供了HTTP API服务,以供终端用户、集群内部的组件和服务、集群外部组件相互通信。
使用Kubernetes API可以查询和操纵Kubernetes API中的资源对象。那么有哪些API资源对象呢?之前的内容中已经提及到了两个分别是组成集群的Node
和k8s将多个容器组成一个逻辑单元的Pod
。Node和Pod就是两个K8S API对象,关于更多的API对象后边再展开学习。
总结一下,位于K8S集群外部或内部的K8S API的客户端(kubectl, dashboard, 集群内部的其他组件服务)通过K8S API查询和操作K8S API对象。 我们也可以编写程序来访问K8S API,K8S的文档页https://kubernetes.io/zh/docs/reference/using-api/client-libraries/给出了常用编程语言使用K8S API的客户端库。
K8S API的组和版本 #
K8S API遵循OpenAPI规范(https://www.openapis.org/),并以端点/openapi/v2
提供API规范。
K8S API随着K8S的迭代发展而不断变化和发展,例如新的API对象和对象字段可以被频繁的加入,同时也会删除某些API对象和字段,为了保持在一定时间内对旧版本客户端的兼容性,K8S还制定了"API废弃策略"。K8S API实际上是一个API集合,每个集合称为一个API组(API Group),每个组下有多个API对象。K8S的API版本管理是面向组的。目前API的版本有三类分别是:
- v1 表示正式发布(GA Generally available稳定版)
- v1beta1 预发布(Beta)
- v1alpha1 试验特性Alpha
API版本分类和API组是多对多的关系,即每个组可以包含多个版本的API。更多内容可以去查看k8s弃用策略文档中的弃用API部分。(https://kubernetes.io/zh/docs/reference/using-api/deprecation-policy/)
API资源对象之间靠apiVersion(API组)、kind(资源类型)、namespace(名字空间)、name(名称)来相互区分。
例如下面的是用yaml描述的两个API资源对象。第一个资源对象的API组是核心组
v1版本,资源类型是Pod
,命名空间是default
,名称是curl。
第二个资源对象的API组是networking.k8s.io
组的v1版本,资源类型是Ingress
,命名空间是kube-system
,名称是kubernetes-dashboard。
1kind: Pod
2apiVersion: v1
3metadata:
4 namespace: default
5 name: curl
6...
1kind: Ingress
2apiVersion: networking.k8s.io/v1
3metadata:
4 name: kubernetes-dashboard
5 namespace: kube-system
6...
另外还要知道核心组的REST API路径是/api/v1
,特定组名$GROUP_NAME
的REST路径是/apis/$GROUP_NAME/$VERSION
,例如上面例子中的networking.k8s.io/v1
。