目录

简介

先决条件

要求

使用的组件

背景信息

配置

创建Windows VM映像

在Linux计算机上安装KVM

验证KVM安装

创建Windows VM

将Windows VM映像部署到CGM-SRV

验证

故障排除

简介

本文档介绍在Connected Grid Module(CGM)- System Server(SRV)模块上创建和运行Windows虚拟机(VM)所需的步骤。

先决条件

要求

Cisco 建议您了解以下主题：

- Linux

- 基于内核的虚拟机(KVM)

- 了解虚拟化概念

使用的组件

本文档中的信息基于以下软件和硬件版本：

- Connected Grid路由器(CGR)1120

- CGM-SRV-XX模块

- CGM-SRV的配置步骤在本指南之前执行：

- Windows 7安装ISO

- 虚拟网络计算(VNC)查看器

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

背景信息

当您想在CGR1000平台上运行IOx应用或VM时，可以使用CGM-SRV计算模块。CGM-SRV模块实际上是包含多核x86 CPU、内存和存储的小型服务器。CGR1120和CGR1240都可以具有其中一个模块来添加IOx功能。

在撰写本文时，有两种类型可用：

库存保留单位(SKU)

固态驱动器(SSD)

RAM

CPU

CGM-SRV-64

64GB（50GB可用）

4GB

4核800Mhz

CGM-SRV-128

128GB（100GB可用）

4GB

4核800Mhz

每个模块还有两个USB端口用于存储，并有自己的外部千兆以太网接口。

与任何其他支持IOx的设备一样，该模块可以托管不同类型的IOx应用，但由于CGM-SRV模块容量较大，它还可以运行完全配置的Windows或标准Linux分区（例如Ubuntu或CentOS）。

配置

创建Windows VM映像

要在CGM-SRV模块上部署Windows VM，您首先需要创建包含Windows安装的QEMU QCOW格式的映像。在Linux计算机上使用KVM和virsh创建此映像的一种方法。

进一步提到的步骤根本不涉及CGR1xxx或CGM-SRV，它们只是创建基本Windows 7 VM QCOW映像的必需步骤，您可以在CGM-SRV的下一步中部署该映像。

对于本指南，您可以从新安装的CentOS7最低安装开始。其他Linux发行版的步骤必须相似，但可能稍有不同。

在Linux计算机上安装KVM

步骤1.首先检查主机是否支持VM扩展。在x86平台上，这些是AMD-V或英特尔的VT-X。大多数（如果不是全部）现代x86 CPU都支持这些扩展。即使运行VM，大多数虚拟机监控程序也提供传递/模拟这些扩展的选项。

为了检查安装的CPU是否支持这些扩展，您需要检查cpuinfo-output中是否存在vmx（对于VT-X）或svm（对于AMD-V）标志。

