0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8s集群中Containerd和Docker的對(duì)比

馬哥Linux運(yùn)維 ? 來(lái)源:博客園夜夜漫筆 ? 2025-03-12 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前景提要

Docker 技術(shù)使用 Linux 內(nèi)核和內(nèi)核功能(例如 Cgroups 和 namespaces)來(lái)分隔進(jìn)程,以便各進(jìn)程相互獨(dú)立運(yùn)行。這種獨(dú)立性正是采用容器的目的所在;它可以獨(dú)立運(yùn)行多種進(jìn)程、多個(gè)應(yīng)用,更加充分地發(fā)揮基礎(chǔ)設(shè)施的作用,同時(shí)保持各個(gè)獨(dú)立系統(tǒng)的安全性。

為了防止docker一家獨(dú)大,docker當(dāng)年的實(shí)現(xiàn)被拆分出了幾個(gè)標(biāo)準(zhǔn)化的模塊,標(biāo)準(zhǔn)化的目的是模塊是可被其他實(shí)現(xiàn)替換的,不由任何一個(gè)廠商控制。

docker由 docker-client ,dockerd,containerd,docker-shim,runc組成,所以containerd是docker的基礎(chǔ)組件之一,docker 對(duì)容器的管理和操作基本都是通過(guò) containerd 完成的。那么,containerd 是什么呢?

Containerd 是一個(gè)工業(yè)級(jí)標(biāo)準(zhǔn)的容器運(yùn)行時(shí)(Container Runtime Interface),它強(qiáng)調(diào)簡(jiǎn)單性、健壯性和可移植性。Containerd 可以在宿主機(jī)中管理完整的容器生命周期:容器鏡像的傳輸和存儲(chǔ)、容器的執(zhí)行和管理、存儲(chǔ)和網(wǎng)絡(luò)等。詳細(xì)點(diǎn)說(shuō),Containerd 負(fù)責(zé)干下面這些事情:

管理容器的生命周期(從創(chuàng)建容器到銷毀容器)

拉取/推送容器鏡像

存儲(chǔ)管理(管理鏡像及容器數(shù)據(jù)的存儲(chǔ))

調(diào)用 runC 運(yùn)行容器(與 runC 等容器運(yùn)行時(shí)交互)

管理容器網(wǎng)絡(luò)接口及網(wǎng)絡(luò)

8c5b818a-fceb-11ef-9310-92fbcf53809c.png

從k8s的角度看,可以選擇 containerd 或 docker 作為運(yùn)行時(shí)組件:Containerd 調(diào)用鏈更短,組件更少,更穩(wěn)定,占用節(jié)點(diǎn)資源更少調(diào)用鏈

containerd 跟 docker 調(diào)用關(guān)系

8c779db6-fceb-11ef-9310-92fbcf53809c.png

8c8832fc-fceb-11ef-9310-92fbcf53809c.png

配置參數(shù)區(qū)別

日志配置

對(duì)比項(xiàng) docker containerd
儲(chǔ)路徑 docker作為k8s容器運(yùn)行時(shí)的情況下,容器日志的落盤由docker來(lái)完成,
保存在類似/var/lib/docker/containers/CONTAINERID目錄下。
kubelet會(huì)在/var/log/pods和/var/log/containers下面建立軟鏈接,
指向/var/lib/docker/containers/CONTAINERID目錄下。
kubelet會(huì)在/var/log/pods和/var/log/containers下面建立軟鏈接,
指向/var/lib/docker/containers/CONTAINERID目錄下的容器日志文件
containerd作為k8s容器運(yùn)行時(shí)的情況下, 容器日志的落盤由kubelet來(lái)完成,保存到/var/log/pods/$CONTAINER_NAME目錄下,同時(shí)在/var/log/containers目錄下創(chuàng)建軟鏈接,指向日志文件
配置參數(shù) 在docker配置文件中指定:"log-driver": "json-file", "log-opts": {"max-size": "100m","max-file": "5"} 方法一:在kubelet參數(shù)中指定:--container-log-max-files=5 --container-log-max-size="100Mi" 方法二:在KubeletConfiguration中指定:"containerLogMaxSize": "100Mi","containerLogMaxFiles": 5,
把容器日志保存到數(shù)據(jù)盤 把數(shù)據(jù)盤掛載到"data-root"(缺省是/var/lib/docker)即可 創(chuàng)建一個(gè)軟鏈接/var/log/pods指向數(shù)據(jù)盤掛載點(diǎn)下的某個(gè)目錄在TKE中選擇"將容器和鏡像存儲(chǔ)在數(shù)據(jù)盤",會(huì)自動(dòng)創(chuàng)建軟鏈接/var/log/pods

