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

这篇具有很好参考价值的文章主要介绍了containerd与docker的联系、区别是什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一、containerd与docker的区别是什么

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

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

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的配置文件实现登录镜像仓库。

三、命令区分

ctr 是 containerd 的一个客户端工具。
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。
ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。

[root@localhost test]# ctr -v
ctr github.com/containerd/containerd v1.4.11
[root@localhost test]# crictl -v
crictl version v1.21.0-k3s1
一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。

常用命令以及对比

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

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

           docker       ctr(containerd)              crictl(kubernetes)
查看运行的容器       docker ps           ctr task ls/ctr container ls   crictl ps
查看镜像             docker images       ctr image ls                   crictl images
查看容器日志         docker logs         无                             crictl logs
查看容器数据信息     docker inspect      ctr container info             crictl inspect
查看容器资源         docker stats        无                             crictl stats
启动/关闭已有的容器  docker start/stop   ctr task start/kill            crictl start/stop
运行一个新的容器     docker run          ctr run                        无(最小单元为pod)
修改镜像标签         docker tag          ctr image tag                  无
创建一个新的容器	 docker create       ctr container create           crictl create
导入镜像             docker load         ctr image import               无
导出镜像             docker save         ctr image export               无
删除容器             docker rm           ctr container rm               crictl rm
删除镜像             docker rmi          ctr image rm                   crictl rmi
拉取镜像             docker pull         ctr image pull                 ctictl pull
推送镜像             docker push         ctr image push                 无
在容器内部执行命令	 docker exec         无                             crictl exec

Containerd常用命令例子:

1、查看镜像

crictl images

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

2、查看运行的容器

#对应用户进程
crictl ps

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

3、查看运行中的pod

# 对应sandbox进程
crictl pods

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

4、查看pod详细信息

crictl inspectp eea1584366c1d

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

5、查看容器详细信息

crictl inspect 5389d4e04a974

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

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

crictl inspecti 70f5e18fddce8

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


 ctr命令例子:

ctr -n k8s.io  image  tag registry.aliyuncs.com/google_containers/csi-attacher:v3.3.0  k8s.gcr.io/sig-storage/csi-attacher:v3.3.0
 ctr -n k8s.io  image  tag registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.3.0	k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0
 ctr -n k8s.io  image  tag registry.aliyuncs.com/google_containers/csi-provisioner:v3.0.0	k8s.gcr.io/sig-storage/csi-provisioner:v3.0.0
 ctr -n k8s.io  image  tag registry.aliyuncs.com/google_containers/csi-resizer:v1.3.0	k8s.gcr.io/sig-storage/csi-resizer:v1.3.0
 ctr -n k8s.io  image  tag registry.aliyuncs.com/google_containers/csi-snapshotter:v4.2.0	k8s.gcr.io/sig-storage/csi-snapshotter:v4.2.0
 ctr -n k8s.io  image  tag registry.cn-hangzhou.aliyuncs.com/rook_image/ceph:v16.2.7 quay.io/ceph/ceph:v16.2.7
 ctr -n k8s.io  image  tag registry.cn-hangzhou.aliyuncs.com/rook_image/cephcsi:v3.4.0 quay.io/cephcsi/cephcsi:v3.4.0
 ctr -n k8s.io  image  tag registry.cn-hangzhou.aliyuncs.com/rook_image/volumereplication-operator:v0.1.0 quay.io/csiaddons/volumereplication-operator:v0.1.0
 ctr -n k8s.io  image  tag registry.cn-hangzhou.aliyuncs.com/rook_image/ceph:v1.8.0 rook/ceph:v1.8.0

四、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

感谢以下:

https://www.csdn.net/tags/MtTaIg0sNTg2NjMwLWJsb2cO0O0O.html

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

Containerd和Docker的关系 - 百度文库文章来源地址https://www.toymoban.com/news/detail-482880.html

