【K8s】api-server 源码分析 01-03

2022-06-19 16:08:04 浏览数 (1)

【注】源码分析均以 k8s 的第一个 commit 代码分析;

接上一篇 01-02 接着说;

本节讲下对于没有传入 etcd 节点的 api-server 代码:


在 cmd/apiserver/apiserver.go 中的 main():

代码语言:go复制
taskRegistry = registry.MakeMemoryRegistry()
controllerRegistry = registry.MakeMemoryRegistry()
serviceRegistry = registry.MakeMemoryRegistry()

taskRegistry, controllerRegistry, serviceRegistry 三个接口是通过函数 MakeMemoryRegistry() 函数进行返回;

代码语言:go复制
pkg/registry/memory_registry.go

func MakeMemoryRegistry() *MemoryRegistry {
	return &MemoryRegistry{
		taskData:       map[string]Task{},
		controllerData: map[string]ReplicationController{},
		serviceData:    map[string]Service{},
	}
}

通过函数可以知道,返回的是 MemoryRegistry 的结构体,这个结构体同样实现了 taskRegistry, controllerRegistry, serviceRegistry 三个接口;

代码语言:go复制
// An implementation of TaskRegistry and ControllerRegistry that is backed by memory
// Mainly used for testing.
type MemoryRegistry struct {
	taskData       map[string]Task
	controllerData map[string]ReplicationController
	serviceData    map[string]Service
}

MemoryRegistry 三个 map 的结构体成员,map 的 key 类型 etcd 的 key 方式,这里没有用 etcd 的方式存储信息,主要是放在三个 map 的结构体中;

这个文件中主要是实现三个接口的函数的方法:

  • ListTasks(): 获取任务列表信息

其他的方法这里暂时忽略;


这里做个总结:

第一个 commit 的 k8s 的 api-server 代码还是非常简单的:

主要是三个资源接口的实现:

  • TaskRegistry
  • ControllerRegistry
  • ServiceRegistry

这个三个接口的实例化:

  • 有 etcd 存储时的实例化:EtcdRegistry
  • 没有 etcd 存储的实例化:MemoryRegistry

这两个结构体中主要将三个接口的方法进行实现,主要针对 Task,Controller, Service 相关的 增删改查实现;

主要涉及的文件:

代码语言:go复制
cmd/apiserver/apiserver.go

api-server 的入口:main()

代码语言:go复制
pkg/api/types.go

Task/Controller/Service 结构信息的定义;

代码语言:go复制
pkg/apiserver/api_server.go

实际启动 api-server 服务的请求处理 handle

代码语言:go复制
pkg/registry

资源注册表,所有资源的增删改查相关的操作;

0 人点赞