CRI-O將如何把Kubernetes推上容器生態系統的中心位置?面試必學

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/05/15/12897306.html
-Advertisement-
Play Games

開源項目CRI-O(https://github.com/kubernetes-incubator/cri-o),即之前的OCID,旨在不依賴傳統容器引擎的前提下,使開源Kubernetes調度框架可以管理和啟動容器化的工作負載。 使用Google發起、Kubernetes工程師開發的容器運行時介面 ...


開源項目CRI-O(https://github.com/kubernetes-incubator/cri-o),即之前的OCID,旨在不依賴傳統容器引擎的前提下,使開源Kubernetes調度框架可以管理和啟動容器化的工作負載。

使用Google發起、Kubernetes工程師開發的容器運行時介面(CRI),通過與Kubernetes或Kubernetes的商業實例(如CoreOS Tectonic)進行交互,該軟體可以幫助DevOps專家管理整個“容器生命周期”。

開發者需要容器引擎來創建和構建容器鏡像,也可以使用自己的模擬環境。在管理更複雜的生產環境時,管理和運營團隊會發現使用Kubernetes stack——即調度框架、CRI和CRI-O——會比將調度框架和標準容器引擎配對更加方便。
另外大家要註意光理論是不夠的。在此順便送大家十套2020最新JAVA架構項目實戰教程及大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,還可以跟老架構師交流

該項目將容器調度工具,而非容器引擎,推上了容器棧組件的當家位置。CRI的貢獻者告訴我們,CRI允許Kubernetes使用任何容器引擎,只要該引擎符合開放容器倡議的規範,包括OCI自己的runC引擎,它可以做到品牌容器引擎如Docker和CoreOS的rkt的許多功能,包括從registry中pull鏡像的功能,但不能從makefile構建鏡像。

CRI-O是什麼

谷歌開發工程師, Kubernetes引擎的倡導者和領導者,Kelsey Hightower,在接受The New Stack採訪時談到,儘管開放容器倡議已經減輕了它對CRI-O的責任(但其成員和貢獻者還是相同的供應商和相同的人),但該項目是“OCI的自然進程”,是在發展容器運行時和鏡像的標準介面。

CRI-O項目最重要的主張是,用戶不應該對創建工作負載並用以stage的容器產生依賴。按照最初的設想,該項目將對Kubernetes提供工具,使其不需要Docker、rkt、OpenShift、Photon等任何的品牌容器,就可以管理容器的全生命周期。

Hightower 表示,“我們從容器運行時中需要得到的東西並不多——無論是Docker還是rkt ,它們要做的都很少,主要是把內核的API給我們。所以這並不僅僅是關於Linux的,我們也可以用在Windows系統上。如果這是社區想要發展的方向,我們需要Kubernetes去支持這些想法——因為這比Docker Inc.更重要,這才是重點。”

此主張的潛在假設是,調度框架位於容器生態系統的中心位置,而我們必須認識到“引擎”其實只是一個開發工具。

另一方面,CRI(通過Kubernetes開發,也是為了Kubernetes而開發的API)向容器引擎製造商們提供了一個機會,即實現Kubernetes的開放介面,這樣一來,擁有容器引擎的環境便可以合理連接。據一位谷歌核心工程師表示,這些連接可以在沒有容器引擎提供商“重構”引擎的情況下實現Kubernetes的相容性。

相反,一個叫做shim的抽象層可以被插入容器引擎和調度框架之間。容器供應商們如何實現shim抽象層就取決於他們了。

完成之後,CRI API(和Kubernetes連接的部分)可以將更多的容器生命周期控制交給Kubelet——即Kubernetes專屬的容器管理器,它將被容器生態系統所採用。

Kubernetesd的下一個版本,即1.5版本的目標是,包含一個定型的CRI用來使kubelet和Docker、rkt、中國的容器供應平臺Hyper.sh(https://www.hyper.sh/),以及由紅帽領導開發的CRI-O進行交互。

Philips表示,“許多不同的容器運行時都想和Kubernetes進行交互,所以我們沒有在kubelet中為每一個容器進行時構建單獨的介面,而是創建一個更加抽象的介面,讓其他人不需與Kubernetes上游工作直接相關也可以接入。

誰重構誰

Hightower描述容器運行時介面(CRI-O中的CRI)為容器引擎應該支持的基本特性的抽象。一旦CRI被完成,Kubernetes計劃重構自己的代碼庫以實現CRI。

如果CRI-O成功了,他解釋說,所有容器引擎生產者都不必再更改引擎的代碼庫,只要和Kubernetes交互操作就行了。

Hightower承認,“目前,想要玩好Kubernetes,需要構建一堆東西,而且可能改變目前使用的一些方式,你必須自己查看代碼庫搞清楚一些東西,這就是我們為Docker做的,如何為你的運行時引擎調整到適合你的方式,同時也適用與Kubernetes。”

CoreOS的Philips解釋道,每一個容器引擎會利用shim組件,它可以將容器本地辭彙的API請求翻譯為Kubernetes可以理解的形式。

Philips 說,“由於CRI的工作方式的原因,你需要一個GRPC 守護進程,它會監聽這些請求,並和kubelet進行交流。”反過來,kubelet會通過套接字向實現了CRI的引擎發送遠程調用反饋。

“當前的Docker和rkt支持正被拉進CRI介面,”philis解釋道。CoreOS的rkt對CRI的實現目前在GtiHub上,名為rktlet(https://github.com/kubernetes-incubator/rktlet)。他希望不管是rktlet還是Docker的實現,最終都能重構進CRI中。

Docker已經要求實現和Kubernetes之間的shim了,谷歌的Hightower告訴我們,這個shim是Kubernetes而不是Docker的工程師生產的。Philips說,不管誰來實現CRI shim,Docker都會被重製以適應和其他人的合作。

“為了和CRI結合,Docker容器和rkt容器都在發生改變。” ——Brandon Philips,CoreOS

OCI鏡像格式的最終標準還未敲定,儘管OCI的一位發言人曾告知《The New Stack》,在發佈OCI鏡像格式的1.0版本之前還保留兩個候選版本。

同時,Docker繼續增強其容器引擎,將特征聯繫起來,比如其Swarm 調度框架和服務發現。

“我覺得一切都好,”他說,“當然可能有人不喜歡,但沒關係,每個人都可以有自己的意見。Kubernetes——我們也提供一堆東西。但我們更相信我們是在做一些商品之上的東西”

Kubernetes 及展望

“要正確實現我們所說的pod,需要瞭解很多事情,” Hightower解釋道,“把負擔分解到每個容器運行時的做法對這些容器運行時來說是不公平的,想要玩一玩Kubernetes還必須實現那麼多代碼。這樣想吧:他們還要為了Mesos、Swarm等等分別再做一些不同的事。為了簡化,我們將把Kubernetes特有的邏輯保存在kubelet內部,而在外部,我們只會用到本地容器運行時已有的東西。”

假設真的實現了一個能理解當前容器化語言的介面,能夠抽象出面向pod、基於kubelet的邏輯,而相同的API可以和Kubernetes之外的東西對接時,可以以不同的方式抽象出自己的邏輯。

我們和Mesosphere的創始人Ben Hindman探討了這種可能性。

“我覺得行業真正在探尋的東西,是可以被靈活操作的部件,” Hindman 向 The New Stack解釋道,“我認為,以Kubernetes為例,這非常關鍵。Kubernetes以往是依賴於Docker去做容器管理的,他們也曾嘗試去構建調度。Docker併入了Swarm之後,他們就有了一個可以用來做調度的容器管理器。所以單從構架和工程師的角度,我會說‘我們要是有一個做容器管理的組件就好了……這樣可能有成倍的人來使用’”。

Hindman相信Docker是很想把runc作為開放標準的。但調度需要的不僅僅是和運行時進行交互操作。

“還有更多的相關的東西。下載鏡像、打開鏡像——要做的還有很多。我認為行業中曾被廣泛探討的是,這些東西是不是應該被分解和模塊化?怎麼做才能在構架層面上更有意義,而不是針對一次fork。”——Ben Hindman,Mesosphere

Hindman解釋說,Mesosphere的DC/OS 環境中也有這種組件,它們已經能夠脫離對runc和Docker組件的依賴。這如他所說,容器社區真正要追求的目標,是確定組件之間的架構界限,併在其中建立良好的介面。

這是否意味著Mesosphere支持CRI-O,其目標——正如Kelsey Hightower所說——和Hindman之前所說的完全一

儘管Hindman並不代表OCI,但必須註意到Mesosphere是OCI的創始成員之一。正如Hindman回應的,OCI的初衷是發展一種常規運行時模式,並使runc可以將其作為一個容器來打開。容器化社區也十分關心鏡像格式問題,其中包括容器rest狀態時的文件系統和元數據。OCI也十分認同上文中的目標, Hindman表示,“其實,這比運行時格式更吸引我們。”

至於Mesosphere為什麼著手去做所謂的“萬能容器”,Hindman繼續說道,“是為了生產面向所有開放格式的容器,包括OCI。”

Hindman說,但在這最佳的構架下,可能並沒有標準化的調度工作負載的方式,因為調度任務特征的差異性太大。因此,之前為了實現任何調度器都可以部署和打開,而去尋找單一配置文件、元數據文件或者描述工作負載的努力,也隨著Hindman所謂“最低共同標準規範”而終止,該“規範”擁有功能集更為廣泛的調度器。

而決定通用的鏡像格式,相比之下就簡單多了。它歸結於Linux是否支持該格式。“如果Linux支持,我們就公開該標準。我認為大家不會在鏡像格式的問題上有太多爭議,因此,把它當做標準是完全沒問題的。”

Mesosphere將繼續支持OCI(或者叫“OCID”),Hindman總結說,也會根據支持OCI的程度繼續支持CRI-O。但是Mesosphere的“通用容器運行時”會以不同的方式進行這項支持。

市場將會變得更具競爭力,彼時市場的主角將會是調度框架,而不是被調度的內容。

最後註意:光理論是不夠的。在此順便送大家十套2020最新JAVA架構項目實戰教程及大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,還可以跟老架構師交流
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 伺服器版本 CentOS7.2 MongoDB版本 3.4 1/ 下載所需資源 阿裡鏡像地址 http://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb org/3.4/x86_64/RPMS/ 下載rpm安裝包: 2/ 安裝 MongoDB 先安裝 ...
  • 本文記錄,如何在 Python Script 中使用 Shebang 行。 Shebang Line 是什麼: 也被叫做 Hashbang Line,只要是一個由,井號和嘆號 開頭,並構成的字元序列 ,就叫做 Shebang Line。在開頭字元之後,可以有一個或數個空白字元。這個字元串,通常只出現 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題63. 股票的最大利潤 與以下題目相同 前往:LeetC ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 121. 買賣股票的最佳時機 題目 給定一個數組,它的第 i ...
  • 在使用Python時,需要使用各種各樣的庫,通常會使用pip直接安裝,這樣最為簡單也最方便。但最為崩潰的地方在於有時候速度出奇的慢,因為pip預設使用的源為官方源,而官方源在國外。通常的解決方法是更換源,常見的國內源如下所示: Windows下永久更換源 1.在運行視窗或資源管理器中輸入 %APPD ...
  • 這有一個專註Gopher技術成長的開源項目 "「go home」" 背景 作為一名程式員,家裡多多少少會有一些落了灰的電腦,如果把閑置的電腦變成伺服器,不僅有良好的配置,還能用來做各種測試,那就再好不過了。但是區域網的設備怎麼被外網訪問呢?這就靠內網穿透來實現了。 內網穿透又叫 "NAT" 穿透,常 ...
  • ReentrantLock完美實現了互斥,完美解決了併發問題。但是卻意外發現它對於讀多寫少的場景效率實在不行。此時ReentrantReadWriteLock來救場了!一種適用於讀多寫少場景的鎖,可以大幅度提升併發效率,你必須會哦! 序幕 為何引入讀寫鎖? ReentrantReadWriteLoc ...
  • 接上一章, "Windows玩轉Kubernetes系列1 VirtualBox安裝Centos" ,我們開始學習如何在Centos中安裝Docker 準備 關閉防火牆 防火牆一定要提前關閉,否則在後續安裝K8S集群的時候,會有一些問題,執行下麵語句: 關閉Swap 註掉swap 關閉SeLinux ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...