成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8s宣布棄用Docker,千萬別慌!

云計算 開發工具
近日,Kubernetes 官方發布公告,宣布自 v1.20 起放棄對 Docker 的支持,屆時用戶將收到 Docker 棄用警告,并需要改用其他容器運行時。

近日,Kubernetes 官方發布公告,宣布自 v1.20 起放棄對 Docker 的支持,屆時用戶將收到 Docker 棄用警告,并需要改用其他容器運行時。 

[[355838]]

圖片來自 Pexels

但 Docker 作為容器鏡像構建工具的作用將不受影響,用其構建的容器鏡像將一如既往地在集群中與所有容器運行時正常運轉。

Kubernetes 將棄用 Docker

沒錯,這是真的,Kubernetes 現已棄用 Docker!

參考鏈接:

  1. https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation 

目前,Kubelet 中的 Docker 支持功能現已棄用,并將在之后的版本中被刪除。

Kubelet 之前使用的是一個名為 dockershim 的模塊,用以實現對 Docker 的 CRI 支持。

但 Kubernetes 社區發現了與之相關的維護問題,因此建議大家考慮使用包含 CRI 完整實現(兼容 v1alpha1 或 v1)的可用容器運行時。 

[[355839]]

簡而言之,Docker 并不支持 CRI(容器運行時接口)這一 Kubernetes 運行時 API,而 Kubernetes 用戶一直以來所使用的其實是名為“dockershim”的橋接服務。

Dockershim 能夠轉換 Docker API 與 CRI,但在后續版本當中,Kubernetes 將不再提供這項橋接服務。

當然,Docker 本身也是一款非常強大的工具,可用于創建開發環境。但為了了解造成當前狀況的原因,我們需要全面分析 Docker 在現有 Kubernetes 架構中的作用。

Kubernetes 是一款基礎設施工具,可對多種不同計算資源(例如虛擬/物理機)進行分組,使其呈現為統一的巨量計算資源,從而供應用程序使用或與其他人共享。

在這樣的架構中,Docker(或者容器運行時)僅用于通過 Kubernetes 控制平面進行調度,從而在實際主機內運行應用程序。 

通過以上架構圖,可以看到每個 Kubernetes 節點都與控制平面彼此通信。各個節點上的 kubelet 獲取元數據,并執行 CRI 以在該節點上運行容器的創建/刪除。

Docker 為什么會被棄用?

如前所述,Kubernetes 只能與 CRI 通信,因此要與 Docker 通信,就必須使用橋接服務。這就是第一點原因。

要解釋下一個原因,我們必須稍微解釋一下 Docker 架構。首先參考以下示意圖: 

沒錯,Kubernetes 實際上需要保持在紅框之內。Docker 網絡與存儲卷都被排除在外。

而這些用不到的功能本身就可能帶來安全隱患。事實上,你擁有的功能越少,攻擊面也就越小。因此,我們需要考慮使用替代方案,即 CRI 運行時。

CRI 運行時的實現方案主要有兩種:

①containerd

如果大家只是想從 Docker 遷移出來,那么 containerd 就是最好的選擇。因為它實際上就是在 Docker 之內起效,可以完成所有“運行時”工作,如上圖所示。更重要的是,它提供的 CRI 其實 100% 就是由 Docker 所提供。

containerd 還屬于全開源軟件,因此你可以在 GitHub 上查看說明文檔甚至參與項目貢獻:

  1. https://github.com/containerd/containerd/ 

②CRI-O

CRI-O 是主要由 Red Hat 員工開發的 CRI 運行時。它的最大區別在于并不依賴于 Docker,而且目前已經在 Red Hat OpenShift 中得到使用。

有趣的是,RHEL 7 同樣不官方支持 Docker。相反,其只為容器環境提供 Podman、Buildah 以及 CRI-O:

  1. https://github.com/cri-o/cri-o 

CRI-O 的優勢在于其采用極簡風格,或者說它的設計本身就是作為“CRI”運行時存在。

不同于作為 Docker 組成部分的 containerd,CRI-O 在本質上屬于純 CRI 運行時、因此不包含除 CRI 之外的任何其他內容。

從 Docker 遷移至 CRI-O 往往更為困難,但無論如何,CRI-O 至少可以支持 Docker 容器在 Kubernetes 上的正常運行。

還有一點,當我們談論容器運行時時,請注意我們到底是在談論哪種類型的運行時。

運行時分為兩種:

  • CRI 運行時
  • OCI 運行時

CRI 運行時

正如之前所提到,CRI 是 Kubernetes 提供的 API,用于同容器運行時進行通信以創建/刪除容器化應用程序。

各容器化應用程序作為 kubelet 通過 IPC 在 gRPC 內通信,而且運行時也運行在同一主機之上;CRI 運行時負責從 kubelet 獲取請求并執行 OCI 容器運行時以運行容器。

