區(qū)別:1、containerd不需要經(jīng)過dockershim,所以調(diào)用鏈更短,docker需要經(jīng)過所以調(diào)用鏈更長;2、docker調(diào)用cni是“docker-shim”,containerd調(diào)用cni是“containerd-cri”。
本教程操作環(huán)境:linux7.3系統(tǒng)、docker-1.13.1版、Dell G3電腦。
containerd與docker的區(qū)別是什么
在使用k8s時,使用docker和containerd的調(diào)用鏈如下所示:
不難看出,使用containerd時,調(diào)用鏈更短,不再需要經(jīng)過dockershim和docker
數(shù)據(jù)目錄
相信大家都知道docker的數(shù)據(jù)目錄默認是在/var/lib/docker目錄下;而切換到containerd時,數(shù)據(jù)目錄默認為/var/lib/containerd
日志
當(dāng)我們在使用k8s時,如果使用了docker作為運行時,其實容器程序日志的落盤是由docker來負責(zé)的。/var/log/pod和/var/log/container下的日志文件會軟連接到/var/lib/docker下對應(yīng)的日志文件,如果還需要對日志做一些參數(shù)配置,直接修改docker配置文件即可;而如果我們現(xiàn)在使用containerd作為運行時,則容器日志的落盤將由kubelet來負責(zé),/var/log/container下的日志文件會軟連接到/var/log/pod下的日志文件,如果需要調(diào)整日志參數(shù),則需要修改kubelet相關(guān)配置
CNI
當(dāng)使用docker作為運行時時,kubelet中的docker-shim負責(zé)調(diào)用cni;而當(dāng)使用containerd作為運行時時,containerd中內(nèi)置的containerd-cri負責(zé)調(diào)用cni
[plugins."io.containerd.grpc.v1.cri".cni]??????? bin_dir?=?"/opt/cni/bin"??????? conf_dir?=?"/etc/cni/net.d"
流服務(wù)
熟悉k8s的朋友都知道,kubectl exec 和 kubelet log等命令需要通過apiserver與容器通信,這其中就涉及到了流服務(wù)。而docker API本身支持,kubelet中的docker-shim通過docker API流轉(zhuǎn)發(fā);但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
推薦學(xué)習(xí):《docker視頻教程》