K3s 集群内 containerd 跟 docker 的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K3s 集群内 containerd 跟 docker 的区别相关的知识,希望对你有一定的参考价值。

参考技术A Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。

docker 对容器的管理和操作基本都是通过 containerd 完成的。 那么,containerd 是什么呢?
Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。详细点说,Containerd 负责干下面这些事情:

在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只需要监听本地地址即可。

containerd不支持docker API和docker CLI, 但是可以通过cri-tool实现类似的功能。

接下来就是crictl的的常见命令,其中能完全替代docker命令的参照下列表格

crictl对容器生命周期的管理基本已经覆盖,不过在crictl我们不能完成操作也比较多,比如对镜像的管理就不属于它的管理范围。这部分还得依靠ctr来实现,操作方式同样可以参照下表

需注意的是,由于Containerd也有namespaces的概念,对于上层编排系统的支持,主要区分了3个命名空间分别是k8s.io、moby和default,以上我们用crictl操作的均在k8s.io命名空间完成如查看镜像列表就需要加上-n参数

以上是关于K3s 集群内 containerd 跟 docker 的区别的主要内容,如果未能解决你的问题,请参考以下文章

K3s使用Containerd运行时拉取镜像失败

k3s 在哪里存储 pod?

多云搭建 K3S 集群

配置高可用K3s集群完全攻略

如何优雅地使用containerd?这里有一份必读的技巧攻略

如何将本地 docker 镜像作为 k3s 节点运行