首页 > 其他分享 >docker、Containerd ctr、crictl 区别

docker、Containerd ctr、crictl 区别

时间:2022-11-17 16:25:22浏览次数:51  
标签:ctr Containerd image crictl io containerd docker k8s

简述

作为接替 Docker 运行时的 Containerd 在早在 Kubernetes1.7 时就能直接与 Kubelet 集成使用,只是大部分时候我们因熟悉 Docker,在部署集群时采用了默认的 dockershim。在V1.24
起的版本的 kubelet 就彻底移除了dockershim
,改为默认使用Containerd
了,当然也使用 cri-dockerd
 适配器来将Docker Engine
 与 Kubernetes 集成。可以参考官方文档:

  • https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#docker

一、docker 和 containerd区别

1、docker 由 docker-client ,dockerd,containerd,docker-shim,runc组成,所以containerd是docker的基础组件之一

2、从k8s的角度看,可以选择 containerd 或 docker 作为运行时组件:其中 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。所以k8s后来的版本开始默认使用 containerd 。

3、containerd 相比于docker , 多了 namespace 概念,每个 image 和 container 都会在各自的namespace下可见。

4、docker 作为 k8s 容器运行时,调用关系为:kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd

 containerd 作为 k8s 容器运行时,调用关系为:kubelet --> cri plugin(在 containerd 进程中) --> containerd

二、ctr 和 crictl 命令区分 

ctr 是 containerd 的一个客户端工具。

crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。

ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。

kuaibang@node1:~$ ctr -v
ctr github.com/containerd/containerd v1.6.6
kuaibang@node1:~$ crictl -v
crictl version v1.24.0

注:一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。

由于 Containerd 也有 namespaces 的概念,对于上层编排系统的支持,ctr
 客户端 主要区分了 3 个命名空间分别是k8s.io、moby和default
,以上我们用crictl
操作的均在k8s.io
命名空间,使用ctr
 看镜像列表就需要加上-n 参数。crictl 是只有一个k8s.io
命名空间,但是没有-n 参数。

 【温馨提示】ctr images pull 拉取的镜像默认放在default
,而 crictl pull 和 kubelet 默认拉取的镜像都在 k8s.io 命名空间下。所以通过ctr
导入镜像的时候特别注意一点,最好指定命名空间。

# 注意-n不能放在命令最后面,下面几行查看的镜像是一样的
ctr -n=k8s.io image ls
ctr -n k8s.io image ls

# crictl 没有-n参数,操作都在`k8s.io`命名空间下。
crictl image ls
crictl images
# crictl image list = ctr -n=k8s.io image list
# crictl image ls = ctr -n=k8s.io image ls
# crictl images = ctr -n=k8s.io image list
# crictl images = ctr -n=k8s.io image ls

# 使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io image import dashboard.tar

#查看镜像,可以看到可以查询到了
crictl images

三、命令的比较

 

标签:ctr,Containerd,image,crictl,io,containerd,docker,k8s
From: https://www.cnblogs.com/yangzp/p/16899832.html

相关文章

  • docker inspect |mysql IPADRESS
    version:'3'services:db:#构建mysql镜像image:mysqlcontainer_name:mysql-db#容器名restart:alwaysenvironme......
  • docker-compose 安装多个mysql
    docker-compose.ymlversion:'3'services:mysql-1:restart:alwaysimage:mysql:5.7.28container_name:mysql-1volumes:#数据库......
  • docker-compose命令
    常用命令1、基础命令docker-compose命令--help#获得一个命令的帮助docker-composeversion#查看docker-compose版本信息......
  • Containerd 如何配置 Proxy?
    前言在某些airgap场景中,往往需要离线或使用代理(Proxy),例如:需要通过Proxypull容器镜像:DockerHub:​​docker.io​​Quay:​​quay.io​​GCR:​​gcr.io​​G......
  • Containerd 如何配置 Proxy?
    前言在某些airgap场景中,往往需要离线或使用代理(Proxy),例如:需要通过Proxypull容器镜像:DockerHub:docker.ioQuay:quay.ioGCR:gcr.ioGitHub镜像库:ghcr......
  • 在内网部署支持ssl的docker私仓
    目录registry更换来此加密ssl证书生效配置修改配置文件从114缓存查询数据可以dig无法ping查看已经区域解析,并添加新的解析项在linux安装局域网certrn......
  • docker使用bind9实现域名解析
    目录刷新服务修改配置文件从114缓存查询数据可以dig无法ping查看已经区域解析,并添加新的解析项在linux安装局域网certrndc查看默认的解析条目添加自己......
  • 上篇:docker基础玩转
    使用容器的理由上线流程繁琐开发->测试->申请资源->审批->部署->测试等环节资源利用率低普遍服务器利用率低,造成过多浪费扩容/缩容不及时业务高峰期扩容流程繁琐,上......
  • Docker Network
    1、创建apline1alpine2 两个容器dockerrun-it--namealpine1-dalpinedockerrun-it--namealpine2-dalpine2、创建一个mynet网络dockernetworkcreate-d......
  • Docker-compose 安装 Nginx PHP MySQL
    1、创建mkdir-p/docker/wwwmkdir-p/docker/nginx/conf.d/2、配置vimnginx/conf.d/default.confserver{listen80;server_namelocalhost;location/{......