소개
이 문서에서는 Cisco Catalyst와의 OCI 패키징 비호환성으로 인한 컨테이너 설치 실패의 분석 및 해결에 대해 설명합니다
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- Cisco Catalyst 9000 Series 스위치에서 애플리케이션 호스팅
- Docker 컨테이너 이미지 형식, 특히 Docker 및 OCI(Open Container Initiative) 표준
- Docker Engine 버전 및 Cisco IOS® 릴리스와의 호환성 차이
- Cisco IOS® CLI 및 문제 해결 컨테이너 설치에 대한 기본적인 지식
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- Cisco Catalyst 9300X Series 스위치
- Cisco IOS® 소프트웨어
- OCI 형식을 사용하여 컨테이너로 패키지된 타사 애플리케이션
- SDD(Solid-State Drive) 드라이브를 앱 호스팅 컨테이너의 저장소로 사용
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
Cisco Catalyst 9000 Series 스위치에서 앱을 호스팅하면 IOx 플랫폼을 활용하여 컨테이너 기반 애플리케이션을 스위치 하드웨어에 직접 구축할 수 있습니다. 이러한 컨테이너는 Docker 이미지 형식을 사용하는 경우가 많습니다. 최근 컨테이너 포장 표준의 발전으로 OCI(Open Container Initiative) 형식이 도입되었으며, 이는 모든 Docker Engine 버전에서 보편적으로 지원되지 않습니다. 최신 Cisco IOS® 버전 릴리스를 통해 Cisco는 최신 Docker Engine 버전에 대한 지원을 점진적으로 추가함으로써 OCI 패키지 컨테이너와의 호환성을 확장합니다. 그러나 모든 Cisco IOS® 릴리스나 모든 Catalyst 플랫폼에서 OCI 패키징을 지원하지 않습니다. 조직이 최신 표준을 활용하는 타사 애플리케이션을 구축하려고 할 때 소프트웨어 버전과 컨테이너 형식이 일치하지 않으면 설치 실패와 관련 오류가 발생할 수 있습니다.
문제
목표는 Cisco Catalyst 9000 Series 스위치, 특히 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 파일은 Cisco IOS® 17.6.4에 있는 Docker daemon(dockerd) 버전에서 지원되지 않는 OCI 구조를 사용하는 것으로 식별되었습니다.
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
이 출력은 스위치가 OCI 패키지 컨테이너를 지원하지 않는 Dockerd 버전 18.03.0을 실행 중임을 보여줍니다. OCI 형식 이미지에 대한 설치 실패의 루트입니다.
솔루션
이 솔루션에서는 Cisco IOS® 소프트웨어를 최신 버전의 Docker Engine(dockerd)을 지원하는 버전으로 업그레이드하여 OCI 형식 컨테이너를 설치할 수 있도록 합니다. 그 과정은 단계별로 기술되어 있다.
1단계: 호환 가능한 Cisco IOS® 버전으로 업그레이드
스위치를 Cisco IOS® 버전 17.8.1 이상으로 업그레이드합니다. 이 버전에는 OCI 패키징을 지원하는 Dockerd v19.03.13-ce 이상이 포함되어 있습니다.
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(Open Container Initiative) 형식으로 패키징된 컨테이너 이미지를 사용했기 때문이며, 이는 Cisco IOS® 17.6.4에 포함된 Docker Engine 버전(dockerd 18.03.0)에서 지원되지 않습니다. Docker Engine v19.03.13-ce 이상을 포함하는 Cisco IOS® 버전 17.8.1 이상에서만 OCI 패키징을 지원합니다. Cisco IOS® 소프트웨어를 업그레이드하면 비호환성이 해결됩니다.
관련 정보