zoukankan      html  css  js  c++  java
  • cri-o 创建非infra容器

    1、// cri-o/server/container.go

    // CreateContainer creates a new container in specified PodSandbox

    func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerRequest) (res *pb.CreateContainerResponse, err error)

    (1)、首先调用sbID := req.GetPodSandboxId(),sandboxID, err := s.podIDIndex.Get(sbID),sb := s.getSandbox(sandboxID)等一系列函数获得sandbox实例

    (2)、再调用containerConfig := req.GetConfig(),name := containerConfig.GetMetadata().GetName(),attempt := containerConfig.GetMetadata().GetAttempt()和containerID, containerName, err := s.generateContainerIDandName(sb.name, name, attempt),创建容器ID

    (3)、创建容器目录containerDir := filepath.Join(s.runtime.ContainerDir(), containerID)

    (4)、调用container, err := s.createSandboxContainer(containerID, containerName, sb, req.GetSandboxConfig(), containerDir, containerConfig)

    (5)、再调用 s.runtime.CreateContainer(container)和s.runtime.UpdateStatus(container)

    (6)、最后,调用s.addContainer(container)和s.ctrIDIndex.Add(containerID)将容器加入数据库

    2、// cri-o/server/container.go

    func (s *Server) createSandboxContainer(containerID string, containerName string, sb *sandbox, SandboxConfig *pb.PodSandboxConfig containerDir string, containerConfig *pb.ContainerConfig) (*oci.Container, error)

    (1)、首先调用specgen := generate.New()调用产生一个默认spec的spec产生器

    (2)、再根据配置文件队specgen进行设置

    (3)、调用podInfraState := s.runtime.ContainerStatus(sb.infraContainer),获取infra容器的信息,主要正对的是ipc namespace和network namespace,nsPath为"/proc/pid/ns/net",最后调用specgen.AddOrReplaceLinuxNamespace(nsType, nsPath)

    (4)、调用specgen.SaveToFile(filepath.Join(containerDir, "config.json"))将spec保存进config.json文件中

    (5)、调用imageSpec := containerConfig.GetImage()和image := imageSpec.GetImage()获取镜像名,接着调用utils.CreateFakeRootfs(containerDir, image)创建根文件系统

    (5)、最后调用并返回 container, err := oci.NewContainer(containerID, containerName, containerDir, logPath, labels, metadata, sb.id, containerConfig.GetTty())

  • 相关阅读:
    【Scala】看代码,初步了解Apply方法
    【Scala】通过简洁代码搞明白伴生关系、主构造器和辅助构造器的关系
    【Scala】关于集合的各种知识点
    【Scala】新手入门,基础语法概览
    C#中的异步多线程13 回调
    C#中的异步多线程12 轮询
    C#中的异步多线程11 等待直到结束
    C#中的异步多线程10 BackgroundWorker类
    C#中的异步多线程9 完整的GUI示例
    C#中的异步多线程8 Task.Yield
  • 原文地址:https://www.cnblogs.com/YaoDD/p/6051271.html
Copyright © 2011-2022 走看看