このドキュメントでは、Schwarz Digitsに属するSTACKITクラウドにCisco Catalyst 8000Vをインストールし、起動するために必要な手順について説明します。
Cisco Catalyst 8000Vは、Cisco IOS XEを実行する仮想ルータです。STACKITでは、C8000Vイメージがカスタムイメージとしてアップロードされ、仮想サーバのブートボリュームの作成に使用されます。
サーバの作成中、STACKITは構成ドライブに提供されたユーザデータを配置します。C8000Vは最初のブート時にブートストラップを読み取ります。ブートストラップの内容は、目的の動作モードによって異なります。
3つのモードすべてで、同じイメージ、ボリューム、インターフェイス、およびサーバ作成シーケンスが使用されます。ブートストラップの内容と導入後の検証は、モードによって異なります。
ブートストラップには、パスワード、証明書、またはデバイスID情報を含めることができます。保護された場所に保存します。Base64エンコーディングでは、ファイルは暗号化されません。
このドキュメントの導入ワークフローは、次のソフトウェアリリースとSTACKIT VMの種類で検証されています。このテスト済みのベースラインはラボ環境を文書化したもので、現在のCisco Catalyst 8000Vのリリースノート、プラットフォーム要件、または機能固有のサイジングガイダンスに置き換わるものではありません。
検証には、次の種類のSTACKIT VMが含まれています。
| インスタンスサイズ |
vCPU |
メモリ(GiB) |
| c3i.4 |
4 |
8 |
| c3i.8 |
8 |
16 |
| c3i.16 |
16 |
32 |
C8000Vの導入に必要なCPU、メモリ、スループット、および機能の要件を満たすタイプを選択します。
検証済みのC8000Vゲストから、STACKIT仮想化環境は次のように報告されました。
Router#show platform software system hypervisor
Hypervisor: KVM
Manufacturer: STACKIT Cloud
Product Name: OpenStack Nova
Serial Number: <INSTANCE_UUID>
UUID: <INSTANCE_UUID>
Image Variant: None
Router#
このガイドでは、Homebrewを使用してSTACKIT CLIをインストールします。他のパッケージマネージャとインストール方法も使用できます。詳細については、STACKIT CLIインストールガイドを参照してください。
brew tap stackitcloud/tap
brew install --cask stackit
導入コマンドを実行する前に、STACKIT CLI環境を設定します。
STACKITアカウントにログインします。
stackit auth login
ブラウザで認証を完了します。認証に成功すると、CLIによってログインしていることが確認されます。
残りのコマンドの既定のプロジェクトを設定します。
stackit config set --project-id xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb
プロジェクトIDが不明な場合は、使用可能なプロジェクトを一覧表示します。
stackit project list
展開に必要な値を収集します。この例では、2つのネットワークと2つのNICを作成します。1つ目は管理またはトランスポート用で、2つ目はサービスまたはデータトラフィック用です。
export PROJECT_ID="<PROJECT_ID>"
export REGION="<REGION>"
export AVAILABILITY_ZONE="<AVAILABILITY_ZONE>"
export MACHINE_TYPE="<MACHINE_TYPE>"
export SERVER_NAME="<C8000V_NAME>"
export IMAGE_NAME="<C8000V_IMAGE_NAME>"
export IMAGE_FILE="/path/to/<C8000V_IMAGE>.qcow2"
export IMAGE_MIN_DISK_SIZE="<MINIMUM_DISK_GB>"
export BOOT_VOLUME_SIZE="<BOOT_VOLUME_GB>"
export IMAGE_UEFI="<true_or_false>"
export MGMT_NETWORK_NAME="${SERVER_NAME}-mgmt"
export DATA_NETWORK_NAME="${SERVER_NAME}-data"
export MGMT_IPV4_PREFIX="<MANAGEMENT_IPV4_PREFIX>"
export DATA_IPV4_PREFIX="<DATA_IPV4_PREFIX>"
export TRUSTED_SOURCE_CIDR="<TRUSTED_SOURCE_IP_OR_NETWORK>/<PREFIX_LENGTH>"
承認されたネットワーク設計の重複しないプレフィックスを使用します。プレフィックス長を含むCIDR表記でTRUSTED_SOURCE_CIDRを指定します。1つのIPv4アドレスを許可するには/32を使用します。次の管理規則の例では、TRUSTED_SOURCE_CIDRからのSSHのみが許可されています。
ファイルが目的のリリースの承認済みイメージであることを確認します。ファイル名とチェックサムを導入レコードに記録します。
qemu-img info "$IMAGE_FILE"
if command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$IMAGE_FILE"
else
sha256sum "$IMAGE_FILE"
fi
EFIイメージの場合はIMAGE_UEFIをtrueに設定し、BIOSイメージの場合はfalseに設定します。ダウンロードしたC8000Vイメージに指定されている設定を選択します。選択したイメージと最新の製品マニュアルに従って、最小ディスクサイズを設定します。
IMAGE_RESPONSE="$(
stackit image create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--name "$IMAGE_NAME" \
--disk-format qcow2 \
--uefi="$IMAGE_UEFI" \
--min-disk-size "$IMAGE_MIN_DISK_SIZE" \
--local-file-path "$IMAGE_FILE" \
--output-format json
)"
export IMAGE_ID="$(printf '%s' "$IMAGE_RESPONSE" | jq -r '.id')"
printf 'IMAGE_ID=%s\n' "$IMAGE_ID"
stackit image describe "$IMAGE_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--output-format json |
jq '{id, name, status, diskFormat}'
イメージのステータスがAVAILABLEになったら、作業を続けます。
カスタムイメージから新しいブートボリュームを作成します。ボリュームサイズは、選択したイメージのディスク要件を満たしている必要があります。
BOOT_VOLUME_RESPONSE="$(
stackit volume create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--availability-zone "$AVAILABILITY_ZONE" \
--name "${SERVER_NAME}-boot" \
--source-id "$IMAGE_ID" \
--source-type image \
--size "$BOOT_VOLUME_SIZE" \
--output-format json
)"
export BOOT_VOLUME_ID="$(printf '%s' "$BOOT_VOLUME_RESPONSE" | jq -r '.id')"
printf 'BOOT_VOLUME_ID=%s\n' "$BOOT_VOLUME_ID"
ボリュームのステータスがAVAILABLEになるまでボリュームをポーリングします。
stackit volume describe "$BOOT_VOLUME_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--output-format json |
jq '{id, name, status, size}'
既存のネットワークとセキュリティグループがすでに承認済みの設計に適合している場合は、それらを使用します。それ以外の場合は、次に示すようにリソースを作成します。
新しいネットワークを作成する前に、既存のネットワークをリストします。
stackit network list \
--project-id "$PROJECT_ID" \
--region "$REGION"
適切なネットワークが存在しない場合は、管理ネットワークまたはトランスポートネットワークと、サービスまたはデータネットワークを作成します。
MGMT_NETWORK_RESPONSE="$(
stackit network create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--name "$MGMT_NETWORK_NAME" \
--ipv4-prefix "$MGMT_IPV4_PREFIX" \
--output-format json
)"
DATA_NETWORK_RESPONSE="$(
stackit network create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--name "$DATA_NETWORK_NAME" \
--ipv4-prefix "$DATA_IPV4_PREFIX" \
--output-format json
)"
export MGMT_NETWORK_ID="$(printf '%s' "$MGMT_NETWORK_RESPONSE" | jq -r '.id')"
export DATA_NETWORK_ID="$(printf '%s' "$DATA_NETWORK_RESPONSE" | jq -r '.id')"
printf 'MGMT_NETWORK_ID=%s\nDATA_NETWORK_ID=%s\n' "$MGMT_NETWORK_ID" "$DATA_NETWORK_ID"
承認されたネットワークがすでに存在する場合は、代わりにMGMT_NETWORK_IDとDATA_NETWORK_IDをそれらのIDに設定します。
管理NICのステートフルセキュリティグループを作成します。
SECURITY_GROUP_RESPONSE="$(
stackit security-group create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--name "${SERVER_NAME}-mgmt" \
--description "Management access for ${SERVER_NAME}" \
--stateful \
--output-format json
)"
export MGMT_SECURITY_GROUP_ID="$(printf '%s' "$SECURITY_GROUP_RESPONSE" | jq -r '.id')"
printf 'MGMT_SECURITY_GROUP_ID=%s\n' "$MGMT_SECURITY_GROUP_ID"
承認されたソースCIDRからのSSHを許可します。
stackit security-group rule create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--security-group-id "$MGMT_SECURITY_GROUP_ID" \
--direction ingress \
--ether-type IPv4 \
--protocol-name tcp \
--port-range-min 22 \
--port-range-max 22 \
--ip-range "$TRUSTED_SOURCE_CIDR" \
--description "SSH from approved source"
HTTPS、NETCONF、ICMP、またはCisco SD-WANのコントロールルールとデータプレーンルールは、導入で必要な場合にのみ追加します。各入力ルールを実用的な最も狭い送信元に制限します。
サーバを作成する前に、NICを作成します。管理セキュリティグループをNIC 1に接続し、目的のC8000Vインターフェイスの順序で結果のNIC IDを送信します。
MGMT_NIC_RESPONSE="$(
stackit network-interface create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--network-id "$MGMT_NETWORK_ID" \
--name "${SERVER_NAME}-mgmt" \
--nic-security \
--security-groups "$MGMT_SECURITY_GROUP_ID" \
--output-format json
)"
DATA_NIC_RESPONSE="$(
stackit network-interface create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--network-id "$DATA_NETWORK_ID" \
--name "${SERVER_NAME}-data" \
--nic-security \
--output-format json
)"
export MGMT_NIC_ID="$(printf '%s' "$MGMT_NIC_RESPONSE" | jq -r '.id')"
export DATA_NIC_ID="$(printf '%s' "$DATA_NIC_RESPONSE" | jq -r '.id')"
printf 'MGMT_NIC_ID=%s\nDATA_NIC_ID=%s\n' "$MGMT_NIC_ID" "$DATA_NIC_ID"
server-createの例では、最初にGigabitEthernet1に対してMGMT_NIC_IDを送信し、2番目にGigabitEthernet2に対してDATA_NIC_IDを送信しています。追加のNIC IDは、送信された順序で後続のIOS XEインターフェイスにマッピングされます。サーバのブート後にIOS XEから得られたマッピングを確認します。
各NICのNIC ID、ネットワークID、MACアドレス、割り当てられたIPアドレス、および目的のIOS XEインターフェイスを記録します。
パブリックIPは特定のNICに関連付けられます。外部管理が必要な場合は、NIC 1に関連付けます。
プライベートパスを介して管理アクセスが提供される場合は、この手順を省略します。
PUBLIC_IP_RESPONSE="$(
stackit public-ip create \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--associated-resource-id "$MGMT_NIC_ID" \
--output-format json
)"
export PUBLIC_IP_ID="$(printf '%s' "$PUBLIC_IP_RESPONSE" | jq -r '.id')"
printf '%s\n' "$PUBLIC_IP_RESPONSE" | jq '{id, ip, associatedResourceId}'
自律モードの場合、1行に1つのIOS XEコンフィギュレーションコマンドでiosxe_config.txtを作成します。
コントローラモードの場合は、Cisco SD-WAN ManagerでコントローラモードCloud-Initブートストラップを生成し、ファイル名ciscosdwan_cloud_init.cfgを保持します。
SDルーティングモードの場合、SDルーティングモードCloud-InitブートストラップをCisco SD-WAN Managerで生成し、ファイル名ciscosdwan_cloud_init.cfgを保持します。
Cisco SD-WAN Managerで生成されたブートストラップを手動で編集しないでください。生成されたファイルには、デバイスIDとオンボーディング情報が含まれており、クレデンシャルを持つアーティファクトとして保護する必要があります。
hostname <ROUTER_HOSTNAME>
!
ip domain name <DOMAIN_NAME>
!
username <ADMIN_USER> privilege 15 secret <ADMIN_SECRET>
enable secret <ENABLE_SECRET>
!
interface GigabitEthernet1
description Management
ip address dhcp
no shutdown
!
interface GigabitEthernet2
description Service
no ip address
no shutdown
!
crypto key generate rsa modulus 2048
ip ssh version 2
!
line vty 0 4
login local
transport input ssh
!
end
選択したブートストラップへのパスを設定し、ファイルへのアクセスを制限します。
export BOOTSTRAP_FILE="/path/to/<BOOTSTRAP_FILE>"
chmod 600 "$BOOTSTRAP_FILE"
export USER_DATA_B64="$(base64 < "$BOOTSTRAP_FILE" | tr -d '\r\n')"
C8000V固有の設定は、configDrive: true、userData内のbase64エンコードされたブートストラップ、イメージベースのブートボリューム、および順序付けされたNIC IDです。
jq -n \
--arg name "$SERVER_NAME" \
--arg machineType "$MACHINE_TYPE" \
--arg availabilityZone "$AVAILABILITY_ZONE" \
--arg bootVolumeId "$BOOT_VOLUME_ID" \
--arg mgmtNicId "$MGMT_NIC_ID" \
--arg dataNicId "$DATA_NIC_ID" \
--arg userData "$USER_DATA_B64" \
'{
name: $name,
machineType: $machineType,
availabilityZone: $availabilityZone,
configDrive: true,
userData: $userData,
bootVolume: {
source: {
type: "volume",
id: $bootVolumeId
}
},
networking: {
nicIds: [$mgmtNicId, $dataNicId]
},
labels: {
product: "cisco-c8000v"
}
}' > c8000v-server.json
ブートストラップを表示せずに要求を確認します。
jq 'del(.userData)' c8000v-server.json
対象の環境について文書化されている現行のSTACKIT IaaS v2エンドポイントを使用します。必要に応じて、STACKIT API URLを置き換えます。
SERVER_RESPONSE="$(
stackit curl \
-X POST \
"https://<STACKIT API URL>/v2/projects/${PROJECT_ID}/regions/${REGION}/servers" \
-H "Content-Type: application/json" \
--data @c8000v-server.json \
--fail
)"
export SERVER_ID="$(printf '%s' "$SERVER_RESPONSE" | jq -r '.id')"
printf '%s\n' "$SERVER_RESPONSE" | jq '{id, name, status, configDrive}'
回答例:
{
"id": "<SERVER_ID>",
"name": "<C8000V_NAME>",
"status": "CREATING",
"configDrive": true
}
サーバが予期される実行状態に達するまでポーリングします。
stackit server describe "$SERVER_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION" \
--output-format json |
jq '{id, name, status, powerStatus}'
次の項目を確認します。
承認された管理パスを介して接続し、選択したリリースとモードに適したチェックを実行します。
show version
show platform software vnic-if interface-mapping
show ip interface brief
show ip route
目的のモードがアクティブで、Day-0設定が適用され、IOS XEインターフェイスが送信されたNICの順序と一致することを確認します。
コントローラモード用の追加コマンド:
show sdwan control connections
show sdwan control local-properties
show sdwan system status
SDルーティングモード用の追加コマンド:
show sd-routing control connections summary
show sd-routing control local-properties summary
show sd-routing system status
確認後、一時的なプロビジョニングクレデンシャルをローテーションし、ローカル要求ファイルとエンコードされた変数を削除します。
rm -f c8000v-server.json
unset USER_DATA_B64
このセクションのクリーンアップコマンドは、リソースを完全に削除します。展開が不要になり、各リソースIDがこのC8000V展開にのみ属していることを確認します。既存または共有のネットワーク、セキュリティグループ、イメージ、またはその他のリソースを削除しないでください。
クリーンアップの例では、インタラクティブな確認プロンプトが維持されます。操作を承認する前に、各STACKIT CLI確認プロンプトに示されているリソースを確認します。
コントローラまたはSDルーティングモードの場合は、STACKITリソースを削除する前に、必要なコントローラ側の使用停止を完了します。
続行する前に、記録されたリソースIDを確認してください。
printf 'SERVER_ID=%s\n' "$SERVER_ID"
printf 'PUBLIC_IP_ID=%s\n' "${PUBLIC_IP_ID:-not-created}"
printf 'MGMT_NIC_ID=%s\nDATA_NIC_ID=%s\n' "$MGMT_NIC_ID" "$DATA_NIC_ID"
printf 'BOOT_VOLUME_ID=%s\n' "$BOOT_VOLUME_ID"
printf 'MGMT_SECURITY_GROUP_ID=%s\n' "$MGMT_SECURITY_GROUP_ID"
printf 'MGMT_NETWORK_ID=%s\nDATA_NETWORK_ID=%s\n' "$MGMT_NETWORK_ID" "$DATA_NETWORK_ID"
printf 'IMAGE_ID=%s\n' "$IMAGE_ID"
導入にパブリックIPがある場合は、サーバを削除する前にIPを切断します。
if [ -n "${PUBLIC_IP_ID:-}" ]; then
stackit server public-ip detach "$PUBLIC_IP_ID" \
--server-id "$SERVER_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
fi
最初にサーバを削除します。サーバがサーバリストに表示されなくなったら、続行します。
stackit server delete "$SERVER_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
stackit server list \
--project-id "$PROJECT_ID" \
--region "$REGION"
オプションのパブリックIP、順序付けされた2つのNIC、およびブートボリュームを削除します。
if [ -n "${PUBLIC_IP_ID:-}" ]; then
stackit public-ip delete "$PUBLIC_IP_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
fi
stackit network-interface delete "$MGMT_NIC_ID" \
--network-id "$MGMT_NETWORK_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
stackit network-interface delete "$DATA_NIC_ID" \
--network-id "$DATA_NETWORK_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
stackit volume delete "$BOOT_VOLUME_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
管理セキュリティグループとネットワークがこの展開専用に作成されている場合は、依存リソースが削除された後で削除してください。
stackit security-group delete "$MGMT_SECURITY_GROUP_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
stackit network delete "$MGMT_NETWORK_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
stackit network delete "$DATA_NETWORK_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
カスタムイメージは、別のC8000Vの導入に使用する際に保持してください。それ以外の場合は、依存するすべてのブートボリュームが削除された後に削除します。
stackit image delete "$IMAGE_ID" \
--project-id "$PROJECT_ID" \
--region "$REGION"
残りのリソースをリストし、削除したIDが存在しないことを確認します。意図的に保持された共有リソースも引き続き表示されます。
stackit server list --project-id "$PROJECT_ID" --region "$REGION"
stackit public-ip list --project-id "$PROJECT_ID" --region "$REGION"
stackit volume list --project-id "$PROJECT_ID" --region "$REGION"
stackit security-group list --project-id "$PROJECT_ID" --region "$REGION"
stackit network list --project-id "$PROJECT_ID" --region "$REGION"
stackit image list --project-id "$PROJECT_ID" --region "$REGION"
導入後に保持されたローカルブートストラップのアーティファクトが、組織のクレデンシャル保持ポリシーに従って処理されていることを確認します。
# List servers
stackit server list --project-id "$PROJECT_ID" --region "$REGION"
# List volumes
stackit volume list --project-id "$PROJECT_ID" --region "$REGION"
# List custom images
stackit image list --project-id "$PROJECT_ID" --region "$REGION"
# List network interfaces
stackit network-interface list --project-id "$PROJECT_ID" --region "$REGION"
show version
show platform software vnic-if interface-mapping
show ip interface brief
show ip route
show logging
| 改定 | 発行日 | コメント |
|---|---|---|
1.0 |
24-Aug-2026
|
初版 |