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

【K8s】源码片段 01-02

原创
作者头像
Librant
修改2022-06-13 23:05:00
2180
修改2022-06-13 23:05:00
举报
文章被收录于专栏:跟我一起学 K8s跟我一起学 K8s

本小结主要分析 registry/interface.go


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

// TaskRegistry is an interface implemented by things that know how to store Task objects
type TaskRegistry interface {
	// ListTasks obtains a list of tasks that match query.
	// Query may be nil in which case all tasks are returned.
	ListTasks(query *map[string]string) ([]api.Task, error)
	// Get a specific task
	GetTask(taskId string) (*api.Task, error)
	// Create a task based on a specification, schedule it onto a specific machine.
	CreateTask(machine string, task api.Task) error
	// Update an existing task
	UpdateTask(task api.Task) error
	// Delete an existing task
	DeleteTask(taskId string) error
}

// ControllerRegistry is an interface for things that know how to store Controllers
type ControllerRegistry interface {
	ListControllers() ([]api.ReplicationController, error)
	GetController(controllerId string) (*api.ReplicationController, error)
	CreateController(controller api.ReplicationController) error
	UpdateController(controller api.ReplicationController) error
	DeleteController(controllerId string) error
}

regitry 中提供了两个接口:

  • TaskRegistry
  • ControllerRegistry

这两个接口提供的方法差不多,对 Task/Controller 处理的封装;

  • List(): 列出
  • Get():获取
  • Create():创建
  • Update():更新
  • Delete():删除

在 pkg/registry/task/task_registry.go 中对 TaskRegistry 接口的实现;

在 pkg/registry/controller/controller_registry.go 中对 ControllerRegistry 接口的实现;


下面来详细分析这些接口的实现:

pkg/registry/task_registry.go

代码语言:go
复制
// TaskRegistryStorage implements the RESTStorage interface in terms of a TaskRegistry
type TaskRegistryStorage struct {
	registry      TaskRegistry
	containerInfo client.ContainerInfo
	scheduler     Scheduler
}

TaskRegistryStorage 结构体中有三个成员变量:

  • TaskRegistry:Task 相关的操作
  • ContainerInfo: 运行的容器的信息
  • Scheduler:调度的接口

该结构体有五个成员方法:

  • List():查找服务和标签的任务列表; 实际也是调用的 TaskRegistry 中的 List() 方法;
代码语言:go
复制
queryMap := client.DecodeLabelQuery(url.Query().Get("labels"))

根据输入的 URL 中的 labels 参数,返回 labels 的 map;

labels 中的标签值:key1=value1,key2=value2 的形式;

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

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

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

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

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