如何評價 Kubernetes 在 1 20 版本後廢棄 Docker 作為容器執行時?

時間 2021-05-09 16:15:27

1樓:寧笏藏本平

反正敢在生產環境用的,最底層,都是cgroup,不管你lxc,lxd,runc,containerd,podman,rkt,runlxc

2樓:豆花花

首先,「棄用 Docker」這個詞本身有多重的含義,Docker 並非乙個單層軟體,Kubernetes 1.20 啟用 dockershim 並不代表棄用了 Docker 的全部,仍有 containerd 可以對接 docker。

下面是 Docker 的簡圖:

從軟體模組的角度,圖中的 docker Engine、cri-containd、containd-shim、runC 都屬於 Docker 體系的軟體。

下圖中的紫、橙、紅三種顏色,代表了 dockershim、cri-containerd、cri-o 三種 CRI 的典型方式——流程在逐漸縮短,這也是 CRI 實現的乙個演進過程。

如果是 kubelet 的 dockershim 模式(紫色),流程是這樣的:

kubelet從CRI的gRPC呼叫dockershim,二者在同乙個程序

dockershim呼叫docker守護程序

docker守護程序呼叫containerd;containerd呼叫containerd-shim(有時名為docker-containerd-shim守護程序)完成建立容器等操作

containerd-shim訪問OCI的實現runC(命令列可執行程式)

如果是 kubelet 的 cri-containerd 模式(橙色),流程是這樣的:

kubelet從CRI的gRPC呼叫cri-containerd;

cri-containerd呼叫containerd;containerd呼叫containerd-shim(同上)

containerd-shim呼叫RucnC (同上);

在很多人的印象中,如果不用 docker 守護程序,就相當於「棄用 docker「,這其實也就是從 dockershim 到 containerd 的變化。從另乙個角度來說,containerd 這個守護程序,也是 docker 組織做的。

如果是 kubelet 的 cri-o 模式(紅色),則更加簡練:

kubelet從CRI的gRPC呼叫cri-o;

cri-o呼叫OCI的實現runC

如果以 kubelet 呼叫 CRI 為起點,OCI 的 runC 呼叫為終點,三種模式經歷的可執行程式分別是:

dockershim模式:dockershim(*)->dockd->containerd->containerd-shim

cri-containerd模式:cri-containerd(*)-> containerd->containerd-shim

cri-o模式:cri-o

dockershim 模式有 3 個可執行程式,dockershim 一般與 kubelet 同程序;cri-containerd 模式有 2-3 個可執行程式,cri-containerd 可與 containerd 同程序;cri-o 模式只有 1 個可執行程式。

顯然在這種 Red Hat 推崇的 cri-o 模式下,Docker 體系的 containerd 也用不著了,只剩 runC 這個命令列的程式。runC 也是用 go 寫成的,裡面有呼叫 libcontainer。

當 Docker 萎縮到這個地步,其實也只剩 Linux 核心裡面 cgroup、namespace 功能的封裝了。

總的來說:

由於老技術實現的慣性,在生產環境大量使用的經典 Kubernetes+ Docker 方案依然執行,且運維已經成熟,不會很快公升級。

對於開發人員、企業,對於 K8S API 的使用頻率、變數,遠遠大於 Docker API,至於 Kubernetes 和 Docker 的橋接,更不用關心。

因此,即便「徹底棄用 Docker」,對開發者與企業的影響也非常有限。

原文:Kubernetes決定棄用Docker,到底會影響到誰?-InfoQ

3樓:沙包妖夢

kubernetes是什麼?是谷歌內部排程系統的開源版本。那個系統比docker早得多。

所以原本k8s就不是用docker的,這波啊,這波是回歸本源!!

4樓:小飛俠

這個是從制訂 OCI 標準就開始預謀已久的事情了,然後就是 Kubernetes 通過 CRI 相容各種容器引擎,雖然 rkt 沒跟上,也出現了很多越來越成熟的替代方案,所以現在時機成熟就開始行動了。容器引擎可選的替代方案大概有以下幾種:

containerd

CRI-O

gVisor

kata-containers

Nabla

其中替換成本低、更成熟、效能相對好的就是containerd了,所以在容器引擎替換上可以優先考慮使用 containerd。

podman 容器管理工具

buildah 映象構建

skopeo 映象分發

5樓:雲原生-Pod

看懂下面兩張圖就不會被帶節奏了

圖一:被廢棄的是下圖的x號部分 kubelet 和 dockershim,看圖就知道這個呼叫鏈太長,也降低了穩定性。被放棄的是 kubelet 呼叫dockershim

