【注】源码分析均以 k8s 的第一个 commit 代码分析;
本小结主要来分析下 pkg/client 中的代码:
首先, 源码的开始就提供了 kubenetes 端的客户端接口:
// 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():
// 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;
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() :
// 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 信息;
_, err := client.rawRequest("GET", "tasks/"+name, nil, &result)
DeleteTask()
CrateTask()
UpdataTask()
这几个方法基本跟 GetTask() 方法类似;
3)下面这类就是控制器相关的增删改查方法
// 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 删除。