专栏首页临时作为k8s容器运行时,containerd跟docker的对比
原创

作为k8s容器运行时,containerd跟docker的对比

调用关系的对比

image.png
image.png

容器日志及相关参数

对比项

docker

containerd

存储路径

docker作为k8s容器运行时的情况下,容器日志的落盘由docker来完成, 保存在类似/var/lib/docker/containers/$CONTAINERID目录下。kubelet会在/var/log/pods/var/log/containers下面建立软链接,指向/var/lib/docker/containers/$CONTAINERID目录下的容器日志文件

containerd作为k8s容器运行时的情况下, 容器日志的落盘由kubelet来完成,保存到/var/log/pods/$CONTAINER_NAME目录下,同时在/var/log/containers目录下创建软链接,指向日志文件

配置参数

在docker配置文件中指定: "log-driver": "json-file", "log-opts": {"max-size": "100m","max-file": "5"}

方法一:在kubelet参数中指定: --container-log-max-files=5 --container-log-max-size="100Mi" 方法二:在KubeletConfiguration中指定: "containerLogMaxSize": "100Mi", "containerLogMaxFiles": 5,

把容器日志保存到数据盘

把数据盘挂载到"data-root"(缺省是/var/lib/docker)即可

创建一个软链接/var/log/pods指向数据盘挂载点下的某个目录 在TKE中选择"将容器和镜像存储在数据盘",会自动创建软链接/var/log/pods

stream server

kubectl exec/logs等命令需要在apiserver跟容器运行时之间建立流转发通道。

docker API本身提供stream服务,kubelet内部的docker-shim会通过docker API做流转发。

containerd的stream服务需要单独配置:

[plugins.cri]
  stream_server_address = "127.0.0.1"
  stream_server_port = "0"
  enable_tls_streaming = false

在k8s 1.11之前,kubelet并不会做stream proxy, 只会做redirect。也就是把containerd暴露的stream server地址告诉apiserver, 让apiserver直接来访问containerd的stream server。这种情况下,需要给stream server使能tle认证来做安全防护。

从k8s1.11引入了kubelet stream proxy (https://github.com/kubernetes/kubernetes/pull/64006), 从而使得containerd stream server只需要监听本地地址即可。

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 API和docker CLI, 但是可以通过cri-tool实现类似的功能。

镜像相关功能

docker

containerd

显示本地镜像列表

docker images

crictl images

下载镜像

docker pull

crictl pull

上传镜像

docke push

删除本地镜像

docker rmi

crictl rmi

查看镜像详情

docker inspect

crictl inspecti


容器相关功能

docker

containerd

显示容器列表

docker ps

crictl ps

创建容器

docker create

crtctl create

启动容器

docker start

crtctl start

停止容器

docker stop

crictl stop

删除容器

docker rm

crictl rm

查看容器详情

docker inspect

crictl inspect

attach

docker attach

crictl attach

exec

docker exec

crictl exec

logs

docker logs

crictl logs

stats

docker stats

crictl stats


POD相关功能

docker

containerd

显示POD列表

crictl pods

查看POD详情

crictl inspectp

运行POD

crictl runp

停止POD

crictl stopp

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • K8s 终将废弃 docker,TKE 早已支持 containerd

    李志宇,腾讯云后台开发工程师。负责腾讯云TKE集群节点和运行时相关的工作,包括 containerd、docker等容器运行时组件的定制开发和问题排查。 洪志...

    腾讯云原生
  • containerd vs docker

    最近公司打算在新的产品中不再使用docker,而是使用containerd作为运行时。至于原因嘛,没有直接告诉我们。于是,我就打算自己去了解一番;并与docke...

    没有故事的陈师傅
  • 大话 Kubernetes Runtime

    回想最开始接触 k8s 的时候, 经常搞不懂 CRI 和 OCI 的联系和区别, 也不知道为啥要垫那么多的 “shim”(尤其是 containerd-shim...

    iMike
  • 再见 Docker !5分钟转型 containerd !

    containerd是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。containerd可以在宿主机中管理完整的容器生命周期,包括容器镜像的传输和...

    macrozheng
  • K8S即将弃用Docker?慌不?

    长久以来,在K8S环境中,都是将docker作为K8S默认的容器运行时,docker和k8s的结合也一直挺顺手的。

    老叶茶馆
  • 1.Containerd容器运行时初识与尝试

    本章主要讲解,目前K8S使用率最多的容器运行时讲解, 由于k8s在2020年宣布1.20版本之后将弃用dockershim(其中也有kubernetes与Doc...

    WeiyiGeek
  • docker概念很乱?俺来替你理一下!

    docker是什么?OCI又是什么?CRI又是什么?containerd又TM是什么?有没有感觉概念非常的乱?

    xjjdog
  • 弃用docker之后你的k8s用哪种容器runtime?

    在k8s取消内置dockershim代码,取消了对docker的支持后,用户无非重新选择一个运行时,不必过度惊慌!

    有点技术
  • kubeadm部署K8S集群并使用containerd做容器运行时

    去年12月份,当Kubernetes社区宣布1.20版本之后会逐步弃用dockershim,当时也有很多自媒体在宣传Kubernetes弃用Docker。其实,...

    没有故事的陈师傅
  • Kubernetes进阶学习之k8s集群升级迁移和维护实践

    描述:Kubernetes 使用 Etcd 数据库实时存储集群中的数据,可以说 Etcd 是 Kubernetes 的核心组件,犹如人类的大脑。如果 Etcd ...

    WeiyiGeek
  • K8S CRI解析

    上篇文章,我们讲到容器引擎Docker与Podman,关于K8S弃用Docker的根本原因在于容器运行时接口CRI,Kubelet 之前使用的是一...

    Luga Lee
  • 干货|浅析 k8s 容器运行时演进

    在docker/k8s时代,经常听到CRI, OCI,containerd和各种shim等名词,看完本篇博文,您会有个彻底的理解。

    CloudBest
  • Kubernetes决定弃用Docker,到底会影响到谁?

    近几年,Kubernetes 已经成为自有机房、云上广泛使用的容器编排方案,最广泛的使用方式是 Kubernetes+Docker。从 DevOps 人员的角度...

    xcbeyond
  • 开源容器引擎分析;替代docker的容器选择;容器运行时架构

    前段时间,听说了k8s对docker支持出现了变动。今天整理服务器进程的时候,出现了与 containerd、lxcfs 相关的 daemon 进行,顿时再次对...

    xuyaowen
  • 交易系统架构演进之路(六):容器化

    微服务架构背景下,随着服务和服务实例的数量不断增加,如果依然用传统的方式部署、配置和管理这些服务进程,就会发现,越来越多的时间花在了管理部署和解决部署过程中出现...

    Keegan小钢
  • K8S 生态周报| Helm v3.3.4 发布

    本周 Helm v3.3.4 发布了, 这个版本是一个 bugfix 版本, 修复了自 Helm v3.3.2 中引入的一些问题。

    Jintao Zhang
  • K8S 生态周报| 2019-07-29~2019-08-04

    「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。

    Jintao Zhang
  • Docker、Containerd、RunC分别是什么

    上一篇文章《真正运行容器的工具:深入了解 runc 和 OCI 规范》已经讲清楚了Runc与OCI。这里再讲解一下概念。

    没有故事的陈师傅
  • 目前MacOS上,管理容器和k8s可选择的产品有哪些?

    Docker在 2021 年 8 月 31 日更新和扩展产品订阅,企业需要许可证才能使用,条款的生效日期是 2021 年 8 月 31 日,对于那些需要付费订阅...

    我的小碗汤

扫码关注云+社区

领取腾讯云代金券