1

看了k8s源码,发现位于的dockerServicepkg/kubelet/dockershim/docker_service.go和位于的DockerServerpkg/kubelet/dockershim/remote/docker_server.go似乎都实现了CRI shim server.

但是我不明白这两者的区别,为什么我需要区分这两者呢?

k8s 版本是标签 1.23.1

4

1 回答 1

1
  • DockerServer 只是创建dockershim grpc 服务器
// DockerServer is the grpc server of dockershim.
type DockerServer struct {
    // endpoint is the endpoint to serve on.
    endpoint string
    // service is the docker service which implements runtime and image services.
    service DockerService
    // server is the grpc server.
    server *grpc.Server
}
...
// Start starts the dockershim grpc server.
func (s *DockerServer) Start() error {
    glog.V(2).Infof("Start dockershim grpc server")
    l, err := util.CreateListener(s.endpoint)
    if err != nil {
        return fmt.Errorf("failed to listen on %q: %v", s.endpoint, err)
    }
    // Create the grpc server and register runtime and image services.
    s.server = grpc.NewServer()
    runtimeapi.RegisterRuntimeServiceServer(s.server, s.service)
    runtimeapi.RegisterImageServiceServer(s.server, s.service)
    go func() {
        // Use interrupt handler to make sure the server to be stopped properly.
        h := interrupt.New(nil, s.Stop)
        err := h.Run(func() error { return s.server.Serve(l) })
        if err != nil {
            glog.Errorf("Failed to serve connections: %v", err)
        }
    }()
    return nil
}
  • DockerService是实现CRI远程服务服务器的接口
// DockerService is the interface implement CRI remote service server.
type DockerService interface {
    runtimeapi.RuntimeServiceServer
    runtimeapi.ImageServiceServer
}

// **dockerService uses dockershim service to implement DockerService**.

BTW,你确定你以后会用吗?来自最新(5 天前)的消息: Kubernetes 正在从 Dockershim 继续前进:承诺和后续步骤

  • Kubernetes 将在即将发布的 v1.24 版本中删除 dockershim。
  • 如果您使用 Docker Engine 作为 Kubernetes 集群的容器运行时,请准备好在 1.24 中迁移
  • Kubernetes 1.24 的目标是在 2022 年 4 月完全删除。
  • 我们将在 Kubernetes 项目中再支持一年的 Kubernetes 版本 1.23,其中包括 dockershim。
于 2022-01-12T09:45:11.013 回答