简介
本文档介绍如何分析和解决由于OCI包装与Cisco Catalyst不兼容导致的容器安装故障
先决条件
要求
Cisco 建议您了解以下主题:
- Cisco Catalyst 9000系列交换机上的应用托管
- Docker容器图像格式,特别是Docker和开放容器计划(OCI)标准
- Docker引擎版本的差异及其与Cisco IOS®版本的兼容性
- 基本熟悉Cisco IOS® CLI和容器安装故障排除
使用的组件
本文档中的信息基于以下软件和硬件版本:
- Cisco Catalyst 9300X系列交换机
- Cisco IOS®软件
- 使用OCI格式打包为容器的第三方应用程序
- 固态驱动器(SDD)作为应用程序托管容器的存储
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
Cisco Catalyst 9000系列交换机上的应用托管允许利用IOx平台直接在交换机硬件上部署基于容器的应用。这些容器通常使用Docker图像格式。集装箱包装标准的最新发展引入了开放式集装箱计划(OCI)格式,但并非所有Docker Engine版本都普遍支持该格式。随着较新的Cisco IOS®版本的发布,思科逐步增加了对较新Docker引擎版本的支持,从而扩展了与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引擎版本之间不兼容。
步骤 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引擎(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®软件可解决不兼容的问题。
相关信息