文章目录
创建 kvm 的虚拟机流程
全新安装
图形化
字符界面安装
- virt-install 工具安装
手动安装
需要使用空格键 Tab 键 上下方向键操作
比较繁琐,操作难度大自动安装
依赖 kickstart 文件
- 红帽公司开发的产品
获取到 ks.cfg 文件后,利用参数进行内核注入
利用已有的模板安装
模板就是从已有的虚拟机上获取
- *.xml 配置文件
- *.qcow2 虚拟磁盘文件
*.xml 修改的地方有:
- 虚拟机名称
- UUID
- 内存
- 磁盘位置
- Mac 地址的后三组数据(16 进制)
KVM虚拟机管理
一、virsh 管理虚拟机
下文中 vm-name
表示一个虚拟机的名称
1 列出正则运行中的虚拟机
virsh list
2 列出所有的虚拟机
virsh list --all
3 查看指定虚拟机的元数据信息
virsh dominfo vm-name
4 查看指定虚拟机的 IP 地址
virsh domifaddr vm-name
5 启动虚拟机
virsh start vm-name
6 正常关闭虚拟机
virsh shutdown vm-name
7 强制关闭虚拟机,相当于拔掉电源
virsh destroy vm-name
8 重启虚拟机
virsh reboot vm-name
9 从一个 xml 文件定义一个虚拟机
virsh define vmn.xml
vmn.xml
是一个 xml 文件路径名称
10 取消定义一个虚拟机
就是删除一台虚拟机,但是虚拟机的磁盘文件会保留
virsh undefine vm-name
二、给kvm虚拟机添加硬件
1 添加内存
首先确认虚拟机处于关闭状态
[root@localhost ~]# virsh shutdown vmneko
域 vmneko 被关闭
2 设置最大可分配内存
[root@localhost ~]# virsh setmaxmem vmneko 2G
3 查看虚拟机信息
[root@localhost ~]# virsh dominfo vmneko
Id: 2
名称: vmneko
UUID: afdf727f-1937-4e57-af1d-8c17634c4d49
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 20.8s
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
#virsh help setmem
–config 影响下一次引导
–live 影响运行的域
–current 影响当前域
4 调整内存的大小
之后就可以在虚拟机启动的情况下,给其动态的调整内存的大小(范围在最大内存容量内)
[root@localhost ~]# virsh start vmneko
域 vmneko 已开始
[root@localhost ~]# virsh dominfo vmneko
Id: 2
名称: vmneko
UUID: afdf727f-1937-4e57-af1d-8c17634c4d49
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 20.8s
最大内存: 2097152 KiB
使用的内存: 1048576 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
[root@localhost ~]# virsh setmem vmneko 2G
[root@localhost ~]# virsh dominfo vmneko
Id: 2
名称: vmneko
UUID: afdf727f-1937-4e57-af1d-8c17634c4d49
OS 类型: hvm
状态: running
CPU: 1
CPU 时间: 20.8s
最大内存: 2097152 KiB
使用的内存: 2097152 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
三、添加硬盘
1 创建一个虚拟硬盘
[root@localhost ~]# mkdir -p /vm-pool/centos7/
[root@localhost ~]# qemu-img create -f qcow2 /vm-pool/centos7/vmneko.qcow2 2G
2 编辑一个虚拟硬盘的 xml 文件模板
[root@localhost ~]# cat disk.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback' io='threads'/>
<source file='/vm-pool/centos7/vmneko.qcow2'/>
<target dev='vdb' bus='virtio'/>
</disk>
然后使用 attach-device
命令从XML文件添加
[root@localhost ~]# virsh attach-device vmneko disk.xml --persistent
成功附加设备
[root@localhost ~]# virsh domblklist vmneko
目标 源
------------------------------------------------
vda /home/kvm/Neko.qcow2
vdb /vm-pool/centos7/vmneko.qcow2
3 获取硬盘信息
[root@localhost ~]# virsh domblklist vmneko | grep '^vdb'
vdb /vm-pool/centos7/nmneko.qcow2
[root@localhost ~]# virsh domblklist vmneko | awk '/^vd/{print $1}'
vda
vdb
#!/usr/bin/bash
#此脚本用于获取下一个没有创建的硬盘
for i in {
a..z}
do
virsh domblklist vmneko | awk '/^vd/ {print $1}' | grep vd$i &> /dev/null
if [ $? -ne 0 ];then
disk_name="vd$i"
echo "vd$i"
break
fi
done
当前已有的虚拟机
[root@localhost ~]# virsh list --all | awk 'NR != 1 && NR !=2 {print $2}'
vmneko
vm1
4 取值
[root@localhost ~]# n=1G
[root@localhost ~]# echo ${n::-1}
1
[root@localhost ~]# n=${n::-1}
[root@localhost ~]# echo $n
1
[root@localhost ~]# echo $(( n * 1024 * 1024 ))
1048576
[root@localhost ~]# mem_size=$(( n * 1024 * 1024 ))
[root@localhost ~]# echo $mem_size
1048576
[root@localhost ~]# mem_size=$(( 2 * 1024 * 1024 ))
[root@localhost ~]# echo $mem_size
2097152
[root@localhost ~]# openssl rand -hex 3
a1b8ba
[root@localhost ~]# vm_name=`openssl rand -hex 3`
[root@localhost ~]# echo $vm_name
c6e826
[root@localhost ~]# echo $vm_name | sed -r 's/..\B/&:/g'
c6:e8:26
5 脚本
用于写的脚本,可参考,需要配合变量调取
[root@localhost lib]# cat gen-net.sh
# 此脚本用于生成并写入新的mac地址
add_net(){
read -p ">>:" vm_name
mac=$(openssl rand -hex 3 | sed -r 's/..\B/&:/g')
source ./network-mod.xml > network.xml
virsh attach-device ${vm_name} network.xml --persistent
virsh domiflist ${vm_name}
}
[root@localhost lib]# cat many-gen.sh
many_gen_vm(){
# 此函数实现了利用模板创建单个虚拟机
vm_name=$1
vm_mem_size=$2
vm_disk_path=/kvm/${vm_name}.qcow2
vm_uuid=$(uuidgen)
vm_mac=$(openssl rand -hex 3|sed 's/..\B/&:/g')
source ./centos7-mod.xml > ${vm_name}.xml
# 创建虚拟磁盘文件
# cp /path/to/centos7-mod.qcow2 $vm_disk_path
# virsh define ${vm_name}.xml
}
read -p "主机名称前缀:" s
read -p "输入创建的数量:" n
for i in $(seq 1 $n)
do
many_gen_vm ${s}${i}
done
命令自动补全
yum -y install bash-completion
yum group install "Development Tools" -y