【containerd 1.0 源码分析】containerd-shime 启动流程分析
来源:互联网 发布:青少年行知实践园的题 编辑:程序博客网 时间:2024/06/05 01:03
命令:
shim for container lifecycle and reconnection
USAGE:
containerd-shim [global options] command [command options] [arguments...]
VERSION:
v1.0.0-alpha3.m
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug enable debug output in logs
--namespace value, -n value namespace that owns the task
--socket value, -s value abstract socket path to serve on
--address value, -a value grpc address back to containerd
--help, -h show help
--version, -v print the version
一. containerd-shim main 函数
1.1 入口目录为 cmd/containerd/main.go 中 main 函数,NewApp 使用了第三方一个命令行设置,设置名字,以及命令行启动参数,子命令等
app := cli.NewApp()app.Name = "containerd-shim"app.Version = version.Versionapp.Usage = usageapp.Flags = []cli.Flag{ cli.BoolFlag{ Name: "debug", Usage: "enable debug output in logs", }, cli.StringFlag{ Name: "namespace,n", Usage: "namespace that owns the task", }, cli.StringFlag{ Name: "socket,s", Usage: "abstract socket path to serve on", }, cli.StringFlag{ Name: "address,a", Usage: "grpc address back to containerd", },}app.Before = func(context *cli.Context) error { if context.GlobalBool("debug") { logrus.SetLevel(logrus.DebugLevel) } return nil}
1.2 app.Action 主要是建立 GRPC 服务,以及创建 shim 服务
app.Action = func(context *cli.Context) error { // start handling signals as soon as possible so that things are properly reaped // or if runtime exits before we hit the handler signals, err := setupSignals() if err != nil { return err } path, err := os.Getwd() if err != nil { return err } server := grpc.NewServer() e, err := connectEvents(context.GlobalString("address")) if err != nil { return err } sv, err := shim.NewService( path, context.GlobalString("namespace"), &remoteEventsPublisher{client: e}, ) if err != nil { return err } logrus.Debug("registering grpc server") shimapi.RegisterShimServer(server, sv) socket := context.GlobalString("socket") if err := serve(server, socket); err != nil { return err } return handleSignals(signals, server)}
1.3 NewService 如下
// NewService returns a new shim service that can be used via GRPCfunc NewService(path, namespace string, publisher events.Publisher) (*Service, error) { if namespace == "" { return nil, fmt.Errorf("shim namespace cannot be empty") } context := namespaces.WithNamespace(context.Background(), namespace) s := &Service{ path: path, processes: make(map[string]process), events: make(chan interface{}, 4096), namespace: namespace, context: context, } if err := s.initPlatform(); err != nil { return nil, errors.Wrap(err, "failed to initialized platform behavior") } go s.forward(publisher) return s, nil}
1.4 serve 如果没有指定 --socket 则从父继承过来
// serve serves the grpc API over a unix socket at the provided path// this function does not blockfunc serve(server *grpc.Server, path string) error { var ( l net.Listener err error ) if path == "" { l, err = net.FileListener(os.NewFile(3, "socket")) path = "[inherited from parent]" } else { l, err = net.Listen("unix", "\x00"+path) } if err != nil { return err } logrus.WithField("socket", path).Debug("serving api on unix socket") go func() { defer l.Close() if err := server.Serve(l); err != nil && !strings.Contains(err.Error(), "use of closed network connection") { logrus.WithError(err).Fatal("containerd-shim: GRPC server failure") } }() return nil}
阅读全文
0 0
- 【containerd 1.0 源码分析】containerd-shime 启动流程分析
- 【containerd 1.0 源码分析】containerd 启动流程分析
- containerd源码分析
- 【containerd 1.0 源码分析】ctr containers list 源码分析
- 【containerd 1.0 源码分析】ctr run container 源码分析
- docker containerd 架构和源码简单分析
- docker containerd shim分析
- docker containerd shim分析 (转)
- docker containerd简要分析(v0.2.5)
- Containerd迎来1.0通用版本
- 什么是CONTAINERD?
- Dockerd docker-containerd docker-containerd-shim runC
- docker study --- containerd
- docker study --- containerd
- CRI Vs CRI-Containerd
- MogileFS启动流程,源码分析
- ngx源码分析--启动流程
- Activity 启动流程,源码分析
- 【LeetCode】150. Evaluate Reverse Polish Notation
- iOS json格式转换
- LeetCode
- 矩阵快速幂 hdu1757
- 下载Nexus老版本war包
- 【containerd 1.0 源码分析】containerd-shime 启动流程分析
- 【Python学习系列二十八】绘图库pyecharts
- Linux下线程同步问题中的互斥锁和条件变量
- 微信小程序学习笔记(一)——css小技巧
- Java并发编程实战(学习笔记四 第五章 基础构建模块 上)
- 嵌入式系统调试手段及方法综述
- 多线程操作--AtomicInteger
- Jsp中连接数据库写sql查询
- poj 2528