<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          我到底應(yīng)該使用哪個(gè) CRI 替換 kubernetes 集群的 Docker?

          共 3360字,需瀏覽 7分鐘

           ·

          2021-01-30 11:45

          前一段時(shí)間 kubernetes 對(duì) docker 的棄用引起了不小的討論,但其實(shí) docker 并不是 kubernetes 中的 CRI 唯一實(shí)現(xiàn)。那么除了 docker 之外,我們還可以使用其他什么 CRI 呢?

          下面是我已經(jīng)測(cè)試的幾個(gè) CRI,并進(jìn)行一些基準(zhǔn)測(cè)試來(lái)對(duì)他們進(jìn)行了簡(jiǎn)單的對(duì)比,希望對(duì)你有所幫助:

          • dockershim
          • containerd
          • crio

          對(duì)于 cri-o,已經(jīng)測(cè)試了2個(gè)后端:runc 和 crun,以測(cè)試對(duì) cgroupsv2 的影響。

          測(cè)試環(huán)境

          我這里的測(cè)試環(huán)境是一個(gè) 1.19.4 版本的 kubernetes 集群,使用 ansible 進(jìn)行創(chuàng)建(https://gitlab.com/incubateur-pe)。集群運(yùn)行在 kvm 上,配置如下:

          • master:Centos/7, 2vcpus/2G內(nèi)存。
          • crio-crun 節(jié)點(diǎn):Fedora-32, 2vcpus/4G內(nèi)存。
          • 其他節(jié)點(diǎn):Centos/7, 2vcpus/4G內(nèi)存.

          底層是 i7-9700K ,64G的內(nèi)存和一個(gè) mp510 nvme 硬盤。

          創(chuàng)建集群

          這里我直接使用 molecule 創(chuàng)建一個(gè)集群,并配置了它在每個(gè) worker 節(jié)點(diǎn)上使用不同的 cri,對(duì)應(yīng)的 ansible 源碼位于:https://gitlab.com/incubateur-pe/kubernetes-bare-metal/-/tree/dev/molecule/criBench

          使用上面的腳本,執(zhí)行 molecule converge 命令后,大概10分鐘左右,我們就可以得到一個(gè)如下所示的 kubernetes 集群。

          接下來(lái)我們就可以進(jìn)行一些簡(jiǎn)單的基準(zhǔn)測(cè)試了。

          測(cè)試

          1. bucketbench 測(cè)試

          Bucketbench (https://github.com/estesp/bucketbench) 是一個(gè)可以對(duì)容器引擎執(zhí)行一系列操作的測(cè)試工具,它非常適合于了解之前每個(gè)節(jié)點(diǎn)的性能。

          這里我們的測(cè)試參數(shù)很簡(jiǎn)單:

          • 3個(gè)線程
          • 15次循環(huán)
          • run/stop/delete 操作

          對(duì)應(yīng)的結(jié)果如下所示(ms 為單位):

          我們可以看到在性能上還是有相當(dāng)大的差異的。但是需要注意的是我們這里為什么測(cè)試了5個(gè)實(shí)例呢?上面不是只有4個(gè) worker 節(jié)點(diǎn)嗎?

          這里其實(shí)是因?yàn)檫@里我們使用的 docker 客戶端并不是 kubernetes 使用的,事實(shí)上 docker 實(shí)現(xiàn)了 CRI,并提供了一個(gè) socket,這個(gè) socket 和其他 cri socket 一樣可以調(diào)用。所以這里的區(qū)別是:

          • docker-shim:是通過(guò) cri 的 socket 來(lái)做測(cè)試
          • docker-cli:是通過(guò) docker 客戶端來(lái)做測(cè)試

          但是實(shí)際上 docker 并沒(méi)有想象中那么差,在這個(gè)測(cè)試中我們可以看到他比 cri-o 要快點(diǎn),當(dāng)然這個(gè)測(cè)試中很明顯 dockerd 是表現(xiàn)最好的。

          2. kubernetes 測(cè)試

          上面的測(cè)試并不能完整說(shuō)明這幾個(gè) cri 之間的差距,當(dāng)它們被 kubernetes 使用的時(shí)候,它們表現(xiàn)又如何呢?是否不止 run/stop/delete 這些操作?性能上的差異在真正的集群上又有什么意義嗎?

          下面我們就來(lái)深入了解下,這次我們使用集群中的 Prometheus、Grafana 來(lái)可視化監(jiān)控指標(biāo),對(duì)應(yīng)的自定義 dashboard 數(shù)據(jù)可以在 https://gitlab.com/ulrich.giraud/bench-cri/-/blob/master/dashboard/dashboard_bench.json 這里獲取。由于只是測(cè)試容器運(yùn)行時(shí),不是工作負(fù)載,所以這里我們只是簡(jiǎn)單的在集群中部署的一個(gè) busybox 鏡像并一直 sleep 的 DaemonSet 應(yīng)用。

          apiVersion:?apps/v1
          kind:?DaemonSet
          metadata:
          ??name:?benchds-replaceme
          ??namespace:?benchds
          ??labels:
          ????k8s-app:?benchds
          spec:
          ??selector:
          ????matchLabels:
          ??????name:?benchds
          ??template:
          ????metadata:
          ??????labels:
          ????????name:?benchds
          ????spec:
          ??????containers:
          ??????-?name:?benchds
          ????????image:?busybox:latest
          ????????command:
          ??????????-?sleep
          ??????????-?infinity
          ????????resources:
          ??????????limits:
          ????????????memory:?20Mi
          ??????????requests:
          ????????????cpu:?10m
          ????????????memory:?20Mi

          該 DamonSet 將用唯一的名稱進(jìn)行部署:

          • 100次(兩次創(chuàng)建之間有一定延遲)
          • 批量 100次
          • 批量 1000次

          對(duì)應(yīng)的 Grafana 展示圖表信息如下所示:

          緩慢創(chuàng)建數(shù)百個(gè) DaemonSets

          快速創(chuàng)建數(shù)百個(gè) DaemonSets

          快速創(chuàng)建數(shù)千個(gè) DaemonSets

          現(xiàn)在我們來(lái)分析下上面的測(cè)試結(jié)果。

          • Cri-o/runc:令人驚訝的是,在所有 create/delete 中是最慢的,但在其他方面處于中等水平。
          • Cri-o/crun:在 create/delete 方面不是很好,但是在其他方面表現(xiàn)是最好的。
          • Containerd:表現(xiàn)非常好,幾乎在所有情況下都可以快速響應(yīng)。
          • Docker:在 create/delete 方面比 cri-o 快,但在 status/list 請(qǐng)求方面是最慢的。

          status/list 請(qǐng)求是 cri 上最頻繁的請(qǐng)求,所以這也是性能最重要的地方,cri-o 在這里似乎是更好的選擇,其次就是 containerd。

          containerd 在所有指標(biāo)上的表現(xiàn)都比較好,應(yīng)該是最均衡的一個(gè)選擇了。另外一方面,docker 并沒(méi)有得到很好的測(cè)試結(jié)果,但是無(wú)論負(fù)載情況如何,它的表現(xiàn)基本上都是一致的。

          總結(jié)

          從純性能角度來(lái)說(shuō),確實(shí)有比 docker 更好的替代品,我們的集群也不會(huì)替換 docker 產(chǎn)生什么影響。從另外一個(gè)角度來(lái)看,kubernetes 這次廢棄 docker 的事情也算是一件好事,讓更多的人意識(shí)到 docker 并不是唯一可用的 CRI,甚至不是唯一的構(gòu)建鏡像工具。

          在我看來(lái),docker 仍然是讓整個(gè)容器化向前發(fā)展的一個(gè)偉大工具。但是好像我還沒(méi)有回答我最初的問(wèn)題,那就是:我應(yīng)該為我的k8s集群使用什么CRI?

          從我個(gè)人角度考慮的話,我個(gè)人的選擇是:containerd,他速度快,配置方便,相當(dāng)可靠和安全,不過(guò) cri-o 已經(jīng)支持 cgroupsv2 了,所以如果我使用 fedora 或者 centos/8 的話我會(huì)優(yōu)先選擇 cri-o。

          原文鏈接:https://ulrich-giraud.medium.com/which-cri-should-i-use-to-replace-docker-for-my-kubernetes-cluster-14a45c080004


          進(jìn)階訓(xùn)練營(yíng)第二期

          本次訓(xùn)練營(yíng)采用線上直播的形式,基于1.19.x版本,根據(jù)第1期課程的打磨,我們總結(jié)出了 Docker 基礎(chǔ) + Kubernetes 基礎(chǔ) + 原理 + 基本使用 + 進(jìn)階技能 +?完整項(xiàng)目實(shí)踐?的課程體系。加強(qiáng)系統(tǒng)知識(shí)吸收夯實(shí)基礎(chǔ)的同時(shí),并在實(shí)際操作過(guò)程中去了解排查問(wèn)題的方式方法,更為重要的是我們的老師非常負(fù)責(zé)任,隨時(shí)幫你答疑解惑,我們認(rèn)為不只是課堂上講授知識(shí),更重要的是售后支持,完全不用擔(dān)心學(xué)習(xí)不到知識(shí)。


          ?點(diǎn)擊屏末?|??|?即刻學(xué)習(xí)

          瀏覽 188
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青娱乐日本 | 日本黄色性情视频 | 欧美性综合 | 欧美特级AA片片 | 亚洲综合成人视频 |