frakti && RunPodSandbox 源码分析
listen = flag.String("listen", "/var/run/frakti.sock", "...")
hyperEndpoint = flag.String("hyper-endpoint", "127.0.0.1:8080", "...")
streamingServerPort = flag.String("streaming-server-port", "22521", "...")
streamingServerAddress = flag.String("streaming-server-addr", "0.0.0.0", "...")
// cmd/frakti/frakti.go
1、func main()
(0)、调用streamingConfig := getStreamingConfig() --->用streaming.DefaultConfig的内容填充获得一个streaming.Config结构
(1)、调用hyperRuntime, streamingServer, err := hyper.NewHyperRuntime(*hyperendpoint, streamingConfig),相当于生成一个hyper client
(2)、调用server, err := manager.NewFraktiManager(hyperRuntime, hyperRuntime, streamingServer)
(3)、最后调用fmt.Println(server.Server(*listen))
// Runtime is the HyperContainer implementation of kubelet runtime API type Runtime struct { client *Client
}
// pkg/hyper/hyper.go
// NewHyperRuntime creates a new Runtime
2、func NewHyperRuntime(hyperEndpoint string) (*Runtime, error)
(1)、调用hyperClient, err := NewClient(hyperEndpoint, hyperConnectionTimeout)
// Client is the gRPC client for hyperd type Client struct {
client api.PublicAPIClient
timeout time.Duration
}
(2)、调用streamingRuntime := &streamingRuntime{client: hyperClient}
(3)、如果streamingConfig不为nil,调用streamingServer, err = streaming.NewServer(*streamingConfig, streamingRuntime)
(4)、最后return &Runtime{client: hyperClient, streamingServer: streamingServer}, streamingServer, nil
// pkg/hyper/client.go
// NewClient creates a new hyper client
3、func NewClient(server string, timeout time.Duration) (*Client, error)
调用conn, err := grpc.Dial(server, grpc.WithInsecure()),再返回&Client{client: api.NewPublicAPIClient(conn), timeout: timeout}
// FraktiManager serves the kubelet runtime gRPC api which will be consumed by kubelet type FraktiManager struct {
// The grpc server
server *grpc.Server
// The streaming server
streamingServer streaming.Server
runtimeService runtime.RuntimeService
imageService runtime.ImageService
}
// pkg/manager/manager.go
// NewFraktiManager creates a new FraktiManager
func NewFraktiManager(runtimeService runtime.RuntimeService, imageService runtime.ImageService) (*FraktiManager, error)
创建 s := &FraktiManager{server: grpc.NewServer(), runtimeService: runtimeService, imageService: imageService},再调用s.registerServer(),最后return s, nil
// pkg/manager/manager.go
func (s *FraktiManager) registerServer()
调用kubeapi.RegisterRuntimeServiceServer(s.server, s)和kubeapi.RegisterImageServiceServer(s.server, s)
// pkg/manager/manager.go
// Server starts gRPC server at unix://addr
func (s *FraktiManager) Serve(addr string) error
(1)、调用syscall.Unlink(addr)
(2)、如果s.streamingServer不为nil,调用s.streamingServer.Start(true)
(3)、调用lis, err := net.Listen("unix", addr),最后return s.server.Serve(lis)
--------------------------------------------------- RunPodSandbox 源码分析 -----------------------------------------
// RunPodSandbox creates and starts a pod-level sandbox.
func (h *Runtime) RunPodSandbox(config *kubeapi.PodSandboxConfig) (string, error)
(1)、调用userpod, err := buildUserPod(config)
(2)、调用podID, err := h.client.CreatePod(userpod)
(3)、调用err = h.client.StartPod(podID)
(4)、最后return podID, nil
// buildUserPod builds hyperd's UserPod based kubelet PodSandboxConfig.
// TODO: support pod-level portmapping (depends on hyperd)
func buildUserPod(config *kubeapi.PodSandboxConfig) (*types.UserPod, error)
(1)、调用cgroupParent := config.Linux.GetCgroupParent(),根据cgroupParent计算得到cpuNumber和memoryinMegabytes
(2)、创建spec := &types.UserPod{
Id: buildSandboxName(config),
Hostname: config.GetHostname(),
Labels: buildLabelsWithAnnotations(config.Labels, config.Annotations),
Resource: &types.UserResource{
Vcpu: cpuNumber,
Memory: memoryinMegabytes,
}
}
(3)、如果config.DnsConfig不为nil,则调用spec.Dns = config.DnsConfig.Servers
(4)、最后return spec, nil
frakti && RunPodSandbox 源码分析的更多相关文章
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
随机推荐
- T- SQL性能优化详解
摘自:http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册 ...
- jenkins中使用tfs插件做增量的版本发布部署
一 配置介绍 使用jenkins的tfs插件进行,源码的下载,编译,打包的操作,然后使用windows的批处理命令,在局域网内(或者本机)把打包的release包,删除掉web.config,然后靠配 ...
- MVC 自定义Htmlhelper扩展
在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁. 具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先 ...
- PHP运行环境,服务器相关配置
1.在DOS命令窗口输入 mysql -hlocalhost -uroot -p回车 进入mysql数据库, 其中-h表示服务器名,localhost表示本地:-u为数据库用户名,root是mysql ...
- java中 try return finally return
finally块里面的代码一般都是会执行的,除非执行 System.exit(int),停止虚拟机,断电. 1.若try代码块里面有return ,假设要return 的值 是A,A为基本类型或者被f ...
- Linux(Centos)之安装Java JDK及注意事项
1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...
- [deviceone开发]-do_ImageView实现正圆的示例
一.简介 我们经常需要用一个正圆形状的图片来设置头像,在do平台这个比较容易,就是通过设置圆角来实现,但是有几个小技巧需要解释一下 主要组件:do_ImageView 二.效果图 三.相关下载 htt ...
- Autorelease返回值的快速释放机制
+ (instancetype)createSark { return [self new];}// callerSark *sark = [Sark createSark]; 编译器改写成了形如下面 ...
- Redis 支持的5种数据结构
redis的崛起绝非偶然,它确实有自己的新东西在里面,它不像Memcached,只能将数据存储在内存中,它提供了持久化机制和数据同步,避免了宕机后的雪崩的问题,即服务器出现问题后,内存中保留的原始数据 ...
- 简述SQL2008部署多实例集群(学习)
数据库集群 集群的存在意义是为了保证高可用.数据安全.扩展性以及负载均衡. 什么是集群? 由二台或更多物理上独立的服务器共同组成的"虚拟"服务器称之为集群服务器.一项称做M ...