Centos7|Centos7 离线安装 KVM,并安装 Csr1000v

最近需要在客户环境搭建 csr1000v,客户环境不能联网,同时使用 kvm 管理。所以需要离线安装 kvm,在利用 kvm 安装 csr100v ,中间遇到不少坑,现记录如下。
所有安装步骤是在 root 用户的基础上完成。
准备好的 kvm 安装包和 csr1000v 安装包所在地址:

ip: 10.124.205.51 user: root/cisco123 [root@localhost temp]# cd /opt/temp [root@localhost temp]# ls csr1000v-universalk9.16.12.04.qcow2kvm_pkg.tar.gz

整体安装思路如下:
  1. Linux 环境准备,检验系统版本以及是否具有虚拟化功能
  2. 离线安装 kvm
  3. kvm 安装 csr1000v
  4. 配置 KVM 相关网络
Linux 环境准备 检查 Linux 版本及内核是否一致,因为涉及到离线安装:
[root@localhost kvm_offile_pkg]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)[root@localhost kvm_offile_pkg]# uname -r 3.10.0-1160.el7.x86_64

关闭 Selinux
setenforce 0 vim /etc/selinux/config SELINUX=disabled

检查虚拟化功能是否开启
cat /proc/cpuinfo | egrep "vmx|svm"

Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

如果看到 vmx 或者 svm,表示虚拟化功能正常打开。
或者也可通过如下命令, 看到 VT-x 表示正常:
[root@localhost ~]# lscpu | grep Virtualization Virtualization:VT-x Virtualization type: full

离线安装 kvm 找一台可联网,相同版本的 linux 服务器,使用 yum 离线下载 kvm 相关包:
yum install --downloadonly --downloaddir=/opt/kvm qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install virt-viewer

将其打包后导入离线服务器:
tar -czvf kvm_pkg.tar.gz kvm

在离线服务器解压并安装:
tar -xzvf kvm_pkg.tar.gz# 使用 ls 查看,共有 250 个安装包 ls -l | grep "^-" | wc -l# 安装: yum localinstall -y {Path}/kvm/*.rpm

启动 kvm
systemctl enable libvirtd systemctl start libvirtd

查看 kvm 版本信息:
yum info qemu-kvm /usr/libexec/qemu-kvm --version

Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

kvm 安装 csr1000v 将下载好的 csr1000v 镜像导入服务器
# 将安装包导入到 /var/lib/libvirt/images 文件夹下 mv csr1000v-universalk9.16.12.04.qcow2 /var/lib/libvirt/images

安装 csr1000v
virt-install\ --connect=qemu:///system\ --name=csr_1000v\ --os-type=linux\ --os-variant=rhel4\ --arch=x86_64\ --cpu host-model\ --vcpus=1,sockets=1,cores=1,threads=1\ --hvm\ --ram=4096\ --import\ --disk path=/var/lib/libvirt/images/csr1000v-universalk9.16.12.04.qcow2,bus=ide,format=qcow2\ --network bridge=virbr0,model=virtio\ --noreboot # --name 可以起一个自定义的名字

安装成功可看到如下内容:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

打开 csr1000v
virsh --connect qemu:///system start csr_1000v

连接 csr1000v, 等等其启动完成
virsh console csr_1000v

看到如下内容,表示启动成功:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

配置 KVM 网络 宿主机访问 kvm
获取虚拟机有 DHCP 的分配 IP:
[root@localhost ~]# virsh net-dhcp-leases default Expiry TimeMAC addressProtocolIP addressHostnameClient ID or DUID ------------------------------------------------------------------------------------------------------------------- 2022-04-01 15:43:4252:54:00:0d:86:d9ipv4192.168.122.130/24Router00:63:69:73:63:6f:2d:35:32:35:34:2e:30:30:32:62:2e:34:31:30:36:2d:47:69:31

如果手动配置的 IP 可以通过如下脚本来获取, 通过 mac 地址,反查 arp 表,获取分配的 ip.
#!/bin/bash running_vms=`virsh list |grep running` echo -ne "共有`echo "$running_vms"|wc -l`个虚拟机在运行.\n" for i in `echo "$running_vms" | awk '{ print $2 }'`; do mac=`virsh dumpxml $i |grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"` ip=`arp -ne |grep "$mac" |awk '{printf $1}'` printf "%-30s %-30s\n" $i $ip done[root@localhost net-util]# bash list_vm_ip.sh 共有2个虚拟机在运行. csr_1000v192.168.122.130 new_csr_1000v192.168.122.131