到了这里,关于containerd与docker的联系、区别是什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

    Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享: 数据持久化 :容器自身是易失的,当容器被删除时,存储在容器内部的数据也

    2024年02月21日
    浏览(46)
  • 使用containerd作为容器运行时拉取镜像的方法

    k8s v1.24版本后默认使用containerd作为容器运行时,很多镜像库使用的是 gcr.io ,国内可能无法成功拉取。接下来将通过搭建 Metrics Server 来演示该情况的解决方法。 components.yaml 我们需要使用 ctr 或者 crictl 来代替docker命令,但是 crictl 是没有类似 docker tag 功能的。当我们使用 ct

    2024年02月13日
    浏览(44)
  • k8s单节点部署,容器运行时使用containerd

    环境 系统 : entOS Linux release 7.9.2009 (Core IP:192.168.44.177 硬件要求:控制平面最少需要 2c2g 安装前环境准备 如果是集群部署还需要配置时间同步 关闭防火墙 关闭selinux 关闭swap分区 如果没有开启swap分区可以跳过这步 删除掉 /etc/fstab 有关swap分区的信息 设置主机名 开始安装容器

    2024年04月12日
    浏览(52)
  • docker、containerd 配置国内容器镜像源

    国内容器镜像源地址:registry.aliyuncs.com/google_containers 文件路径:/etc/containerd/config.toml 在文件中加入一下配置 如下所示 在红框内容的下面添加 文件路径:/etc/docker/daemon.json 添加如下配置 “registry-mirrors”: [“registry.aliyuncs.com/google_containers”] 如下图所示 systemctl daemon-reload 以下

    2024年02月13日
    浏览(38)
  • k8s 1.27集群部署 容器运行时为containerd

    1.1.1 主机操作系统说明 序号 操作系统及版本 备注 1 CentOS7u9 1.1.2 主机硬件配置说明 需求 CPU 内存 硬盘 角色 主机名 值 8C 8G 1024GB master k8s-master01 值 8C 16G 1024GB worker(node) k8s-worker01 值 8C 16G 1024GB worker(node) k8s-worker02 1.1.3 主机配置 1.1.3.1 主机名配置 由于本次使用3台主机完成kubern

    2024年02月03日
    浏览(68)
  • 云服务器与容器技术的区别和联系

    云计算和容器技术是近年来最热门的技术之一。它们为企业提供了更加灵活、可靠、高效的IT基础设施。在云计算和容器技术之间,有很多共性和区别。本文将介绍 云服务器 和容器技术的区别和联系,以及如何选择适合自己的技术方案。 一、概述 云服务器是一种基于云计算

    2024年02月15日
    浏览(33)
  • k8s-containerd容器运行时默认50G存储位置更换

    containerd作为k8s主要的cri,它默认存储位置是使用的/根目录挂载的资源。当容器运行的越来越多,默认的50G不够使用了。有2种方法可以进行解决。 方式1、增加/根分区的磁盘空间。 方式2、修改containerd配置文件,修改默认配置为/home 这里我使用方式2,可以看到/home目录为104

    2024年02月09日
    浏览(68)
  • 基于containerd容器运行时,kubeadmin部署k8s 1.28集群

    centos7u9 序号 主机名 ip地址 CPU 内存 硬盘 1 k8s-master1 192.168.1.200 2C 2G 100G 2 k8s-worker1 192.168.1.201 2C 2G 100G 3 k8s-worker2 192.168.1.202 2C 2G 100G 1.3.1主机名配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 1.3.3主机名与IP地址解析(hosts) vi /etc/hosts 1.3.4防火墙配置 关闭防火墙firewalld 1.3.5SELINUX配置 修改

    2024年02月01日
    浏览(63)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器运行)

    主机名 IP地址 备注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主机配置 2、升级内核 3、配置内核转发以及过滤 4、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的

    2024年02月20日
    浏览(76)
  • java运行以jar包的形式运行和tomcat运行的区别和联系?

    Java 运行以 JAR 包形式和 Tomcat 运行之间存在一些区别和联系: 区别: 部署方式:JAR 包形式的 Java 应用可以作为独立的进程运行,通过命令行或脚本启动。而 Tomcat 是一个 Web 服务器和 Servlet 容器,需要将应用程序打包成 WAR 文件并部署到 Tomcat 中。 架构:JAR 包形式的应用通常

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包