前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【K8s】api-server 源码分析 01-03

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

原创
作者头像
Librant
修改2022-06-19 16:08:04
3120
修改2022-06-19 16:08:04
举报
文章被收录于专栏:跟我一起学 K8s跟我一起学 K8s

【注】源码分析均以 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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档