由于本身是桥接到 br0 网卡上,可和宿主直接通信:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

所以可在 router 配置 telnet 登录:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

外网访问 KVM
上面的网络情况做到了,可以使用宿主机为 csr1000v 配置。但如果想从外部网络中,访问设备就无法做到了。
这时就需要新创建一个的网桥,然后和 kvm 的网卡相连接。
先介绍下网络环境:
机器名 IP 描述
宿主机 10.124.205.51 存储 kvm 的物理机
csr1000v 10.124.205.52 用 kvm 启动的虚机
测试机器 10.124.205.14 用于测试能否访问到 kvm 虚机
整体思路如下:
  1. 记录当前宿主机可以访问外网的网卡信息,比如 IP,网关等
  2. 新建一个网桥
  3. 将新建的网桥和原来的网卡想关联
  4. 修改 kvm 虚机文件
  5. 进入 csr1000v 绑定真实 IP
  6. 测试
首先记录当前物理网卡信息:
使用 ip addr 找到带有 IP 的真实网卡,比如我这里是 ens192:
2: ens192: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:50:56:bb:93:c4 brd ff:ff:ff:ff:ff:ff inet 10.124.205.51/24 brd 10.124.207.255 scope global noprefixroute ens192 valid_lft forever preferred_lft forever inet6 fe80::eb4d:e564:a48:1835/64 scope link noprefixroute valid_lft forever preferred_lft forever

记录对应配置文件的有效信息:
cat /etc/sysconfig/network-scripts/ifcfg-ens192 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens192" UUID="94a5dbcf-1d42-4fe1-ad0a-6f9743f0f033" DEVICE="ens192" ONBOOT="yes" IPADDR="10.124.205.51" PREFIX="24" GATEWAY="10.124.205.254" DNS1="64.104.14.184" DNS2="208.67.222.222" IPV6_PRIVACY="no"

这里将一些有用的信息,拷贝出来。之后新建网桥需要用到:
IPADDR="10.124.205.51" PREFIX="24" GATEWAY="10.124.205.254" DNS1="64.104.14.184" DNS2="208.67.222.222"

关闭网络
systemctl stop NetworkManager

因为要新建一个网桥,为了防止同名的情况,先查看下, 没有叫 br0 的网桥:
brctl show

创建新网桥,添加之前准备好的信息:
vim /etc/sysconfig/network-scripts/ifcfg-br0DEVICE=br0 ONBOOT=yes TYPE=Bridge NM_CONTROLLED=yes BOOTPROTO=static IPADDR="10.124.205.51" PREFIX="24" GATEWAY="10.124.205.254" DNS1="64.104.14.184" DNS2="208.67.222.222"

更新原始 ens192 网卡信息,与新网桥建立连接, 记得把原始文件备份
vim /etc/sysconfig/network-scripts/ifcfg-ens192NAME="ens192" DEVICE="ens192" ONBOOT="yes" TYPE=Ethernet ONBOOT=yes BRIDGE=br0

重启网络:
systemctl restart network

查看网卡是否生效:
原始 IP 转移到新网卡上:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

重启 kvm:
systemctl restart libvirtd

修改 kvm csr1000v 配置文件
virsh editcsr_1000v将 interface 关联的网卡,改成新网卡。 其中 type 需要改变为 bridge,bridge 绑定的名字需要改成 `br0`

重启 csr1000v
virsh rebootcsr_1000v

查看 csr_1000v 的网卡是否挂载到 br0 上:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

这时进入到设备中,正常配置有效的 ip,因为是桥接的模式,外网就可以正常访问了。
这里配置 IP 为 10.124.205.52, 从另外一台物理机上可以正常 ping 通:
Centos7|Centos7 离线安装 KVM,并安装 Csr1000v
文章图片

坑 之前使用 kvm 安装 csr1000v 后,发现使用 console 无法登录到 router 里面,一直卡在 Escape character is '^]'
使用官网文档,配置 tcp 串口依然不好用。最后是通过在 router 里面配置 platform console serial 这句话得以用 console 访问。
目前还存在一个问题,就是想给 router 默认刷一些 day0 配置进去,但安装官网创建 iso 镜像的方式也不太好用,后续研究后补充。
参考 【Centos7|Centos7 离线安装 KVM,并安装 Csr1000v】cisco install csr1000v

    推荐阅读