KVM + Cloud-init 快速搭建虚拟化平台

KVM 简介

  基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。

  KVM 是 Linux 的一部分。Linux 2.6.20 或更新版本包括 KVM。KVM 于 2006 年首次公布,并在一年后合并到主流 Linux 内核版本中。由于 KVM 属于现有的 Linux 代码,因此它能立即享受每一项新的 Linux 功能、修复和发展,无需进行额外工程。

  KVM 将 Linux 转变为 1 类(裸机恢复)虚拟机监控程序。所有虚拟机监控程序都需要一些操作系统层面的组件才能运行虚拟机,如内存管理器、进程调度程序、输入/输出(I/O)堆栈、设备驱动程序、安全管理器以及网络堆栈等。由于 KVM 是 Linux 内核的一部分,因此所有这些组件它都有。每个虚拟机都像普通的 Linux 进程一样实施,由标准的 Linux 调度程序进行调度,并且使用专门的虚拟硬件,如网卡、图形适配器、CPU、内存和磁盘等。

安装步骤

准备环境

  • 宿主机为 Ubuntu 16.04 LTS 操作系统
  • 预安装 python3、python3-pip 软件
  • 虚拟机操作系统的 cloud-init 镜像,比如 ubuntu-cloud-images.img(下载后请放置在与脚本设定一致的位置)
  • 虚拟机启动脚本(CentOSUbuntu
# 预先建立的目录
mkdir -p ~/kvm-data/images  
# 用于放置 cloud-init 镜像
mkdir -p ~/kvm  # 用于放置虚拟机 qcow2 磁盘文件
mkdir -p ~/kvm-data/keys/ 
# 用于放置 cloud-init 所需的公钥,server.pub 为宿主机公钥,紧急状态启用
mkdir -p ~/bin  
# 用于放置虚拟机启动脚本,并将该目录写入到 .bashrc 文件生效

cd ~/kvm-data/images && wget -c https://mirrors.shu.edu.cn/ubuntu-cloud-images/xenial/current/xenial-server-cloudimg-amd64-disk1.img
# 下载 Ubuntu 镜像

cd ~/kvm-data/images && wget -c https://mirrors.shu.edu.cn/centos-cloud/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2
# 下载 CentOS 镜像

cd ~/bin/ 
wget -c https://get.lui8.cn/virt-install-centos && chmod +x virt-install-centos
wget -c https://get.lui8.cn/virt-install-ubuntu && chmod +x virt-install-ubuntu
# 下载 CentOS 和 Ubuntu 虚拟机启动脚本
# 启动脚本中固定设置虚拟机硬盘大小固定为 20G,可根据需求进行修改
# 启动脚本中也有部分登录信息设置,可根据需求进行修改

tee -a ~/.bashrc << EOF
PATH=$PATH:~/bin
EOF
source ~/.bashrc
# 配置命令为当前用户全局命令

安装 KVM 和 Cloud-init

# 安装 qemu虚拟机创建工具
sudo apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils genisoimage cloud-init
# libvirt-bin 为第三方kvm接口,为 管理工具 virt-manager 提供接口
# bridge-utils 是用于网络 NAT 转发,虚拟机上网所用
# genisoimage 为镜像生成工具,用于生成 cloud-init 初始化内容并挂载
# 安装 cloud-init 后,由于开机过程或自动启动 cloud-init 服务,会增长开机时间

# 安装可用 ssh 密码输入交互工具,如已配置 ssh 免密码登录可不安装
sudo apt install lxqt-openssh-askpass

配置虚拟机网卡与ip对应(可忽略)

virsh net-edit default

# 示例配置文件
<network>
  <name>default</name>
  <uuid>8d175ef3-4837-42a3-8a47-f2f58226bba1</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:33:9b:52'/>
  <ip address='192.168.112.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.112.101' end='192.168.112.254'/>
      <host mac='52:54:00:33:12:01' name='vm01' ip='192.168.112.101'/>
      <host mac='52:54:00:33:12:02' name='vm02' ip='192.168.112.102'/>
    </dhcp>
  </ip>
</network>
# 将 mac 地址、主机名、网卡ip进行绑定

sudo ifdown virbr0 && sudo ifup virbr0  (或sudo reboot)
# 重启网络或重启机器使修改生效

创建 Linux 虚拟机

# 启动一台 Ubuntu 虚拟机
virt-install-ubuntu vm03 52:54:00:33:12:01 4096 4 lsz
# 启动命令共有 5 个参数,除最后一个参数外都必须设置
# 第一个参数是指虚拟机的别名
# 第二个参数是虚拟机的 mac 地址
# 第三个参数是虚拟机的内存大小,单位为 MB
# 第四个参数是虚拟机的核数
# 第五个参数是要在 cloud-init 初始化时添加的公钥
# 该参数省略时只添加宿主机公钥 ~/kvm-data/keys/server.pub

virt-install-centos vm03 52:54:00:33:12:02 4096 4 lsz
# 参数配置同上

创建 Windows 虚拟机

# 下载 Windows 10 操作系统 ISO 镜像 至 ~/kvm-data/images 目录
# 请自行百度下载或至 https://msdn.itellyou.cn 下载

# 下载 virtio 驱动
cd ~/kvm-data/images
wget -c https://mirrors.shu.edu.cn/virtio/virtio-win/direct-downloads/latest-virtio/virtio-win.iso

# 创建初始 win 虚拟机
virt-install --name=win10 --ram=8192 --cpu=host --vcpu=4 --os-type=windows \\
--disk ~/kvm/win10/win10.qcow2,bus=ide,size=100 \\
--cdrom=~/kvm-data/images/cn_windows_10_enterprise_version_1703_updated_march_2017_x64_dvd_10194191.iso \\
--disk ~/kvm-data/images/virtio-win.iso --network bridge=virbr0,model=virtio \\
--graphics vnc,listen=0.0.0.0,password=Passw0rd,port=5910 \\
--mac=52:54:00:33:12:21 --hvm --virt-type kvm

# 使用 vnc 客户端连接宿主机的 5910 端口,密码为 password 字段的值
# 按照正常安装 Windows 的操作步骤继续即可

# 安装完成后,将原来的 virtio-win.iso 挂载方式修改为 cdrom 类型
# 重启打开 virtio-win.iso 安装网卡驱动
# 文件目录位置为 NetKVM/w10/amd64
# 右键 netkvm.inf (安装信息) 文件点击安装即可完成

# 创建 win 模板
mkdir -p ~/kvm/tpl_win/
cp ~/kvm/win10/win10.qcow2 ~/kvm/tpl_win/win10.qcow2

virt-install --name=tpl_win10 --ram=4096 --cpu=host --vcpu=4 --os-type=windows \\
--disk ~/kvm/tpl_win/win10.qcow2,bus=ide,size=100 \\
--cdrom=~/kvm-data/images/virtio-win.iso --network bridge=virbr0,model=virtio \\
--graphics vnc,listen=0.0.0.0,password=Passw0rd,port=5999 \\
--mac=52:54:00:33:12:99 --hvm --virt-type kvm

# 创建 win 虚拟机从模板拷贝文件再度创建即可完成
小提示

暂未探索使用 Cloud-init 方式来初始化 Windows,后续补充。

参考资料

版权声明: 如无特别声明,本文版权归 仲儿的自留地 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 KVM 虚拟化 》

本文链接:https://lisz.me/tech/kvm/kvm.html

本文最后一次更新为 天前,文章中的某些内容可能已过时!