[root@cen7 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo

2

如果此命令的输出为0，则意味着找不到CPU支持VM扩展。在这种情况下，当您使用VM运行此计算机时，可以检查BIOS或虚拟机监控程序中是否启用了这些扩展。

步骤2.下一步是创建网桥，为可在KMV上运行的VM提供网络。

首先，您需要在内核中启用IP转发：

[root@cen7 ~]# echo "net.ipv4.ip_forward = 1"|sudo tee /etc/sysctl.d/99-ipforward.conf

net.ipv4.ip_forward = 1

[root@cen7 ~]# sysctl -p /etc/sysctl.d/99-ipforward.conf

net.ipv4.ip_forward = 1

要创建网桥，IP配置需要从实际接口移动到网桥本身，因为这是拥有IP地址的接口。

完成标准安装后，网络配置在/etc/sysconfig/network-scripts中:

[root@cen7 ~]# ls -1 /etc/sysconfig/network-scripts/ifcfg-*

/etc/sysconfig/network-scripts/ifcfg-eno16777736

/etc/sysconfig/network-scripts/ifcfg-lo

步骤3.如您所见，当前有一个接口（环回接口除外），称为eno167777736。您需要将IP相关配置移到可以调用virbr0的网桥接口：

[root@cen7 ~]# vi /etc/sysconfig/network-scripts/ifcfg-virbr0

[root@cen7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0

DEVICE=virbr0

TYPE=BRIDGE

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.16.245.162

NETMASK=255.255.255.0

GATEWAY=172.16.245.2

DNS1=8.8.8.8

步骤4.之后，您需要从实际接口清理IP配置并将其连接到virbr0网桥：

[root@cen7 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

[root@cen7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736

UUID=46f0f247-e164-40cc-866b-9133458d9df8

DEVICE=eno16777736

ONBOOT=yes

BRIDGE=virbr0

HWADDR=00:0c:29:ce:96:38

步骤5.完成网络配置后，您可以继续安装KVM:

[root@cen7 ~]# sudo yum install kvm virt-manager libvirt virt-install qemu-kvm xauth dejavu-lgc-sans-fonts -y

...

Complete!

步骤6.安装完成后，最好重新启动此计算机以应用新安装的模块和网络配置：

[root@cen7 ~]# init 6

验证KVM安装

步骤7.重新启动完成后，您应该能够访问网桥接口上配置的（相同）IP上的计算机。您必须检查KVM内核模块是否已加载：

root@cen7 ~]# lsmod|grep kvm

kvm_intel             200704  0

kvm                   589824  1 kvm_intel

irqbypass              16384  1 kvm

步骤8.如果这看起来不错，您可以尝试使用virsh连接：

[root@cen7 ~]# sudo virsh -c qemu:///system list

Id    Name                           State

----------------------------------------------------

步骤9.最后一步是打开此计算机防火墙上的端口5900，以便VNC访问Windows安装：

[root@cen7 ~]# firewall-cmd --zone=public --add-port=5900/tcp --permanent

success

[root@cen7 ~]# firewall-cmd --reload

success

创建Windows VM

现在，您有了可与KVM安装配合使用的系统，您可以在KVM上启动新的VM，并通过Windows安装对话框运行。

步骤1.将Windows 7安装ISO复制到您的VM（或通过网络访问）：

[root@cen7 ~]# scp jedepuyd@172.16.X.X:/home/jedepuyd/win7install.iso /var

jedepuyd@172.16.X.X's password:

win7install.iso                                                        100% 4546MB  62.1MB/s   01:13

步骤2.创建新的KVM VM，并使其从Windows 7 ISO启动：

root@cen7 ~]# virt-install --connect qemu:///system -n win7 -r 1024 --vcpus=2 --disk path=/var/lib/libvirt/images/win7.img,size=9 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win7 --accelerate --network=bridge:virbr0 --hvm --cdrom /var/win7install.iso

Starting install...

Allocating win7.img                                                             | 9.0 GB  00:00:00

Creating domain...                                                                |    0 B  00:00:00

Domain installation still in progress. You can reconnect to

the console to complete the installation process.

步骤3.启动VM后，您可以使用VNC查看器连接到端口5900上主机的IP，并完成标准Windows安装，如图所示：

如果Windows在安装时重新启动，则如果不自动执行此操作，则可能需要使用virsh重新启动虚拟机：

[root@cen7 ~]# virsh start win7

Domain win7 started

步骤4.安装完成后，关闭VM。现在，您在创建VM时提供的路径中有此安装的QCOW映像：/var/lib/libvirt/images/win7.img。此类映像可以部署在CGM-SRV上以运行Windows。

将Windows VM映像部署到CGM-SRV

现在，您拥有了在CGM-SRV上运行的正确映像类型，您可以开始部署它。

步骤1.为与您的配置对应的客户端设置配置文件：

[root@cen7 ~]# ./ioxclient profiles create

Enter a name for this profile : CGR1120_20

Your IOx platform's IP address[127.0.0.1] : 10.X.X.X.X

Your IOx platform's port number[8443] :

Authorized user name[root] : admin

Password for admin :

Local repository path on IOx platform[/software/downloads]:

URL Scheme (http/https) [https]:

API Prefix[/iox/api/v2/hosting/]:

Your IOx platform's SSH Port[2222]:

Your RSA key, for signing packages, in PEM format[]:

Your x.509 certificate in PEM format[]:

Activating Profile  CGR1120_20

Saving current configuration

在本例中，10.X.X.X与CGR1000上的传出接口对应，您在该接口上配置了网络地址转换(NAT)以转发到CGM-SRV上的端口8443。

步骤2.配置ioxclient后，让我们将先前创建的映像重命名为vm.img以简化位，并使用带ioxclient的安全复制(SCP)将其复制到CGM-SRV。

或者，将磁盘映像转换为QCOW2格式，这是CGM-SRV期望的格式。默认情况下，较新版本的virt-manager似乎会以QCOW3格式创建磁盘映像。

使用以下命令可以轻松转换图像：

[root@cen7 ~]# qemu-img convert -f qcow2 -O qcow2 /var/lib/libvirt/images/win7.img /var/lib/libvirt/images/win7.img

确定图像格式正确后，继续重命名并复制：

[root@cen7 ~]# mv /var/lib/libvirt/images/win7.img /root/vm.img

[root@cen7 ~]# ./ioxclient platform scp /root/vm.img

Currently active profile :  CGR1120_20

Command Name:  plt-scp

Saving current configuration

Downloaded scp keys to pscp.pem

Running command : [scp -P 2222 -r -i pscp.pem /root/vm.img scpuser@10.50.215.246:/]

此传输可能需要一段时间，通过Cisco IOS®将传输速率从3-4MB/s左右传输到CGM-SRV。文件将复制到CGM-SRV模块上的/mnt/data/vm/vm.img。

步骤3.在传输进行中（或完成）时，可以创建package.yaml文件。此文件向IOx描述您到底要部署什么以及如何对其进行打包。

[root@cen7 ~]# vi package.yaml

[root@cen7 ~]# cat package.yaml

descriptor-schema-version: 2.2

info:

author-link: http://www.cisco.com/

author-name: Jens Depuydt

description: Windows 7 VM for CSR-SRV

name: win7

version: 1.0

app:

type: vm

cpuarch: x86_64

resources:

profile: custom

cpu: 600

disk: 10

memory: 3072

network:

-

interface-name: eth0

-

interface-name: eth1

graphics:

vnc: true

startup:

ostype: windows

qemu-guest-agent: false

disks:

- target-dev: hda

file: file://vm.img

如您在此package.yaml中所看到的，您指的是file://vm.img，它与CGM-SRV模块上mnt/data/vm/vm.img的实际位置相对应。

步骤4.下一步是使用ioxclient打包：

[root@cen7 ~]# ./ioxclient pkg .

Currently active profile :  default

Command Name:  package

No rsa key and/or certificate files to sign the package

Checking if package descriptor file is present..

Validating descriptor file /root/package.yaml with package schema definitions

Parsing descriptor file..

Found schema version  2.2

Loading schema file for version  2.2

Validating package descriptor file..

File /root/package.yaml is valid under schema version 2.2

Created Staging directory at :  /var/folders/sp/f9qn2fsn0d5fkj7szps6qvvr0000gn/T/638513626

Copying contents to staging directory

Checking for application runtime type

Couldn't detect application runtime type

Creating an inner envelope for application artifacts

Excluding  .DS_Store

Generated  /var/folders/sp/f9qn2fsn0d5fkj7szps6qvvr0000gn/T/638513626/artifacts.tar.gz

Calculating SHA1 checksum for package contents..

Package MetaData file was not found at  /private/var/folders/sp/f9qn2fsn0d5fkj7szps6qvvr0000gn/T/638513626/.package.metadata

Wrote package metadata file :  /private/var/folders/sp/f9qn2fsn0d5fkj7szps6qvvr0000gn/T/638513626/.package.metadata

Root Directory :  /private/var/folders/sp/f9qn2fsn0d5fkj7szps6qvvr0000gn/T/638513626

Output file:  /var/folders/sp/f9qn2fsn0d5fkj7szps6qvvr0000gn/T/559089521

Path:  .package.metadata

SHA1 : 262f763740c182f95358be84514a76ac11e37012

Path:  artifacts.tar.gz

SHA1 : 3d89ccd35fe5318dd83a249a26cb8140d98d15bb

Path:  package.yaml

SHA1 : aa42f949b707df07a83a17344e488c44eb585561

Generated package manifest at  package.mf

Generating IOx Package..

Package generated at /root/package.tar

步骤5.创建软件包后，可将其安装在CGM-SRV上。在本例中，IOx应用/VM称为win7:

[root@cen7 ~]# ./ioxclient app install win7 package.tar

Currently active profile :  default

Command Name:  application-install

Saving current configuration

Installation Successful. App is available at : https://10.X.X.X:8443/iox/api/v2/hosting/apps/win7

Successfully deployed

步骤6.在激活win7 IOx虚拟机之前，您需要创建负载JSON文件，为此虚拟机设置VNC密码：

[root@cen7 ~]# vi vnc.json

[root@cen7 ~]# cat vnc.json

{

"resources": {

"graphics": {"vnc-password": "password"}

}

}

步骤7.使用vnc.json负载，可激活win7 IOx VM:

[root@cen7 ~]# ./ioxclient app activate win7 --payload vnc.json

Currently active profile :  default

Command Name:  application-activate

Payload file : vnc.json. Will pass it as application/json in request body..

App win7 is Activated

步骤8. ioxclient的最后一步是启动VM:

[root@cen7 ~]# ./ioxclient app start win7

Currently active profile :  default

Command Name:  application-start

App win7 is Started

此时，Windows VM在CGM-SRV上运行，您可以开始使用它。

要访问Windows计算机控制台，可以在CGR1000和端口5900的传出接口上使用VNC查看器，如图所示：

从网络角度来看，您选择使用package.yaml文件将eth0和eth1赋予win7 IOx VM，如图所示：

如您所见，这些接口从DHCP服务器获取IP，该IP在Cisco IOS®上运行，无需进一步配置即可使用。

验证

使用本部分可确认配置能否正常运行。

要检查VM是否运行：

[root@cen7 ~]# ./ioxclient app list

Currently active profile :  CGR1120_20

Command Name:  application-list

Saving current configuration

List of installed App :

1. win7       --->    RUNNING

您还可以从本地管理器检查状态，如图所示：

故障排除

本部分提供了可用于对配置进行故障排除的信息。

要排除部署问题，请检查CGM-SRV主机操作系统上ioxclient或/var/log/caf.log的输出。

确保正确配置NAT以访问所有资源(思科应用托管框架(CAF)、安全外壳(SSH)、VNC)。