stream server
kubectl exec/logs等命令需要在apiserver跟容器運(yùn)行時(shí)之間建立流轉(zhuǎn)發(fā)通道。
docker API本身提供stream服務(wù),kubelet內(nèi)部的docker-shim會(huì)通過(guò)docker API做流轉(zhuǎn)發(fā)。
containerd的stream服務(wù)需要單獨(dú)配置:

[plugins.cri]

stream_server_address="127.0.0.1"

stream_server_port="0"

enable_tls_streaming=false

在k8s 1.11之前,kubelet并不會(huì)做stream proxy, 只會(huì)做redirect。也就是把containerd暴露的stream server地址告訴apiserver, 讓apiserver直接來(lái)訪問(wèn)containerd的stream server。這種情況下,需要給stream server使能tle認(rèn)證來(lái)做安全防護(hù)。

從k8s1.11引入了kubelet stream proxy (https://github.com/kubernetes/kubernetes/pull/64006), 從而使得containerd stream server只需要監(jiān)聽(tīng)本地地址即可。

CNI網(wǎng)絡(luò)

對(duì)比項(xiàng) docker containerd
誰(shuí)負(fù)責(zé)調(diào)用CNI kubelet內(nèi)部的docker-shim containerd內(nèi)置的cri-plugin(containerd 1.1以后)
如何配置CNI kubelet參數(shù) --cni-bin-dir 和 --cni-conf-dir containerd配置文件(toml):plugins.cri.cni bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d"

命令對(duì)比

containerd不支持docker API和docker CLI, 但是可以通過(guò)cri-tool實(shí)現(xiàn)類似的功能。

鏡像相關(guān)功能 docker containerd
顯示本地鏡像列表 docker images crictl images
下載鏡像 docker pull crictl pull
上傳鏡像 docker push 無(wú)
刪除本地鏡像 docker rmi crictl rmi
查看鏡像詳情 docker inspect crictl inspecti
容器相關(guān)功能 docker containerd
顯示容器列表 docker ps crictl ps
創(chuàng)建容器 docker create crictl create
啟動(dòng)容器 docker start crictl 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相關(guān)功能 docker containerd
顯示POD列表 無(wú) crictl pods
查看POD詳情 無(wú) crictl inspectp
運(yùn)行POD 無(wú) crictl runp
停止POD 無(wú) crictl stopp

拓展閱讀

接下來(lái)就是crictl的的常見(jiàn)命令,其中能完全替代docker命令的參照下列表格

8c980006-fceb-11ef-9310-92fbcf53809c.png

crictl對(duì)容器生命周期的管理基本已經(jīng)覆蓋,不過(guò)在crictl我們不能完成操作也比較多,比如對(duì)鏡像的管理就不屬于它的管理范圍。這部分還得依靠ctr來(lái)實(shí)現(xiàn),操作方式同樣可以參照下表

8cbe8154-fceb-11ef-9310-92fbcf53809c.png

需注意的是,由于Containerd也有namespaces的概念,對(duì)于上層編排系統(tǒng)的支持,主要區(qū)分了3個(gè)命名空間分別是k8s.io、moby和default,以上我們用crictl操作的均在k8s.io命名空間完成如查看鏡像列表就需要加上-n參數(shù)

ctr -n k8s.io images list

8cd08462-fceb-11ef-9310-92fbcf53809c.png

鏈接:https://www.cnblogs.com/xiexun/p/18268677

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1416

    瀏覽量

    41375
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11508

    瀏覽量

    213610
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    509

    瀏覽量

    22440
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    515

    瀏覽量

    12932

原文標(biāo)題:Containerd vs Docker:誰(shuí)才是K8s集群的最佳容器運(yùn)行時(shí)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是 K8S,如何使用 K8S

    連續(xù)性。 適用場(chǎng)景: 大規(guī)模容器集群管理。 微服務(wù)架構(gòu)的部署與運(yùn)維。 需要彈性伸縮的在線服務(wù)。 多租戶環(huán)境(如開(kāi)發(fā)測(cè)試、生產(chǎn)環(huán)境隔離)。 總的來(lái)說(shuō),K8S 通過(guò)標(biāo)準(zhǔn)化容器管理,極大降低了分布式系統(tǒng)的運(yùn)維復(fù)雜度,是云原生時(shí)代的核心基礎(chǔ)設(shè)施。
    發(fā)表于 06-25 06:45

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對(duì)比

    查看原文:http://click.aliyun.com/m/42852/背景眾所周知,Docker很火,DockerKubernetes(簡(jiǎn)稱k8s)最火。相對(duì)物理機(jī)、VM,
    發(fā)表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對(duì)比

    查看原文:http://click.aliyun.com/m/42852/背景眾所周知,Docker很火,DockerKubernetes(簡(jiǎn)稱k8s)最火。相對(duì)物理機(jī)、VM,
    發(fā)表于 02-28 12:50

    k8s容器運(yùn)行時(shí)演進(jìn)歷史

    docker/k8s時(shí)代,經(jīng)常聽(tīng)到CRI, OCI,containerd和各種shim等名詞,看完本篇博文,您會(huì)有個(gè)徹底的理解。 典型的K8S Runtime架構(gòu) 從最常見(jiàn)的
    的頭像 發(fā)表于 02-02 13:50 ?2172次閱讀
    <b class='flag-5'>k8s</b>容器運(yùn)行時(shí)演進(jìn)歷史

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對(duì)強(qiáng)大的集群,成千上萬(wàn)的容器,突然感覺(jué)不香了。 這時(shí)候就需要我們的主角 Kubernetes 上場(chǎng)了,先來(lái)了解一下 K8s 的基本概念,后面再介紹實(shí)踐,由淺入深步步為營(yíng)
    的頭像 發(fā)表于 06-02 11:56 ?3685次閱讀

    簡(jiǎn)單說(shuō)明k8sDocker之間的關(guān)系

    這篇文章主要介紹了k8sDocker關(guān)系簡(jiǎn)單說(shuō)明,本文利用圖文講解的很透徹,有需要的同學(xué)可以研究下 最近項(xiàng)目用到kubernetes(以下簡(jiǎn)稱k8s,k
    的頭像 發(fā)表于 06-24 15:48 ?3719次閱讀

    K8S集群服務(wù)訪問(wèn)失敗怎么辦 K8S故障處理集錦

    問(wèn)題1:K8S集群服務(wù)訪問(wèn)失??? ? ? 原因分析:證書(shū)不能被識(shí)別,其原因?yàn)椋鹤远x證書(shū),過(guò)期等。 解決方法:更新證書(shū)即可。 問(wèn)題2:K8S集群服務(wù)訪問(wèn)失敗? curl: (7) Fa
    的頭像 發(fā)表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b><b class='flag-5'>集群</b>服務(wù)訪問(wèn)失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    k8s集群環(huán)境工作有多快

    命令就會(huì)很低效。 今天介紹3個(gè)工具會(huì)讓你在多k8s集群環(huán)境工作的很輕松。我將從以下幾個(gè)方面來(lái)評(píng)估工具實(shí)用性: 速度 如果你有多個(gè)k8s集群
    的頭像 發(fā)表于 05-29 14:28 ?780次閱讀
    多<b class='flag-5'>k8s</b><b class='flag-5'>集群</b>環(huán)境<b class='flag-5'>中</b>工作有多快

    k8s是什么意思?kubeadm部署k8s集群k8s部署)|PetaExpres

    ),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。 在Kubernetes,我們可以創(chuàng)建多個(gè)容器,每個(gè)容器里面運(yùn)行一個(gè)應(yīng)用實(shí)例,然后通過(guò)內(nèi)置的負(fù)載均衡策略,實(shí)現(xiàn)對(duì)這一組應(yīng)用實(shí)例的管理、發(fā)現(xiàn)、訪問(wèn),而這些細(xì)節(jié)都不需要運(yùn)維人員去進(jìn)行復(fù)雜的手工配置和處理。 kubernetes(
    發(fā)表于 07-19 13:14 ?1318次閱讀

    K8s集群管理:為什么需要多集群、多集群的優(yōu)勢(shì)是什么

    隨著K8s和云原生技術(shù)的快速發(fā)展,以及各大廠商在自己的數(shù)據(jù)中心使用K8s的API進(jìn)行容器化應(yīng)用編排和管理,讓?xiě)?yīng)用交付本身變得越來(lái)越標(biāo)準(zhǔn)化和統(tǒng)一化,并且實(shí)現(xiàn)了與底層基礎(chǔ)設(shè)施的完全解耦,為多集群和混合云提供了一個(gè)堅(jiān)實(shí)技術(shù)基礎(chǔ)。
    發(fā)表于 09-14 10:48 ?2059次閱讀
    <b class='flag-5'>K8s</b>多<b class='flag-5'>集群</b>管理:為什么需要多<b class='flag-5'>集群</b>、多<b class='flag-5'>集群</b>的優(yōu)勢(shì)是什么

    k8s云原生開(kāi)發(fā)要求

    IO性能。網(wǎng)絡(luò)要求穩(wěn)定,建議使用私有網(wǎng)絡(luò)VPC,并配置與Kubernetes兼容的網(wǎng)絡(luò)插件。操作系統(tǒng)需與K8s版本匹配,虛擬化平臺(tái)支持Docker等。此外,還需關(guān)注安全配置,如禁用Swap、調(diào)整Sysctl等,以及etcd數(shù)據(jù)存儲(chǔ)后端的配置。合理配置硬件可確保
    的頭像 發(fā)表于 10-24 10:03 ?581次閱讀
    <b class='flag-5'>k8s</b>云原生開(kāi)發(fā)要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務(wù)
    的頭像 發(fā)表于 11-07 09:37 ?497次閱讀

    k8sdocker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    部署、擴(kuò)展、管理和應(yīng)用生命周期管理能力,可實(shí)現(xiàn)高可用性和自動(dòng)伸縮,兩者常結(jié)合使用以優(yōu)化容器化和應(yīng)用管理。UU云小編將對(duì)k8sdocker區(qū)別進(jìn)行詳細(xì)對(duì)比
    的頭像 發(fā)表于 12-11 13:55 ?667次閱讀

    自建K8S集群認(rèn)證過(guò)期

    今天使用kubectl命令查看pod信息時(shí),一直正常運(yùn)行的k8s集群突然不能訪問(wèn)了,輸入任何命令都提示以下報(bào)錯(cuò)。
    的頭像 發(fā)表于 02-07 12:32 ?384次閱讀

    如何通過(guò)DockerK8S集群實(shí)現(xiàn)高效調(diào)用GPU

    在有GPU資源的主機(jī)安裝,改主機(jī)作為K8S集群的Node。
    的頭像 發(fā)表于 03-18 16:50 ?453次閱讀
    如何通過(guò)<b class='flag-5'>Docker</b>和<b class='flag-5'>K8S</b><b class='flag-5'>集群</b>實(shí)現(xiàn)高效調(diào)用GPU

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品