簡介
本文檔介紹如何分析和解決因OCI封裝與Cisco Catalyst不相容導致的容器安裝故障
必要條件
需求
思科建議您瞭解以下主題:
- Cisco Catalyst 9000系列交換機上的應用託管
- Docker容器影象格式,特別是Docker和開放容器計畫(OCI)標準
- Docker Engine版本的差異及其與Cisco IOS®版本的相容性
- 基本熟悉Cisco IOS® CLI和容器安裝故障排除
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- Cisco Catalyst 9300X系列交換器
- Cisco IOS® 軟體
- 使用OCI格式打包為容器的第三方應用程式
- 固態驅動器(SDD)作為應用程式託管容器的儲存
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
Cisco Catalyst 9000系列交換機上的應用託管允許利用IOx平台在交換機硬體上直接部署基於容器的應用。這些容器通常使用Docker影象格式。近期在貨櫃包裝標準方面的發展已經引入了開放式貨櫃計畫(OCI)格式,而所有Docker Engine版本並不普遍支援這種格式。隨著較新Cisco IOS®版本的發佈,思科逐步增加對較新Docker Engine版本的支援,從而擴展了與OCI封裝容器的相容性。但是,並非所有Cisco IOS®版本或所有Catalyst平台都支援OCI封裝。當組織尋求部署採用較新標準的第三方應用程式時,軟體版本和容器格式之間的不匹配會導致安裝失敗和相關錯誤。
問題
目標是在Cisco Catalyst 9000系列交換機上,特別是在運行Cisco IOS® 17.6.4的裝置上,升級或安裝作為容器的第三方應用程式。該應用程式打包為符合OCI的Docker映像,並儲存在SSD驅動器上。安裝期間,進程失敗,出現與存檔檔案結構相關的錯誤以及缺少強制blob。這是此問題的詳細複製和說明。
步驟 1:嘗試在Cisco IOS® 17.6.4上安裝容器
Device#Aug 15 13:11:11.389 UTC: %IM-6-INSTALL_MSG: R0/0: ioxman: app-hosting: Install failed: Invalid Archive file: Unable to extract docker rootfs /disk0/pathview-cmp.tar to /vol/disk0/caf/tmpExtractf117jdv6/rootfs Error:Mandatory layer blobs is missing!
此錯誤消息表示在從提供的tar檔案中提取Docker檔案時出現故障,特別是引用缺少的強制層blob。這表示容器映像格式與交換器上可用的Docker Engine版本之間不相容。
步驟 2:檢查Tar檔案的結構
Device#archive tar /table flash:pathview-cmp.tar
blobs/ (directory)
blobs/sha256/ (directory)
blobs/sha256/0318da79d21ba1e610bde0c6029f424293316cb913bb8e39a673c1f344be8727 (477 bytes)
blobs/sha256/046b3f7b867b1b7b8abd8ad22b3d64d1692f670c6a6e210a03ad3d31e9e80e79 (2996736 bytes)
blobs/sha256/04f0912220f0c2c6935e817813866ba3bdadba386edc577325a83a1fdb4879d2 (2560 bytes)
blobs/sha256/1e5cb17607b5c739629c9d0be80fa48f57ccd3507962ac221c9fbb91b20af171 (3584 bytes)
blobs/sha256/26323df902297791c86ab980a2cfaa76a9939bc7cc72646d6d0fb02db2fd0c32 (477 bytes)
blobs/sha256/2e4b80ea022a9c575ff90f41c4a533a0104a0361be4f563d50ec128aea973f57 (3072 bytes)
blobs/sha256/31aedc7091e9c30e45a6b276bd3bbe922ded9791ef4a9b9c9e44d3c9ddd74183 (477 bytes)
blobs/sha256/4172f6ce43d7636f98bfca81b0dc64ab7a600bbc7c60916c70a89749d092bd28 (11776 bytes)
blobs/sha256/4654182bbf590a33df0930847ce2803792ad2822e19c630f00bb39abb0c98ef6 (11676 bytes)
blobs/sha256/4ba2623fac214b72c911695418ed7d4d3b41dc1ed9101e448ca124ed126f0cf5 (401 bytes)
blobs/sha256/625d905965265a01abf82f80bd0c9c103ab229efbffdf8e17e5408a97d9ba470 (477 bytes)
blobs/sha256/6ba030bdcefc282c164bc0c6b4dfa8f30f085487aba82c1524a55649f2741e98 (1908 bytes)
blobs/sha256/6c4c763d22d0c5f9b2c5901dfa667fbbc4713cee6869336b8fd5022185071f1c (77895680 bytes)
blobs/sha256/6def6f10cc5b9a7dc012ca9e9321013a1d947c60f7ef902af2bcdef2fc53efcb (207397376 bytes)
blobs/sha256/7a2f3e2b33a720bc5ba562639d581574c997fa47efb26486360e0cad9d311573 (4096 bytes)
blobs/sha256/96cbe396af0cb40feb2bdab0d22e2a5f5ca3865455d7c8ca28245e1462eaf2be (477 bytes)
blobs/sha256/a0b1b29152e438cee663922cf019cc9beccd1958e3385cbb0b1c4b2c8f5cf0f8 (2048 bytes)
blobs/sha256/a9775757eec8bb747ca1dd66356a643943d4c9e18cccb7135305f9f3ff3c6790 (3584 bytes)
blobs/sha256/b5a729e23ce10966aa1935040de68b24dedc7b7cbc98dd233307623f95330493 (1971200 bytes)
blobs/sha256/c21b565f0164ee4f392a2f3507b36a5f7d06c77db979e84e9fd6100f3c5f1ef5 (2220 bytes)
blobs/sha256/c5b39eb2dc5af9a446af02dd67237191f5fc164dce4bfeb2cbc63ab7802fc50f (29141504 bytes)
blobs/sha256/d0539e4616d88232f284a9d469ee309dec1850aa8b6ed4f57b2e84f413eba34d (477 bytes)
blobs/sha256/d13aa916c45e4866e0bc3af1a68ee7360b5e1c074cd0849f67b72b64e5e4d4f5 (477 bytes)
blobs/sha256/d4924836d34beac0bc207c42351234b771a3f2a0d3a0bc1e8b1aa175edb70852 (477 bytes)
blobs/sha256/d86d4fab4a9109fea084cccddefb3bb78b69d20674a1104d8ca3170ed4ad50d7 (477 bytes)
blobs/sha256/dd1f33c08d67af57858bcc4aa1cedd4cfa00560b77b248e0903ae26bb66bea87 (477 bytes)
blobs/sha256/efdcd58e09999ffc1bca3ca8256a03fdf8fa90713478d2ed13f884ddd2e3cad2 (12800 bytes)
blobs/sha256/f356261d8da7bf5ad814f757b1a51b9be2eb74c59cfcda944be2d31ab56f5ecd (477 bytes)
index.json (381 bytes)
manifest.json (4135 bytes)
oci-layout (31 bytes) <<< Indication that the container is created using OCI standard
repositories (101 bytes)
device#
儘管進行了提取,但安裝仍失敗,確認問題不在於檔案完整性,而在於格式相容性。容器tar檔案被標識為使用OCI結構,Cisco IOS® 17.6.4中存在的Docker守護程式(dockerd)版本不支援該結構。
步驟 3:檢查交換機上的IOx和Dockerd版本
Device#show iox
IOx Infrastructure Summary:
---------------------------
IOx service (CAF) : Running
IOx service (HA) : Running
IOx service (IOxman) : Running
IOx service (Sec storage) : Not Running
Libvirtd 5.5.0 : Running
Dockerd 18.03.0 : Running <<< This version doesn't support OCI packaging
Sync Status : Disabled
此輸出顯示,交換機正在運行Dockerd版本18.03.0,該版本不支援OCI封裝容器。這是OCI格式映像安裝失敗的根源。
解決方案
此解決方案涉及將Cisco IOS®軟體升級為支援足夠Docker Engine(dockerd)的版本,以允許安裝OCI格式的容器。該過程是逐步描述的。
步驟 1:將交換器升級為相容的Cisco IOS®版本
將交換機升級到Cisco IOS®版本17.8.1或更高版本。此版本包括Dockerd v19.03.13-ce或更高版本,支援OCI打包。
步驟 2:升級後驗證Dockerd版本
Device#show iox
IOx Infrastructure Summary:
---------------------------
IOx service (CAF) : Running
IOx service (HA) : Running
IOx service (IOxman) : Running
IOx service (Sec storage) : Running
Libvirtd 5.5.0 : Running
Dockerd v19.03.13-ce : Running <<< Version that supports OCI packaging
Sync Status : Disabled
確保Dockerd在v19.03.13-ce或更高版本上運行。如果是,現在可以成功安裝OCI格式的容器。
步驟 3:重試容器安裝
確認Docker引擎版本後,重複容器安裝過程。現在安裝成功完成,沒有與歸檔檔案提取或丟失blob相關的錯誤。
原因
問題的根本原因是使用以開放容器計畫(OCI)格式打包的容器映像,Cisco IOS® 17.6.4隨附的Docker Engine(dockerd 18.03.0)版本不支援該格式。只有Cisco IOS® 17.8.1及更高版本(包括Docker Engine v19.03.13-ce或更高版本)支援OCI打包。升級Cisco IOS®軟體可解決不相容的問題。
相關資訊