1. 前言

最近开始参与一个导师的项目, 我们是乙方, 给甲方做一个流量分析相关的系统. 整个系统是运行在一个kvm虚拟机(系统为centos)里面. 系统配置好之后将整个虚拟机打包成镜像提供给甲方.

我的任务是系统中的一个日志相关的小模块, 开发的第一步自然是搭建环境, 由于是第一次接触kvm虚拟机, 在搭建的过程中也踩了一些坑, 因此觉得有必要记录一下, 方便之后再次使用时查阅.

2. 正文

2.1. kvm 常用操作

todo

2.2. kvm 从镜像到可联网的虚拟机

host环境配置:

ubuntu 18.04 Desktop

2.2.1. 从镜像到虚拟机

最开始学长给我的就是一个虚拟机镜像文件, 我需要用这个镜像启动一个虚拟机. 镜像文件格式如下.

$ file ./centos7.6
./centos7.6: QEMU QCOW Image (v3), 12884901888 bytes
$ du -h ./centos7.6
13G     ./centos7.6

qcow 是一种虚拟机镜像格式, 常见的虚拟机镜像格式有raw, qcow, qcow2, vmdk 等, 具体信息参考[1]

从镜像启动虚拟机建议使用 virt-manager, 一个虚拟机管理工具.

$ sudo apt install virt-manager

这个工具有guicli 两种形式, 本文介绍使用gui从镜像构造虚拟机的过程.

安装完毕之后启动virt-manager

$ virt-manager

会弹出一个gui界面. 之后操作就和 windows 下使用 vmware 创建虚拟机差不多. 大致流程如下, 不再赘述.

File -> New Virtual Machine -> Import existing disk image -> 内存/处理器/网卡等操作(之后都可以修改)

一通设置完毕之后就可以启动虚拟机了. 会弹出一个新的窗口, 里面就是虚拟机的终端/桌面.

不过现在的虚拟机还无法连接外网, 在配置的过程中如果需要安装各种依赖包的话还是比较麻烦, 接下来就讲一下如何配置虚拟机的网络使其可以连上外网.

2.2.2. 使虚拟机连上外网

配置思路大致如下:

  1. 新建一个网桥
  2. 将虚拟机的网卡桥接到第一步新建的网桥上

ubuntu 18.04上使用netplan[1]来配置网络, 我们通过配置文件添加一个网桥 br0

$ cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eno1:
      dhcp4: no
  bridges:
    br0:
      interfaces: [eno1]
      dhcp4: no
      addresses: [192.168.3.2/24]
      gateway4: 192.168.3.1
$ sudo netplan apply
$ sudo service networking restart

ip和接口名称自行修改

虽然在系统中添加了网桥,但是此时在virt-manager中是看不到我们添加的网桥的,还需要在virsh中添加一个网桥配置。

新建一个xml文件 br0.xml

<network>
 <name>kvm-br0</name>
 <forward mode="bridge"/>
 <bridge name="br0"/>
</network>

然后执行如下命令

virsh net-define br0.xml
virsh net-start kvm-bridge
virsh net-autostart kvm-bridge

再设置虚拟机使用 kvm-br0 这个网卡, 并使用ifconfig 配置个静态ip即可成功访问外网

3. 结语

写代码5分钟, 配环境半小时

4. 参考

  1. KVM qcow2、raw、vmdk等镜像格式和转换
  2. Netplan 官网
  3. Ubuntu18 kvm单网卡桥接