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 源码分析的更多相关文章

  1. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  2. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  3. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  4. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  5. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  6. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  7. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  8. ABP源码分析二:ABP中配置的注册和初始化

    一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...

  9. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

随机推荐

  1. js补充小知识点(continue,break,ruturn)

    1.continue,break,ruturn eg:1-100的和 $(function () { $("#hello").click(function () { var iNu ...

  2. MySQL练习2

    学习MySQL过程中做的练习题,感觉是不错的例子就记录下来. 练习要使用到的表: 表一:员工表–> yg y_id y_name y_sex y_age y_address b_id 1 赵老大 ...

  3. PHP常量

    常量的定义 在PHP中,常量的声明是通过define()函数来定义的,它也是对大小写敏感的,按照一般的习惯PHP常量总是大写的,且不能再命名的常量之前加上$符号,在这里详细介绍一下define()函数 ...

  4. 【工业串口和网络软件通讯平台(SuperIO)教程】九.重写通讯接口函数,实现特殊通讯方式

    SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1    统一的IO接口 开发一套设备驱动同时具备串口和网络通讯能力,通讯接口在逻辑上是统一的,在此基础 ...

  5. 你所不知的 CSS ::before 和 ::after 伪元素用法

    CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前几天发现了 Creative Link Effects 这个非常有意思 ...

  6. centos 6.0用yum安装中文输入法

    Centos6.2代码 CentOS 6.0没有默认没有装语言支持(Language Support),因此很不方面. 终于发现了有效的方法: su root yum install "@C ...

  7. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q99-Q101)

    Question  99 You have designed a new SharePoint 2010 Web Part that was deployed to the testing envir ...

  8. win7显示不是正版系统的解决方法

    十一长假回来,打开电脑就变成这样了.现在的我已经学会了不再逃避问题,要学着解决问题,就在网上搜集了有关这方面的信息.说是下载一个激活工具就可以了.我就试着下载了,但是不知道为什么下了几个激活工具都不管 ...

  9. 字典转模型框架 Mantle的使用:国外程序员最常用的iOS模型

    Mantle简介 Mantle 是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary) ...

  10. 设置 TabBarItem 选中时的图片及文字颜色

    TabBarController 是在 ios 开发过程中使用较为频繁的一个 Controller,但是在使用过程中经常会遇到一些问题,例如本文所要解决的,如何修改 TabBar 选中时文字及图片的颜 ...