一. 环境准备
1. 基本原理
- 使用 nmap 等网络工具, 获取局域网内未使用IP地址, 使用 guestfish 工具编辑 镜像内的网关网络配置文件.
- 使用自定义的 centos 镜像, 以及 镜像配置 xml 配置, 创建虚拟机.
- 虚拟机网络环境使用桥接.
- 虚拟机内部启用 vnc , 用于在 ssh 无法使用时的替代品.
2. 基本环境.
- 所有虚拟机及配置都位于
/data
目录下, 可以修改. /data/base
下存放的是基础文件, 包含相关脚本, 虚拟机模板文件, 虚拟机镜像文件等.1
2
3
4
5
6
7
8
9
10
11base/
├── bin
│ ├── kvm_add_vm.sh
│ └── kvm_auto_install.sh
├── centos6-BASE.qcow2
├── centos7-BASE.qcow2
├── ip_pool
│ ├── gen_ip_list.sh
│ ├── unused_ip.list
│ └── used_ip.list
└── template.xml虚拟机的管理使用
virsh
管理名利集.配置完成的虚拟宿主机, 可以使用
virsh
工具实现远程管理.虚拟网段使用 192.169 开头的网段.
二. 系统环境初始化
参考代码: kvm-base script
1. 脚本示例
1 | $ cat kvm_auto_install.sh |
2. 脚本使用方法
1 | $ bash kvm_auto_install.sh |
三. kvm 镜像模板
1. 模板示例
1 | <domain type='kvm'> |
2. 说明
- 类似
%XXX%
格式的为变量, 在 创建虚拟机 即运行kvm_add_vm.sh
脚本时, 会自动替换为相关参数. - 模板中的系统相关配置根据需要修改, 如平台类型等.
- 虚拟机默认开始 vnc , 用于创建 console 连接到虚拟机, 作为 ssh 无法使用或不支持时的替代方案.
- 网络,磁盘 等IO设备, 默认使用
virtio
方式增强性能. - 虚拟机会有两张网卡.
- 同时支持 centos6 和 centos7.
四. 自动添加 kvm 虚拟机脚本
1. 脚本示例
1 | $ cat kvm_add_vm.sh |
2. 使用方法
1 | $ kvm_add_vm.sh VM_CPU VM_MEM(Gb) [ centos6|centos7 ] |
3. 查看
生成虚拟机名称格式为 VM_NAME=$VM_VERSION-$VM_NET_IP
, 如 centos6_192.168.1.1
.
生成虚拟机之后, 可以使用 virsh
相关命令实现本机或远程虚拟主机管理.1
2$ virsh list
$ virsh dominfo centos6_192.168.1.1
五. 虚拟镜像管理利器: guestfish && virsh
guestfish 是一套虚拟机镜像管理的利器,提供一系列对镜像管理的工具,也提供对外的API。
guestfish主要包含以下工具:
- guestfish interactive shell 挂载镜像,并提供一个交互的shell。
- guestmount mount guest filesystem in host 将镜像挂载到指定的目录。
- guestumount unmount guest filesystem 卸载镜像目录。
命令行说明:
命令 | 说明 |
---|---|
virt-alignment-scan | 镜像块对齐扫描。 |
virt-builder | quick image builder 快速镜像创建。 |
virt-cat(1) | display a file 显示镜像中文件内容。 |
virt-copy-in(1) | copy files and directories into a VM 拷贝文件到镜像内部。 |
virt-copy-out(1) | copy files and directories out of a VM 拷贝镜像文件出来。 |
virt-customize(1) | customize virtual machines 定制虚拟机镜像 |
virt-df(1) | free space 查看虚拟机镜像空间使用情况。 |
virt-diff(1) | differences 不启动虚拟机的情况下,比较虚拟机内部两份文件差别。 |
virt-edit(1) | edit a file 编辑虚拟机内部文件。 |
virt-filesystems(1) | display information about filesystems, devices, LVM 显示镜像文件系统信息。 |
virt-format(1) | erase and make blank disks 格式化镜像内部磁盘。 |
virt-inspector(1) | inspect VM images 镜像信息测试。 |
virt-list-filesystems(1) | list filesystems 列出镜像文件系统。 |
virt-list-partitions(1) | list partitions 列出镜像分区信息。 |
virt-log(1) | display log files 显示镜像日志。 |
virt-ls(1) | list files 列出镜像文件。 |
virt-make-fs(1) | make a filesystem 镜像中创建文件系统。 |
virt-p2v(1) | convert physical machine to run on KVM 物理机转虚拟机。 |
virt-p2v-make-disk(1) | make P2V ISO 创建物理机转虚拟机ISO光盘。 |
virt-p2v-make-kickstart(1) | make P2V kickstart 创建物理机转虚拟机kickstart文件。 |
virt-rescue(1) | rescue shell 进去虚拟机救援模式。 |
virt-resize(1) | resize virtual machines 虚拟机分区大小修改。 |
virt-sparsify(1) | make virtual machines sparse (thin-provisioned) 镜像稀疏空洞消除。 |
virt-sysprep(1) | unconfigure a virtual machine before cloning 镜像初始化。 |
virt-tar(1) | archive and upload files 文件打包并传入传出镜像。 |
virt-tar-in(1) | archive and upload files 文件打包并传入镜像。 |
virt-tar-out(1) | archive and download files 文件打包并传出镜像。 |
virt-v2v(1) | convert guest to run on KVM 其他格式虚拟机镜像转KVM镜像。 |
virt-win-reg(1) | export and merge Windows Registry keys windows注册表导入镜像。 |
libguestfs-test-tool(1) | test libguestfs 测试libguestfs |
libguestfs-make-fixed-appliance(1) | make libguestfs fixed appliance |
hivex(3) | extract Windows Registry hive 解压windows注册表文件。 |
hivexregedit(1) | merge and export Registry changes from regedit-format files 合并、并导出注册表文件内容。 |
hivexsh(1) | Windows Registry hive shell window注册表修改交互的shell。 |
hivexml(1) | convert Windows Registry hive to XML 将window注册表转化为xml |
hivexget(1) | extract data from Windows Registry hive 得到注册表键值。 |
guestfsd(8) | guestfs daemon guestfs服务。 |