设为首页 收藏本站
查看: 1993|回复: 0

[经验分享] frakti && RunPodSandbox 源码分析

[复制链接]

尚未签到

发表于 2017-6-21 15:57:44 | 显示全部楼层 |阅读模式
  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386250-1-1.html 上篇帖子: Windows Server 2012 NIC Teaming 网卡绑定介绍及注意事项 下篇帖子: 合并SCVMM虚拟机的差异磁盘,并删除那些难以删除的Checkpoints(Shapshots)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表