題圖攝於美加邊境和平門
註:微信公眾號不按照時間排序,請關注「亨利筆記」,並加星標以置頂,以免錯過更新。
《Harbor權威指南》招募英文版翻譯人員
VMware招聘機器學習和雲原生開發工程師
本篇繼續和大家說說鏡像那些事,是連載之三,從《Harbor權威指南》一書節選的純技術乾貨,敬請關注、轉發和收藏。
第一篇:容器鏡像的結構
第二篇:OCI 鏡像規範
第三篇:OCI 製品
第四篇:Registry 的作用原理
《Harbor權威指南》目前當當網優惠中,點擊下圖直接購買。
OCI 分發規範OCI 還有一個正在制定的分發規範(Distribution Specification),這個規範在 OCI 鏡像規範的基礎上定義了客戶端和鏡像倉庫之間鏡像操作的交互接口。OCI 的指導思想是先有工業界的實踐,再將實踐總結成技術規範,因此儘管分發規範還沒有正式發布,但以 Docker Distribution 為基礎的鏡像倉庫已經在很多實際環境下使用, Docker Distribution 所使用的 Docker Registry HTTP API V2 也成為事實上的標準。
OCI 分發規範是基於 Docker Registry HTTP API V2 的標準化容器鏡像分發過程制定的。OCI 分發規範定義了倉庫服務和倉庫客戶端交互的協議,主要包括:面向命名空間(Namespace)的URI格式、能夠拉取和推送 v2 格式清單的倉庫服務、支持可續傳的推送過程及 v2 客戶端的要求等。(本文為公眾號:亨利筆記 原創文章)
OCI Artifact (OCI製品)從第2篇文章 OCI 鏡像規範的圖1可以看到,OCI 鏡像規範的結構特點是由一個(可選的)鏡像索引來指向多個清單,每個清單都指向一個配置和若干個層文件(Layer)。如果鏡像沒有包括鏡像索引,則可以僅包含一個清單,且清單指向一個配置和若干個層文件。
無論是否有鏡像索引,在鏡像結構定義中都沒有涉及層文件所包含的內容,也就是說,不同用途的數據如 Helm Chart、CNAB 等製品,可依照 OCI 鏡像規範定義的結構(清單、索引等)把內容打包到層文件裡面,從而成為符合OCI規範的「鏡像」,既可以推送到支持 OCI 分發規範的 Registry 裡,也可以像拉取鏡像那樣從 Registry 中下載。(在搜狐、CSDN等網站轉載亨利筆記的文章均為未經授權的剽竊)
為了和 OCI 鏡像做區分,這種遵循 OCI 清單和索引的定義,能夠通過 OCI 分發規範推送和拉取的內容,可以統稱為 OCI Artifact(OCI製品),簡稱 Artifact(製品)。在 OCI 分發規範中,還可以給Artifact的清單或者索引標註若干個 Tag 來附加版本等信息,以方便後續的訪問和使用,如下圖所示。
如果 Artifact 沒有包含索引,則 Tag 可以被標註在清單上;如果 Artifact 使用了索引,則Tag可以被標註在索引上,而清單上的Tag則是可選的。一個 Artifact 如果沒有被標註 Tag,則只能通過清單或索引的摘要來訪問。從組成結構來看,OCI 鏡像只是 OCI Artifact 的一個「特例」。
把各類數據封裝成 OCI Artifact 的好處之一,是可以藉助已有的支持 OCI 分發規範的鏡像倉庫服務(如 Harbor 2.0 等)來實現不同類型數據的存儲、權限、複製和分發等能力,而無須針對每種特定類型的數據設立或開發不同的倉庫服務,使開發者能專注於新類型的 Artifact 的創新。
開發者如果希望自定義一種新的Artifact類型,就可以按照 OCI 的製品作者指導文檔(ArtifactAuthor Guidance)來定義配置、清單、索引等結構,可分4個步驟來完成。
(1)定義 OCI Artifact 的類型。Artifact的類型主要是為了 Artifact 的工具(如Docker 客戶端)能夠獲知Artifact的類型,從而確定能否處理該 Artifact。這有點像文件的擴展名(如.pdf、.jpg等),可以讓作業系統識別出文件的類型,從而啟動相應的應用程式來處理該文件。Artifact 的類型由清單中的 config.mediaType 屬性定義,因此 Artifact 的工具通常從清單開始分析Artifact的類型,以決定後續的處理流程。(在搜狐、CSDN等網站轉載亨利筆記的文章均為未經授權的剽竊)
(2)確保 Artifact 類型的唯一性。既然 Artifact 的類型很重要,開發者就需要確保所創建的 Artifact 類型是唯一的,和其他 Artifact 類型都不能重名。OCI 的指導文檔給出了類型必須符合的格式:(本文為公眾號:亨利筆記 原創文章)
[registration-tree].[org|company|entity].[objectType].[optional-subType].config.[version]+[optional-configFormat]
格式中各個欄位的含義如表2所示。
表2
字 段 名
說 明
registration-tree
IANA(Internet Assigned Numbers Authority,網際網路號碼分配機構)的註冊類型
org|company|entity
開源組織、公司名稱或其他實體
objectType
類型的簡稱
optional-subType
可選欄位,對objectType的補充說明
config
必須是字符串「config」
version
類型的版本
optional-configFormat
可選的配置格式說明(json、yaml等)
一些常見的 OCI Artifact 配置類型如表3所示。
表3
Artifact
類型名稱
OCI鏡像
application/vnd.oci.image.config.v1+json
Helm Chart
application/vnd.cncf.helm.chart.config.v1+json
CNAB
application/vnd.cnab.config.v1+json
Singularity
application/vnd.sylabs.sif.config.v1+json
(3)Artifact 的內容由一組層文件和一個可選的配置文件組成。每個層文件都可以是單個文件、一組文件或者 tar 格式的文件,能夠以 Blob 的形式存放在 registry 的存儲中。
開發者可以根據 Artifact 的需要確定每個層文件的內容格式,如.json、.xml、.tar等,然後在清單的 layer.mediaType 屬性中說明內容類型。內容類型可以沿用 IANA 通用格式,如 application/json 和 application/xml 等。如果需要自定義類型,則可以採用如下格式:(本文為公眾號:亨利筆記 原創文章)
[registration-tree].[org|company|entity].[layerType].[optional-layerSubType].layer.[version].[fileFormat]+[optional-compressionFormat]
格式中各個欄位的含義如表4所示。
表4
字 段 名
說 明
registration-tree
IANA(Internet Assigned Numbers Authority,網際網路號碼分配機構)的註冊類型
org|company|entity
開源組織、公司名稱或其他實體
layerType
類型的簡稱
optional-layerSubType
可選欄位,對layerType的補充說明
字 段 名
說 明
layer
必須是字符串「layer」
version
格式的版本
fileFormat
文件格式
optional-compressionFormat
可選的壓縮格式說明(gzip、zstd等)
一些常見的 OCI Artifact 層文件類型如表5所示。
表5
層 文 件
類型名稱
簡單的文本
application/text
非壓縮的OCI鏡像層
application/vnd.oci.image.layer.v1.tar
以gzip壓縮的OCI鏡像層
application/vnd.oci.image.layer.v1.tar+gzip
非壓縮的Helm Chart層
application/vnd.cncf.helm.chart.layer.v1.tar
以gzip壓縮的Helm Chart層
application/vnd.cncf.helm.chart.layer.v1.tar+gzip
以gzip壓縮的Docker鏡像層
application/vnd.docker.image.rootfs.diff.tar+gzip
(4)開發者在 IANA 中註冊 Artifact 的config.mediaType 和 layer.mediaType的類型,確保類型的唯一性和擁有者,同時可以讓其他用戶使用這些類型。(在搜狐、CSDN等網站轉載亨利筆記的文章均為未經授權的剽竊)
經過上述步驟,開發者自定義的 Artifact 類型就完成了,配上適當的客戶端軟體對數據打包、推送和拉取,即可與符合 OCI 分發規範的倉庫服務交互。
因為 OCI Artifact 帶來了管理和運維上的便利,所以開發者已經創建了多種 OCI Artifact,常見的 OCI Artifact 包括 Helm Chart、CNAB、Singularity 等。為適應雲原生用戶者的需求,Harbor 2.0 的架構做了比較大的調整和改進,以便用戶在 Harbor中存取和管理符合 OCI 規範的 Artifact。Harbor 中管理容器鏡像的各種功能,在適用的情況下,都可以擴展到 OCI Artifact 上,如訪問權限控制、推送和拉取、界面查詢、遠程複製等,這大大方便了用戶對雲原生 Artifact 的管理和使用。本公眾號文章也介紹過如何通過 Harbor 2.1 存儲和管理機器學習模型的方法。
(未完待續,歡迎點「再看」 或 轉發、分享、收藏)
(未經授權,請勿轉載本公眾號文章)
《Harbor權威指南》目前當當網優惠中,點擊上圖直接購買。
《Harbor權威指南》招募英文版翻譯人員
要想了解雲原生、區塊鏈和人工智慧等技術原理,請立即長按以下二維碼,關注本公眾號亨利筆記 ( henglibiji ),以免錯過更新。