【问题标题】:What is the difference between dockerService and DockerServer in the kubelet source codekubelet源码中dockerService和DockerServer有什么区别
【发布时间】:2022-01-12 17:45:11
【问题描述】:

在阅读k8s源码的时候发现,位于pkg/kubelet/dockershim/docker_service.go的dockerService和位于pkg/kubelet/dockershim/remote/docker_server.go的DockerServer似乎都实现了@的接口987654323@.

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

k8s 版本是标签 1.23.1

【问题讨论】:

    标签: kubernetes container-runtime-interface


    【解决方案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**.
    

    顺便说一句,你确定你以后会用吗?来自最新(5天前)的消息: Kubernetes is Moving on From Dockershim: Commitments and Next Steps:

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

    【讨论】:

    • @Vir 谢谢,我目前正在学习 k8s,所以这应该不会产生太大影响,这应该被视为其他 CRI shims 的实现
    猜你喜欢
    • 2018-12-04
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2018-02-20
    • 2021-04-26
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多