【问题标题】:Running docker inside Kubernetes with containerd使用 containerd 在 Kubernetes 中运行 docker
【发布时间】:2019-04-25 09:13:32
【问题描述】:

由于 K8S v1.11 运行时已从 dockerd 更改为 containerd。 我正在使用 Jenkins over kubernetes 来使用 Docker 之外的 Docker 构建 Docker 映像(dood)。

当我尝试使用常规 docker 客户端切换到使用来自 conatinerd 的套接字文件(containerd/containerd.sock 映射广告 /var/run/docker.sock)时,出现以下错误 Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x00\x00\x00\x04\x00\x00\x00\x00\x00".

docker客户端可以和containerd一起使用吗?

【问题讨论】:

    标签: docker kubernetes containerd


    【解决方案1】:

    免责声明:在撰写本文时,containerd 并未取代 Docker,您可以将 install containerd 与 Docker 分开,您可以将 Kubernetes CRI 指向直接与 containerd 套接字对话。

    因此,当您安装 Docker 时,它会与 containerd 一起安装,并且 Docker 守护进程 会与它对话。你会看到这样的过程:

    docker-containerd --config /var/run/docker/containerd/containerd.toml
    

    但是,Docker 客户端仍然与 Docker 守护进程对话,这就是为什么当您在容器中运行 Docker 客户端时,您仍然需要直接与 Docker 守护进程 (/var/run/docker.sock) 对话,因此您可以切换回 @987654325 @ 我相信它应该可以工作。

    【讨论】:

    • 谢谢,我们在 IBM 中使用 K8S 作为服务。我可以让 docker 守护进程与 containerd 对话吗?
    【解决方案2】:

    至少对于 Ubuntu 20.04 上的 MicroK8s 1.18,我发现解决此问题的方法是在 Kubernetes 旁边显式安装 Docker。

    类似的步骤应该适用于不包括 Docker 的其他 Kubernetes 发行版。

    安装microk8s后,您可以执行以下操作来安装Docker:

    # Shut down microk8s
    sudo snap disable microk8s
    
    # Assuming no Docker installed yet - this fixes the case  
    # where Kubernetes results in this path being a directory 
    rm -rf /var/run/docker.sock
    
    sudo apt-get install docker.io
    
    ls -l /var/run/docker.sock
    # Output should show socket not directory:
    #    srw-rw---- 1 root docker 0 Aug  6 11:50 /var/run/docker.sock
    
    # (See https://docs.docker.com/engine/install/linux-postinstall/ for usermod + newgrp commands at this point) 
    
    # Restart microk8s 
    sudo snap enable microk8s
    

    其他 Kubernetes 发行版可能有不同的方式来更有选择性地关闭进程。

    journalctl -xe 有助于在此处查看来自 Docker 或 Kubernetes 的任何错误。

    在 Kubernetes 清单中,请务必在挂载 docker.sock 时使用 /var/run/docker.sock 作为主机路径。

    相关问题:

    Post-install steps for Docker on Linux

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2021-06-07
      • 2020-04-11
      • 2021-05-12
      • 2022-12-22
      • 2018-03-20
      • 2021-08-31
      • 2021-03-29
      • 2019-08-30
      相关资源
      最近更新 更多