kvm虚拟机管理(3)
一、远程管理kvm虚拟机
(1)上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机。其实 virt-manager 也可以管理其他宿主机上的虚机。只需要简单的将宿主机添加进来,如下图:
接下来,我们就可以像管理本地虚机一样去管理远程宿主机上的虚机了
(2)有些情况下,有一个要配置的地方。 因为 KVM(准确说是 Libvirt)默认不接受远程管理,需要按下面的内容配置被管理宿主机中的两个文件:
1 | vim / etc / default / libvirt - bin |
start_libvirtd="yes" libvirtd_opts="-d -l"
1 | vim / etc / libvirt / libvirtd.conf |
listen_tls = 0 listen_tcp = 1 unix_sock_group = "libvirtd" unix_sock_ro_perms = "0777" unix_sock_rw_perms = "0770" auth_unix_ro = "none" auth_unix_rw = "none" auth_tcp = "none"
然后重启 Libvirtd 服务就可以远程管理了。
1 | systemctl restart libvirt - bin |
二、virsh命令行下管理虚拟机
virsh 既有命令行模式,也有交互模式,在命令行直接输入 virsh 就进入交互模式, virsh 后面跟命令参数,则是命令行模式;
(1)基础操作 --- 命令行下管理虚拟机
语法结构:
virsh <command> <domain-id> [OPTIONS]
help 列出命令下的所有参数
help list 列出 list 命令下的参数
帮助菜单
virsh list #列出当前宿主机上处于运行状态的虚拟机 virsh list --all #列出当前宿主机上所有的虚拟机 virsh start vm1 (虚拟机name) #开启某一台虚拟机 virsh shutdown vm1 (虚拟机name) #正常关闭一台虚拟机 virsh destroy vm1 #强制关闭某一台虚拟机 virsh autostart vm1 #开机自启动虚拟机vm1 virsh autostart --disable vm1 #关闭开机自启动 virsh edit vm1 #编辑某个虚拟机的配置文件 virsh pool-list #列出存储池
1 2 | 如:qemu - img create - f qcow2 - o size = 9G / export / kvm / test.qcow2 创建一个大小为 50G 的,格式为 qcow2 的磁盘镜像 |
查看磁盘信息:
1 | qemu - img info / export / kvm / test.qcow2 |
命令行下创建 && 管理虚拟机
Virt-install:命令行下创建虚拟机的命令,不过在它后面需要跟上很多的参数 --name: 虚拟机的名字。 --disk Location: 磁盘映像的位置。 --graphics : 怎样连接 VM ,通常是 SPICE 。 --vcpu : 虚拟 CPU 的数量。 --ram : 以兆字节计算的已分配内存大小。 --location : 指定安装源路径 --network : 指定虚拟网络,通常是 virbr0 或者自己设定的 br0
1 2 | 例如: virt - install - - name = test - - disk path = / export / kvm / test.qcow2 - - ram = 1024 - - vcpus = 1 - - graphics spice - - location = / export / download / software / iso / CentOS - 7.3 - x86_64 - DVD.iso - - network bridge = br0 |
注意:以此安装操作之后,会在桌面显示一个 virtviewer ,进入到图形安装步骤(比较鸡肋,很少用)
(2)除了这些简单命令,实际在 virsh 形式下还有更多的命令:
virsh help #打印帮助 virsh attach-device #从一个 XML 文件附加装置 virsh attach-disk #附加磁盘设备 virsh attach-interface #获得网络界面 virsh destroy #删除一个域 virsh detach-device #从一个 XML 文件分离设备 virsh detach-disk #分离磁盘设备 virsh detach-interface #分离网络界面 virsh define #从一个 XML 文件定义(但不开始)一个域 virsh undefine #删除一个虚机域
克隆一个虚拟机:(需关闭虚拟机)
1 | virt - clone - o vm2 - n vm4 - f / var / lib / libvirt / images / vm4.qcow2 |
如果没有virt-clone命令,需要下载virt-install.noarch
[ ~]# virt-clone --help usage: virt-clone --original [NAME] ... 复制一个虚拟机,需修改如 MAC 地址,名称等所有主机端唯一的配置。 虚拟机的内容并没有改变:virt-clone 不修改任何客户机系统内部的配置,它只复制磁盘和主机端的修改。所以像修改密码,修改静态 IP 地址等操作都在本工具复制范围内。如何修改此类型的配置,请参考 virt-sysprep(1)。 optional arguments: -h, --help show this help message and exit --version show program‘s version number and exit --connect URI 通过 libvirt URI 连接到虚拟机管理程序 通用选项: -o ORIGINAL_GUEST, --original ORIGINAL_GUEST 原始客户机名称;必须为关闭或者暂停状态。 --original-xml ORIGINAL_XML 将 XML 文件用于原始客户机。 --auto-clone 从原始客户机配置中自动生成克隆名称和存储路径。 -n NEW_NAME, --name NEW_NAME 新客户机的名称 --reflink 使用 btrfs COW 轻量副本 存储配置: -f NEW_DISKFILE, --file NEW_DISKFILE 为新客户机使用新的磁盘镜像文件 --force-copy TARGET 强制复制设备(例如:如果 ‘hdc‘是只读光驱设备,则使用 --force-copy=hdc) --nonsparse 不使用稀疏文件作为克隆的磁盘镜像 --preserve-data 不克隆存储,通过 --file参数指定的新磁盘镜像将保留不变 --nvram NEW_NVRAM New file to use as storage for nvram VARS 联网配置: -m NEW_MAC, --mac NEW_MAC 为克隆客户机生成新的固定 MAC地址。默认为随机生成 MAC。 其它选项: --replace 不检查命名冲突,覆盖任何使用相同名称的客户机。 --print-xml 打印生成的 XML 域,而不是创建客户机。 --check CHECK 启用或禁用验证检查。例如: --check path_in_use=off --check all=off -q, --quiet 抑制非错误输出 -d, --debug 输入故障排除信息 请参考 man 手册,以便了解示例和完整的选项语法。
拓展(冷迁移):也可以使用scp将一台宿主机里的虚拟机配置XML文件及磁盘qcow2文件拷贝到另一台宿主机上,来克隆虚拟机;使用virsh define定义配置文件,安装时如果报错,需要删除虚拟机,修改配置文件信息(disk文件位置和interface类型),再重新使用virsh define定义安装。
三、KVM通过virsh console连入虚拟机
新安装一台虚拟机后,是无法通过virsh console 命令连入虚拟机中的,这时我们需要开启虚拟机的console功能。
1、centos7以下,及其他情况
(1)添加ttyS0的许可,允许root登陆
1 | echo "ttyS0" >> / etc / securetty |
(2)编辑/etc/grub.conf中加入console=ttyS0
(3)编辑/etc/inittab,在最后一行加入内容:S0:12345:respawn:/sbin/agetty ttyS0 115200
(4)重启服务器
1 | reboot |
(5)宿主机上测试
1 | virsh console vm - name |
(6)退出console连接的虚拟机li
按 ctrl+] 组合键退出virsh console
2、对于centos7
(1)在虚机里运行
1 | grubby - - update - kernel = ALL - - args = "console=ttyS0" |
(2)重启虚机
1 | reboot |
四、KVM虚拟化透传
KVM 虚拟化需要处理器对虚拟化技术的支持,当我们需要进行虚拟机嵌套虚拟机时,我们需要让虚拟机中处理器对 VT 功能的支持达到透传的效果。
nested 虚拟机嵌套( kvm on kvm ):nested 技术,简单的说,就是在虚拟机上跑虚拟机。
KVM 虚拟机嵌套和 VMWare 原理不同, VMWare第一层是用的硬件虚拟化技术,第二层就是完全软件模拟出来的,所以 VMWare 只能做两层嵌套。 KVM 是将物理 CPU 的特性全部传给虚拟机,所有理论上可以嵌套 N 多层。
1、查看一层客户端是否支持 VT
1 | grep vmx / proc / cpuinfo |
查询未果,证明一层 KVM 的虚拟机,并未将宿主机处理器的 VT 功能成功透传。所以,没有对 VT功能的支持,我们不能实现在该层虚拟机中嵌套KVM 虚拟机。
2、在物理服务器上为嵌套虚拟机做准备 --- CPU 虚拟化透传
(1)# vim /etc/modprobe.d/kvm-nested.conf (新建配置文件)
# 在文件中添加下面语句(由于截图问题,实际不需要加空行)
1 | options kvm_intel nested = 1 |
# 在宿主机启用 kvm_intel 模块的嵌套虚拟化功能,并且使透传永久有效
(2)重新加载 kvm 模块
modprobe -r kvm_intel #-r参数:remove掉kvm_intel模块 modprobe kvm_intel #加载kvm_intel模块
(3)验证是否加载成功
1 | cat / sys / module / kvm_intel / parameters / nested |
Y ---“Y” 表示 cpu 虚拟化透传功能开启
3、编辑需要做虚拟化透传的虚拟机的配置文件
1 | virsh edit centos7 ( Virtual Machine Name ) |
1 | <cpu mode = ‘host-passthrough‘ / > |
修改之前:
修改之后:
host-passthrough 直接将物理 CPU 暴露给虚拟机使用,在虚拟机上完全可以看到的就是物理 CPU的型号
4、进入虚拟机中查看cpu是否透传成功
在一层虚拟机中查看cpu是否支持虚拟化