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

【K8s】cloudcfg 源码分析 01-02

原创
作者头像
Librant
修改2022-07-26 23:26:42
2790
修改2022-07-26 23:26:42
举报
文章被收录于专栏:跟我一起学 K8s跟我一起学 K8s

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

本小结主要来分析下 pkg/client 中的代码:

首先, 源码的开始就提供了 kubenetes 端的客户端接口:

代码语言:go
复制
// ClientInterface holds the methods for clients of Kubenetes, an interface to allow mock testing
type ClientInterface interface {
	ListTasks(labelQuery map[string]string) (api.TaskList, error)
	GetTask(name string) (api.Task, error)
	DeleteTask(name string) error
	CreateTask(api.Task) (api.Task, error)
	UpdateTask(api.Task) (api.Task, error)

	GetReplicationController(name string) (api.ReplicationController, error)
	CreateReplicationController(api.ReplicationController) (api.ReplicationController, error)
	UpdateReplicationController(api.ReplicationController) (api.ReplicationController, error)
	DeleteReplicationController(string) error

	GetService(name string) (api.Service, error)
	CreateService(api.Service) (api.Service, error)
	UpdateService(api.Service) (api.Service, error)
	DeleteService(string) error
}

【注意:task 在后面的版本,被修改成 pod】

所有通过客户端的方式,都是通过 ClientInterface 接口暴露出去的;

1)ListTasks():

代码语言:go
复制
// ListTasks takes a label query, and returns the list of tasks that match that query
func (client Client) ListTasks(labelQuery map[string]string) (api.TaskList, error) {}

这个方法比较简单,查找 labelQuery 的标签,通过 http 请求获取所有的 task 列表;

主要是使用 EncodeLabelQuery() 函数进行拼接 URL;

代码语言:go
复制
func EncodeLabelQuery(labelQuery map[string]string) string {
	query := make([]string, 0, len(labelQuery))
	for key, value := range labelQuery {
		query = append(query, key+"="+value)
	}
	return url.QueryEscape(strings.Join(query, ","))
}

2)GetTask() :

代码语言:go
复制
// GetTask takes the name of the task, and returns the corresponding Task object, and an error if it occurs
func (client Client) GetTask(name string) (api.Task, error) {}

根据 task 的名称,查询对应 task 信息;

代码语言:go
复制
_, err := client.rawRequest("GET", "tasks/"+name, nil, &result)

DeleteTask()

CrateTask()

UpdataTask()

这几个方法基本跟 GetTask() 方法类似;

3)下面这类就是控制器相关的增删改查方法

代码语言:go
复制
// GetReplicationController returns information about a particular replication controller
func (client Client) GetReplicationController(name string) (api.ReplicationController, error) {}

_, err := client.rawRequest("GET", "replicationControllers/"+name, nil, &result)

查询类的都是直接通过 URL 直接与 api-server 进行通信;

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档