1. Kubernetes API
可通过HTTP REST接口,与api-server
交互,从而实现对k8s集群资源的控制。
1.1. API Groups
包括:
-
核心API
/api/v1
:常用资源对象(如Container、Pod、Endpoint、Service、ConfigMap等)都定义在这里 -
分组信息API:
/apis/$GROUP_NAME/$VERSION
-
apps/v1
:与应用发布有关,如Deployment、ReplicaSet等) -
extensions/$VERSION
:扩展API组,如DaemonSet、ReplicaSet、Ingress -
batch/$VERSION
:批处理相关,如Job -
autoscaling/$VERSION
:HPA相关 -
certificates.k8s.io/$VERSION
:集群证书操作相关 -
rbac.authorization.k8s.io/$VERSION
:RBAC鉴权相关 -
policy/$VERSION
:Pod安全性相关
-
1.2. REST API操作资源对象
提供了GET、PUT、DELETE、POST、PATCH等接口操作资源对象,格式基本都是JSON。
此外,还增加了Watch的API接口(GET /watch/$RESOURCES
),配合List接口,可实现资源信息同步。信息也支持分页传输,降低数据传输压力。
对于响应,出了通过HTTP状态码显示初步结果,也会在body处返回Status Kind说明详细原因。
2. Fabric8访问Kubernetes API
Fabric8是k8s的客户端实现之一,实际上对Kubernets REST API做了封装。
具体例子可参考: https://github.com/fabric8io/kubernetes-client/tree/master/kubernetes-examples/src/main/java/io/fabric8/kubernetes/examples
而其它也有对应客户端库,例如:
官方的k8s库
其它第三方的:[客户端库 Kubernetes](https://kubernetes.io/zh/docs/reference/using-api/client-libraries/)
3. Kubernetes API扩展
2种方式:
-
CRD:复用
api-server
,只需定义CRD,并提供CRD控制器即可,但需要CRD对象符合api-server
管理规范 -
API聚合:编写额外的
api-server
,以进行更细粒度的控制
3.1. CRD扩展
操作简略步骤:
-
创建CRD定义,主要包括
-
group
:API所属的组 -
scope
:API生效范围(例如Namespace、Cluster等) -
versions
:支持的版本 -
names
:CRD名称,包括单数、复数、kind
、所属组等名称
-
-
根据CRD的
names.kind
,创建自定义资源对象,并在spec
设置参数(需根据CRD开发手册进行自定义配置)- 具体业务需要在CRD控制器中处理
另外还有些高级特性,例如:
-
subresources子资源:status和scale类
-
CRD校验
-
自定义查看CRD时需显示的列
-
Finalizer:CRD删除前的钩子
-
CRD多版本
具体可参考:[定制资源 | Kubernetes](https://kubernetes.io/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/) |
3.2. API聚合
k8s引入API聚合层,用户自行编写一个api-server
,注册到Master的api-server
,仍可以通过HTTP REST访问服务。
操作简略步骤:
-
Master的
api-server
启用API聚合 -
创建自定义的APIService资源,以注册到Master上
-
实现和部署自定义到API Server,常规步骤如下
-
确认Master启用API聚合
-
创建RBAC规则,允许添加APIService资源对象
-
创建新的namespace,用于运行扩展的API Server
-
创建CA证书,用于HTTPS访问签名
-
创建服务端证书和密钥,用于HTTPS访问
-
新namespace下,用服务端证书和密钥创建Secret对象
-
部署API Server实例,可以用Deployment
-
挂载Secret到容器内部
-
在新的namespace创建ServiceAccount
-
创建ClusterRole用于自定义API资源进行操作
-
ServiceAccount与ClusterRole绑定一个ClusterRolebinding
-
ServiceAccount与系统ClusterRole“system:auth-delegator”创建ClusterRolebinding,以将认证决策代理转发到Master
-
ServiceAccount与系统ClusterRole“extension- apiserver-authentication-reader”创建ClusterRolebinding,允许自定义API Server访问名为“extension-apiserver-authentication”的系统ConfigMap
-
创建APIService对象
-
验证APIService的API是否工作
-
一个例子:带你玩转kubernetes-k8s(第54篇-Kubernetes之使用API聚合机制扩展API资源)_坚持的道路注定孤独的博客-CSDN博客_k8s 聚合api