专栏首页临时作为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 条评论
登录 后参与评论

相关文章

  • 解读企业移动化时钟 哪些是朝阳更受资本关注?

    对于每一个移动技术企业来说,应该清楚自已的产品在整个市场生命周期的位置并采取应对措施。我们使用12小时的钟面作为隐喻,清晰的呈现你所在的公司在12小时周期里是青...

    人称T客
  • 前沿 | 从虚拟世界伸到现实的机械臂,靠摄像机就能玩转任何物体

    论文链接:https://d4mucfpksywv.cloudfront.net/research-covers/learning-dexterity/lear...

    机器之心
  • Android性能调优:记一次解决OOM的经历

    OOM(Out Of Memory)是Android应用开发中相信每个人都遇到过的问题,而OOM在crash log中的stack trace一般没有实际意义,...

    Android技术干货分享
  • 全方位性能调优:一次解决OOM的经历

    OOM(Out Of Memory)是Android应用开发中相信每个人都遇到过的问题,而OOM在crash log中的stack trace一般没有实际意义,...

    Android架构
  • python中的生成器和迭代器

    然而迭代却不仅仅是for循环那么简单,在python中,迭代可以称得上最强大的功能之一。首先来看下迭代器的概念, 迭代器本质是一个对象,用于遍历元素,从元素的第...

    生信修炼手册
  • 【2天=100年】OpenAI用打Dota2的算法造了一只会转方块的机器手

    【新智元导读】之前在DOTA2团队战中战胜人类玩家的OpenAI Five,现在被用于训练机器手,取得了前所未有的灵活度。这只机器手完全在虚拟环境中自我学习和训...

    新智元
  • 运维如何为公司节省一个亿:精细化容量管理的设备成本优化之路

    SNG 社交网络运营部管理着近10万台的 Linux 服务器,以此支撑着腾讯社交业务海量业务与用户,如日活2.47亿的 QQ 、月活5.96亿的 QQ 空间(数...

    织云平台团队
  • 深度学习工作站攒机指南

    接触深度学习已经快两年了,之前一直使用Google Colab和Kaggle Kernel提供的免费GPU(Tesla K80)训练模型(最近Google将Co...

    郭耀华
  • 复制含有随机指针节点的链表

    Node类中的value是节点值, next指针和正常单链表中next指针的意义一 样, 都指向下一个节点, rand指针是Node类中新增的指针, 这个指针可...

    大学里的混子
  • 今天处理的三个小问题——20160120(r7笔记第84天)

    今天处理了几件事情,有几件还比较有意思,我拿出三件来说说。 首先是早上有一个同学打电话求助一个问题,给我的反馈是他们目前有一个表,数据量越来越大,目前数据插入变...

    jeanron100

扫码关注云+社区

领取腾讯云代金券