稍微有點復雜,接下來我們會用圖表來解釋: 

因此,CRI 運行時將執行以下操作:

  • 從 kubelet 獲取 gRPC 請求。
  • 根據規范創建 OCI json 配置。

OCI 運行時

OCI 運行時負責使用 Linux 內核系統調用(例如 cgroups 與命名空間)生成容器。你可能聽說過 runC 或者 gVisor,這就是了。 

CRI 會通過 Linux 系統調用以執行二進制文件,而后 runC 生成容器。這表明 runC 依賴于 Linux 計算機上運行的內核。

這也意味著,如果你發現 runC 中的漏洞會使你獲得主機 root 權限,那么容器化應用程序同樣會造成 root 權限外泄。

很明顯,惡意黑客會抓住機會入侵主機,引發災難性的后果。正因為如此,大家才需要不斷更新 Docker(或者其他容器運行時),而不僅僅是更新容器化應用程序本身。 

gVisor 是最初由谷歌員工創建的 OCI 運行時。它實際上運行在承載各類谷歌云服務(包括 Google Cloud Run、Google App Engine 以及 Google Cloud Functions)的同一套基礎設施之上。

有趣的是,gVisor 中包含一個“訪客內核”層,意味著容器化應用程序無法直接接觸到主機內核層。

即使是應用程序“認為”自己接觸到了,實際接觸到的也只是 gVisor 的訪客內核。

gVisor的安全模式非常有趣,這里建議大家參閱官方說明文檔:

  1. https://gvisor.dev/docs/ 

gVisor 與 runC 的顯著差別如下:

  • 性能更差
  • Linux內核層并非 100% 兼容,參見官方文檔中的兼容性部分:
  1. https://gvisor.dev/docs/user_guide/compatibility/ 
  • 不受默認支持

總結:

  • Docker 確被棄用,大家應該開始考慮使用 CRI 運行時,例如 containerd 與 CRI-O。containerd 與 Docker 相兼容,二者共享相同的核心組件。如果你主要使用 Kubernetes 的最低功能選項,CRI-O 可能更為適合。
  • 明確理解 CRI 運行時與 OCI 運行時之間的功能與作用范圍差異。

根據你的實際工作負載與業務需求,runC可能并不總是最好的選擇,請酌情做出考量!

廢棄 Docker,但別慌! 

[[355840]]

在 1.20 版本之后,Kubernetes 將不再支持把 Docker 作為容器運行時使用。

不必驚慌,實際上沒多大影響。

PS:這里只是不建議將 Docker 作為底層運行時,你仍然可以使用專為Kubernetes創建的容器運行時接口(CRI)一如既往地在集群中運行 Docker 鏡像。

對于 Kubernetes 最終用戶,此次調整同樣不會有太大影響。Docker 不會就此消亡,你也仍然可以繼續將 Docker 作為開發工具使用。

Docker 會繼續構建起不計其數的容器,而運行 docker build 命令所生成的鏡像仍可在 Kubernetes 集群內正常運行。

如果你使用的是 GKE 或者 EKS 等托管 Kubernetes 服務,則需要確保在未來的 Kubernetes 版本徹底去除 Docker 支持之前,為你的工作節點引入受支持的容器運行時。

如果節點中包含自定義項,你可能需要根據當前環境及運行時要求做出更新。請與服務供應商合作,確保正確完成升級測試及規劃。

如果你的集群一直在滾動擴展,則需要配合變量以避免服務中斷。在 1.20 版本中,你將收到 Docker 棄用警告。

而在未來的 Kubernets 版本(計劃在 2021 年下半年發布的 1.23 版本)中,Docker 運行時將被徹底移除、不再受到支持,屆時您必須切換至其他兼容的容器運行時,例如 containerd 或者 CRI-O。

只需要保證你所選定的運行時,能夠支持當前使用的 Docker 守護程序配置即可(例如日志記錄)。

既然問題不大,大家在慌什么?在怕什么?

這里我們需要探討兩種不同的環境,而這也是恐慌情緒的根源。首先,在 Kubernetes 集群內部存在一種叫作容器運行時的東西,負責提取并運行容器鏡像。

Docker 是目前最流行的運行時選項(其他常見選項還包括 containerd 與 CRI-O)。

但 Docker 在設計上并未考慮到被嵌入 Kubernetes 這種用法,所以可能引發問題。

很明顯,這里我們提到的“Docker”并不是同一種東西——它代表著一整套技術棧,而 containerd 高級容器運行時則是 Docker 中的一部分。

Docker 很酷、實用性極強,提供多種用戶體驗增強功能,讓我們能夠在開發過程中輕松完成協同交互。

但是,用戶體驗增強功能對 Kubernetes 來說并非必需,因為 Kubernetes 并不是什么人類協作方。

