栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

containerd与docker的联系、区别是什么

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

containerd与docker的联系、区别是什么

容器运行时(Container Runtime)是Kubernetes (k8s))最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过ContainerRuntime Interface (CRI)与容器运行时交互,以管理镜像和容器。

一、containerd与docker的区别是什么

在使用k8s时,使用docker和containerd的调用链如下所示:
 

Docker作为k8s容器运行时,调用关系如下:
kubelet --> docker shim(在 kubelet进程中) --> dockerd --> containerd

Containerd作为k8s容器运行时,调用关系如下:
kubelet --> cri plugin (在 containerd进程中)--> containerd
其中dockerd虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,而与containerd相比,多了一层调用。

区别:1、containerd不需要经过dockershim,所以调用链更短,组件更少,更稳定,占用节点资源更少,docker需要经过所以调用链更长;2、docker调用cni是“docker-shim”,containerd调用cni是“containerd-cri”。

二、如何选择containerd与docker

1、默认k8s建议选择containerd,调用链更短,组件更少,更稳定,占用节点资源更少。

2、当遇到以下情况时,请选择docker作为运行时组件:

  • 如需使用docker in docker
  • 如需在CCE节点使用 docker build/push/save/load 等命令
  • 如需调用docker APl
  • 如需docker compose或docker swarm

Containerd创建并启动的容器会被kubelet立即删除,不支持暂停、恢复、重启、重命名、等待容器,Containerd不具备docker构建、导入、导出、比较、推送、查找、打标签镜像的能力,Containerd不支持拷贝文件,可通过修改containerd的配置文件实现登录镜像仓库。

三、Containerd常用命令

Containerd不支持dockerAPl和dockerCLl,但是可以通过crictl命令实现类似的功能。 Docker中有的命令Crictl大部分都有。

1、查看镜像

crictl images

2、查看运行的容器

#对应用户进程
crictl ps

3、查看运行中的pod

# 对应sandbox进程
crictl pods

4、查看pod详细信息

crictl inspectp eea1584366c1d

5、查看容器详细信息

crictl inspect 5389d4e04a974

6、查看容器镜像详细信息

crictl inspecti 70f5e18fddce8

四、containerd与docker存储位置

1、数据目录

相信大家都知道docker的数据目录默认是在/var/lib/docker目录下;而切换到containerd时,数据目录默认为/var/lib/containerd

2、日志

当我们在使用k8s时,如果使用了docker作为运行时,其实容器程序日志的落盘是由docker来负责的。/var/log/pod和/var/log/container下的日志文件会软连接到/var/lib/docker下对应的日志文件,如果还需要对日志做一些参数配置,直接修改docker配置文件即可;而如果我们现在使用containerd作为运行时,则容器日志的落盘将由kubelet来负责,/var/log/container下的日志文件会软连接到/var/log/pod下的日志文件,如果需要调整日志参数,则需要修改kubelet相关配置

3、CNI

当使用docker作为运行时时,kubelet中的docker-shim负责调用cni;而当使用containerd作为运行时时,containerd中内置的containerd-cri负责调用cni

[plugins."io.containerd.grpc.v1.cri".cni]       
bin_dir = "/opt/cni/bin"      
conf_dir = "/etc/cni/net.d"

4、流服务

熟悉k8s的朋友都知道,kubectl exec 和 kubelet log等命令需要通过apiserver与容器通信,这其中就涉及到了流服务。而docker API本身支持,kubelet中的docker-shim通过docker API流转发;但containerd却要对此进行单独配置

[plugins."io.containerd.grpc.v1.cri"]     
stream_idle_timeout = "4h0m0s"   
stream_server_address = "127.0.0.1"   
stream_server_port = "0"    
enable_tls_streaming = false

转载:

containerd与docker的区别是什么-Docker-PHP中文网

Containerd和Docker的关系 - 百度文库

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号