作為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 刪除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM