K8s-kube-apiserver(Overview)
K8s-kube-apiserver(Overview)
基于1.25
什么是Kube-apiserver
kube-apiserver是K8s控制面的组件之一
- 主要提供集群管理的RESTAPI接口,包括认证授权、数据校验、配置变更
- 只有kube-apiserver才能直接操作etcd集群中的数据
Pod创建的关键流程:
- 用户通过客户端向kube-apiserver发起Pod请求
- kube-apiserver验证请求的有效性,并将其持久化保存到etcd集群
- kube- schedule基于Watch机制感知到新Pod创建的事件
- kube- schedule执行调度算法
- kube-apiserver验证Bind请求,将结果持久化道etcd集群
- kubelet基于Watch机制感知到Pod完成绑定事件
- kubelet对应节点的容器运行时交互,启动容器,并向kube-apiserver上报Pod的运行状态
- kube-apiserver将Pod的最新状态持久化到etcd集群
- 用户通过客户端向kube-apiserver发起Pod查询请求
网络通信框架
kube-apiserver基于HTTP对外服务,REST接口基于go-restful对外暴露服务
go-restful
- Container:相当于HTTP Server,每个Container对象需要绑定监听地址
- WebService:表示一组服务,一般同种类型的服务会放到一个Web Service中
- Route:表示路由,负责根据请求的URL和Method进行路由和回调func
核心原理:
把Container收到的HTTP请求分发给WebService,Web Service匹配到路由请求对应的Handler处理
-
...
func() {
c.webServicesLock.RLock()
defer c.webServicesLock.RUnlock()
webService, route, err = c.router.SelectRoute(
c.webServices,
httpRequest)
}()
...
Protobuf序列化
Protocol Buffers是无关语言、平台的可拓展序列化数据结构,可用于网络通信协议、数据存储等场景。
- ProtoBuf使用二进制字节流编码,比JSON、XML等文本,序列化结构更小
- 使用Protobuf需要通过Protobuf IDL进行定义
- go-to-protobuf主要通过代码生成器tag等形式识别
基础类tags
基础类Tags(protobuf=true/false)决定是否生产Protobuf相关代码
// 支持生产该类的Protobuf IDL |
-
代表不生成+
代表生成go-to-protobuf
支持--packages
生成代码露肩- 默认情况下,K8s给
// +k8s:protobuf-gen=package
没明显使用+protobuf=false
生成代码
引用类tags
引用类Tags可以引用另外一个结构体
// +protobuf.as=Timestamp |
嵌入类tags
嵌入类tags可以为结构体嵌入一个类型
// +protobuf.embed=string |
选项类tags
可以设置消息生成的结构
// 不为当前结构体生成String func |
go-to-protobuf的使用
编译 |
相关参数
参数名称 | 说明 |
---|---|
–proto-import | 核心.proto文件的搜索路径,可以多次指定,说明目录按顺序搜索 |
–package | 输入源,以逗号分隔的包路径 |
–go-header-file | 指定boilerplate header文本文件,生成的代码附带文件的许可证 |
除了手动go-to-protobul,还提供了一键脚本K8s,hask/update-generated-protobuf.sh
架构设计
主要分为三种HTTP Server构成:
- APIExtensionServer:API拓展服务,主要负责CRD的发现与注册,实现处理CRD和CR的REST请求
- KubeAPIServer:API核心服务,主要负责处理系统内置资源对象的REST请求
- AggregatorServer:API聚合服务,主要负责AA(APIAggergator)聚合服务,允许开发者通过自定义APIServer服务拓展原生kube-apiserver的功能
- metrics-server就是一个AA的方法赋予的K8s核心监控指标聚合查询的能力
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论