kvm+cloud-init快速搭建虚拟化平台

KVM 简介

准备环境

# 预先建立的目录
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,后续补充