【注】源码分析均以 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
资源注册表,所有资源的增删改查相关的操作;