因收到Google相关通知,网站将会择期关闭。相关通知内容 07 容器引擎 containerd 落地实践 Docker 公司从 2013 年发布容器引擎 Docker 后,就被全球开发者使用并不断改进它的功能。随着容器标准的建立,Docker 引擎架构也从单体走向微服务结构,剥离出 dontainerd 引擎。它在整个容器技术架构中的位置如下: 图 6-1 containerd 架构图,版权源自 https://containerd.io/ containerd 使用初体验 从官方仓库可以下载最新的 containerd 可执行文件,因为依赖 runc,所以需要一并下载才能正常使用: # 下载 containerd 二进制文件 wget -q --show-progress --https-only --timestamping \ https://github.com/opencontainers/runc/releases/download/v1.0.0-rc10/runc.amd64 \ https://github.com/containerd/containerd/releases/download/v1.3.4/containerd-1.3.4.linux-amd64.tar.gz \ https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.18.0/crictl-v1.18.0-linux-amd64.tar.gz sudo mv runc.amd64 runc # 安装二进制文件 tar -xvf crictl-v1.18.0-linux-amd64.tar.gz chmod +x crictl runc sudo cp crictl runc /usr/local/bin/ mkdir containerd tar -xvf containerd-1.3.4.linux-amd64.tar.gz -C containerd sudo cp containerd/bin/* /bin/ containerd 提供了默认的配置文件 config.toml,默认放在 /etc/containerd/config.toml: [plugins] [plugins.cri.containerd] snapshotter = "overlayfs" [plugins.cri.containerd.default_runtime] runtime_type = "io.containerd.runtime.v1.linux" runtime_engine = "/usr/local/bin/runc" runtime_root = "" containerd 服务一般采用后台守护进程方式运行,在 Linux 中使用 systemd 运行: # 配置 containerd.service sudo cat < docker shim (在 kubelet 进程中) --> dockerd --> containerd Containerd 作为 K8s 容器运行时,调用关系如下: kubelet --> cri plugin(在 containerd 进程中) --> containerd dockerd 是 Docker 原生容器应用引擎提供的代理服务,内置了 swarm cluster、docker build、docker push、docker api 等扩展功能,但是在生产环境默认都是 Kubernetes 集群环境,所以这块的功能可以直接去掉。 对于 Docker 容器日志、网络配置 日志对比 对比项 Docker Containerd 存储路径 如果 Docker 作为 Kubernetes 容器运行时,容器日志的落盘将由 docker 来完成,保存在类似/var/lib/docker/containers/$CONTAINERID 目录下。Kubelet 会在 /var/log/pods 和 /var/log/containers 下面建立软链接,指向 /var/lib/docker/containers/$CONTAINERID 该目录下的容器日志文件。 如果 Containerd 作为 Kubernetes 容器运行时, 容器日志的落盘由 Kubelet 来完成,保存至 /var/log/pods/$CONTAINER_NAME 目录下,同时在 /var/log/containers 目录下创建软链接,指向日志文件。 CNI 网络对比 对比项 Docker Containerd 谁负责调用 CNI Kubelet 内部的 docker-shim Containerd 内置的 cri-plugin(containerd 1.1 以后) 如何配置 CNI Kubelet 参数 --cni-bin-dir 和 --cni-conf-dir Containerd 配置文件(toml): [plugins.cri.cni]、bin_dir = "/opt/cni/bin"、conf_dir = "/etc/cni/net.d" 总结 containerd 是 Docker 容器落地实践过程中标准化的产物,经过了全球无数企业应用场景的锤炼。所以它的稳定性是值得开发者信赖的工具。虽然当前业界对 Docker 公司的产品采取回避策略,但是 containerd 是当前最佳的生产环境的容器引擎,值得继续关注场景的使用和支持。