不是docker。docker 和 kube 都可以使用containerd。

圖二在docker kube的環境,新的呼叫邏輯是這樣的。containerd 的 cri支援,其實是解放了docker。

docker本身更多的是 clirest api。docker 早就在做分層。如果還不理解的話,可以去了解下 runC 的出現是不是和oci標準相關,containerd的出現是不是cri的標準確定後慢慢形成的。

另外了解下這幾個之間的介面。

6樓:劉縉

Docker是微軟,谷歌,紅帽,IBM等巨頭重要產品的基礎。

巨頭們不能容忍自己的戰略產品被一家小公司牽著鼻子走。巨頭們也不能接受Docker公司被任何一家巨頭收購。

於是就有了OCI (Open Container Initiative),巨頭們一起逼著Docker公司把Docker的商業產品變成標準。最重要的image格式和執行環境已經標準化。Registry API標準化還沒有完成。

Docker公司也把containerd和runc拆出來變成了開源專案。這背後是不是巨頭們強迫的就說不好了。

紅帽先是收購了Docker的競爭產品rkt,又搞了和Docker命令列/API相容的podman。

k8s早就通過CRI介面支援不同的容器執行時,實際上也有cri-o這種可以替代Docker的實現(還是這幾家巨頭搞的)。

現在k8s跳過Docker也是自然的。大家都這麼幹,目標就是Docker公司明天關門也沒關係,不影響大家一起炒熱的這股容器風潮。

小公司搞出特別成功,又特別基礎的產品,不好說是幸運還是詛咒。

7樓:王絮飛

1.20是標記為廢棄,1.23才會實際廢棄。

畢竟k8s只需要個pod,而docker是個全家桶。而且不光是k8s要shim間接呼叫docker,就連docker自己,在OCI之後也要shim,docker還是個C/S架構,這一步一步的,多少層下去了。

另外如果用的是紅帽系,新版已經是libpod+podman了

8樓:

以後八成是使用containerd把。

kubernetes.io/blog/2020/12/02/dockershim-faq/不影響docker是開發環境利器。

畢竟映象是通用的。

少量配置比如資源限制,不相容。

9樓:iyacontrol

看下docker的架構圖,我們可以發現docker的底層是containerd+runc,這些都是開放的標準,包括oci image spec和oci runtime spec。所以就基礎功能,直接通過cri使用containerd或docker shim使用docker,並沒有很大區別。

kubernetes直接對接containerd,其實更加合理。

1: 我們沒有必要把整個開發環境的東西部署到生產環境。

2: docker勝在ux,其官方已經準備把一些好的功能新增到containerd中。

3:除了runc,還有runv,runsc,未來隨著容器化使用越來越廣泛,這也是一條必然的路。積木一樣的模組組合更能滿足各種場景。

4: 依舊可以在開發環境,或是構建環境使用docker。

10樓:Lonor

社群官方:別慌。

Docker 本身就是乙個技術棧。 K8s 需要的僅僅是 CRI 實現,但 Docker 沒有完全符合 CRI,社群不得不再維護乙個 dockershim 作為中間層。現在,K8s 社群不想再維護 dockershim 了:

kubernetes/enhancements因為 shim 本身就是乙個臨時適配方案。

Dockershim Deprecation FAQ小於 v1.23 的舊版本集群照樣能跑所有 Docker 映象,而且 Docker 本質上也是在 containerd 上跑著。

Docker 幾年前將 containerd 專案捐給了 CNCF,感覺賠了夫人又折兵。

kubernetes如何通過cinder使用ceph作為後端儲存?

風吹褲衩jj涼 試試我這個看行不行,我用cephfs,也外掛程式出去了。apiVersion v1 kind PersistentVolumemetadata name mysql namespace default spec capacity storage 30Gi accessModes Re...

你在使用Kubernetes過程中有哪些經驗可以分享?

roy luo k8s安裝對初學者來說也是一道坎,我把自己的安裝測試寫了個文件分享一下 Kubeadm安裝kubernetes Whyvv Blog更新 為了方便學習k8s,自己寫了個kubernetes教程,收益頗多。Kubernetes教程 Whyvv Blog 劉小龍 我們公司已經開始全面切入...

如何全面和系統的學習kubernetes?

搭建生產環境的 Kubernetes 前言 待日後更新 首先,我們要明確一點。我們不需要盲目的追求理解別人所定義的 Kubernetes 在現在的技術體系架構中處於一種什麼角色 我們需要把自己的關注點放在 Kubernetes 可以為我們解決什麼問題上。Kubernetes 帶來的是乙個生態的改變,...