結果就是,要想讓 containerd 這個人類友好型抽象層發揮作用,Kubernetes 集群就必須引入另一款名為 Dockershimi 的工具。

但這款工具的介入又引發了新的問題,因為我們必須額外加以維護,否則就可能引發安全問題。

事實上,Dockershim 早在 Kubelet 1.23 版本時就已經被移除,或者說 Kubelet 很早就取消了將 Docker 作為容器運行時的功能。

這時候很多朋友可能要問,既然 Docker 棧中已經包含 containerd,Kubernetes 為什么還要畫蛇添足地搞出個 Dockershim?

這是因為 Docker 與 CRI(即容器運行時接口)并不相容。正是因為不相容,所以我們才需要 Dockershim 來緩沖一下。

但這不是什么大問題,各位沒必要驚慌!這件事的本質,就是把容器運行時從 Docker 轉換為另一種受支持的選項。

這里需要注意的是:如果大家將底層 Docker 套接字(/var/run/docker.sock)設定為集群工作流中的一部分,那么轉換至其他運行時會破壞掉當前業務的正常運行。

這種模式稱為 Docker in Docker,好在我們可以使用多種選項解決這個特定用例,包括 Kaniko、Img 以及 Buildah 等等。

對開發者來說意味著什么?

但這種變化對開發者意味著什么?我們還需要編寫 Dockerfiles 嗎?未來還應不應該繼續使用 Docker?

請注意,本次變更所影響到的環境,其實跟大多數人用于進行 Docker 交互的環境并不是一回事。

你在開發中使用的 Docker 安裝,與 Kubernetes 集群中的 Docker 運行時毫無關系。我知道,這事聽起來讓人有點犯迷糊。

總之,對于開發人員,Docker 在公布此次更改之前提供的所有方案都仍然適用。

Docker 生成的鏡像實際上并不特定于 Docker,更準確地說它應該屬于 OCI(開放容器倡議)鏡像。

任何與 OCI 相兼容的鏡像,無論使用哪種工具構建而成,對于 Kubernetes 來說都是一樣的。

Containerd 與 CRI-O 都能識別這些鏡像并正常運行,這也是我們建立一套統一容器標準的意義所在。

因此,雖然變化即將到來,雖然會給部分用戶帶來麻煩,但影響并不算大。而且從長遠角度看,這其實是件好事。

總而言之,希望大家放下抵觸和恐慌情緒,坦然接受這個變化。

參考鏈接:

  • https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/
  • https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m

出處:內容來源公眾號分布式實驗室(ID:dockerone)

 

責任編輯:武曉燕 來源: 分布式實驗室
相關推薦

2024-11-07 10:04:48

2019-06-26 08:30:32

計算機互聯網iOS

2012-02-21 09:22:45

2009-07-03 16:21:58

IT系統數據中心運維管理

2011-02-22 09:24:30

諾基亞微軟

2021-08-06 09:20:41

IT管理IT領導者CIO

2020-02-04 16:37:17

k8s 相關應用

2023-05-25 21:38:30

2022-03-08 09:00:00

Kubernetes容器技術

2011-07-08 13:34:16

2022-12-06 07:30:12

K8s云原生生態系統

2018-03-27 10:15:58

微信紅包個人信息

2014-09-10 10:14:14

2020-12-18 15:08:17

微信詐騙移動應用

2022-04-22 13:32:01

K8s容器引擎架構

2020-06-11 16:15:25

Java線程池代碼

2017-04-21 13:50:37

硬盤磁盤

2017-12-25 08:55:45

網站虛擬主機

2023-11-06 07:16:22

WasmK8s模塊

2017-01-15 21:22:38

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av免费在线观看网站 | 成人av观看 | 一区二区免费在线 | 免费精品视频一区 | 欧美一区不卡 | 老司机深夜福利网站 | 一区二区三区免费观看 | 国产精品乱码一区二区三区 | 激情五月综合 | 国产一区二区 | 成年人黄色免费视频 | 成人一区二区三区视频 | 久久一区 | 视频在线亚洲 | 色婷婷影院| 亚州影院 | 99这里只有精品视频 | 日韩一区二区久久 | 国产一区在线视频 | 91精品国产91久久久久久吃药 | 亚洲精选一区二区 | 久草在线| 日本不卡视频 | 欧美亚洲成人网 | 少妇无套高潮一二三区 | 免费观看的黄色网址 | 国产一区久久精品 | 一级免费视频 | av手机在线免费观看 | 中文字幕成人在线 | 欧美日韩综合一区 | 欧美日韩在线免费 | 日本国产高清 | 欧美一级久久 | 日韩视频二区 | 国产精品久久久久久久久免费樱桃 | 精品欧美一区二区精品久久 | 一区二区三区国产 | 欧美a级成人淫片免费看 | 久久这里只有精品首页 | 欧美在线免费 |