linux-运维进阶-30 KVM
KVM
概念解析
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM( Virtual Machine Monitor,虚拟机监控器)之一。
检测虚拟化功能
如下图,把这个勾勾上,另外,做实验用的Server处理器和内存调大一些,因为接下来咱们要在虚拟机Server里新建虚拟机,也就是所谓的“虚拟机里的虚拟机”。
加一张桥接模式的网卡
KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。
1 | [root@localhost ~]# cat /proc/cpuinfo | egrep 'vmx|svm' |
关掉防火墙,关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled,这里注意,改了重启后才生效。
1 | [root@localhost ~]# systemctl stop firewalld |
安装kvm环境
通过 yum 安装 kvm 基础包和管理工具
kvm相关安装包及其作用:
- qemu-kvm 主要的KVM程序包
- python-virtinst 创建虚拟机所需要的命令行工具和程序库
- virt-manager GUI虚拟机管理工具
- virt-top 虚拟机统计命令
- virt-viewer GUI连接程序,连接到已配置好的虚拟机
- libvirt C语言工具包,提供libvirt服务
- libvirt-client 为虚拟客户机提供的C语言工具包
- virt-install 基于libvirt服务的虚拟机创建命令
- bridge-utils 创建和管理桥接设备的工具
1 | 安装kvm基础包和管理工具 |
如下图,将上述yum命令再次执行,可以发现其他包都装好了,就python-virtinst最坑,我们后面再来安装它。
开启kvm服务,并且设置其开机自动启动
1 | [root@localhost ~]# systemctl restart libvirtd |
安装Linux虚拟机
安装前要设置环境语言为英文LANG=”en_US.UTF-8”,如果是中文的话某些版本可能会报错。CentOS 7 在这里修改 /etc/locale.conf。
1 | [root@localhost ~]# vim /etc/locale.conf |
准备安装目录和系统镜像
1 | [root@localhost ~]# mkdir /kvm/ |
下载centos镜像的网站:
https://www.centos.org/download/
下载个Minimal的就行,迷你版比较小,下载起来比较快嘛!我这里用的是1804版本的。
安装上传下载工具lrzsz,然后上传系统镜像到/kvm/iso目录中
1 | [root@localhost ~]# yum install lrzsz -y |
定义一个储存池,绑定目录,建立并激活存储池,后面会用这个存储池创建虚拟机
1 | [root@localhost iso]# virsh pool-define-as vmspool --type dir --target /kvm/vms |
现在来安装python-virtinst
1 | [root@localhost ~]# yum install git -y |
先安装ntp服务,下面虚拟机里安装虚拟机的时候才方便,不用再另外添加ntp服务器。
1 | yum install ntp -y |
接下来关机保存快照,以防下面实验手滑
1 | [root@localhost ~]# poweroff |
安装linux虚拟机,名字就叫centos7_01吧:
1 | [root@localhost ~]# virt-install --virt-type=kvm --name=centos7_01 --vcpus=2 --ram=512 --location=/kvm/iso/CentOS-7-x86_64-Minimal-1810.iso --disk path=/kvm/vms/centos7_01.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=100 --network bridge=virbr0 --graphics none --extra-args='console=ttyS0' --force |
命令说明:
- –name 指定虚拟机的名称
- –ram 指定分配给虚拟机的内存资源大小
- maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
- –vcpus 指定分配给虚拟机的CPU核心数量
- maxvcpus 指定可调节的最大CPU核心数量
- –os-type 指定虚拟机安装的操作系统类型
- –os-variant 指定系统的发行版本
- –location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
- –disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
- –bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
- –graphics 指定是否开启图形
- –console 定义终端的属性,target_type 则是定义终端的类型
- –extra-args 定义终端额外的参数
系统配置
带 [!] 基本都是要配置的,按照顺序往下配置,按对用的数字以此进行设置。配置一下时间时区,第三第四第五第六项会自动检测好,接下来配置一下第八项的密码即可。
此处配置截图太多,可参考这个教程里的截图:http://blog.51cto.com/zero01/2083896
详细步骤:
1.首先,一开始我们看到的是:
这里设置语言建议设置成英文的,不然后面玩虚拟机的时候会有乱码。
2.设置语言,按数字1,回车进入以下界面,例如我要选Chinese就按数字68并回车即可,回车之后会让你选择是中文简体还是繁体,也是按下相应的数字并回车即可:
3.配置完成之后又会再次回到配置界面,这次我们来设置时区:
4.设置成亚洲上海的时区即可。
5.设置系统安装盘:
选择标准分区
6.设置root用户的密码:
7.设置完root密码后,可以看到1到9所有选项都没有感叹号了,这表是要求你设置的选项你都设置完毕了,敲b开始安装系统:
8.安装完成之后就会停止在以下这个界面,按一下回车即可,这时就会重启安装完的系统:
重启成功之后就会入到登录界面,可以看到我这里是成功登录的,登录上去,将它改名为centos。
这时我们是处于一个虚拟终端的,因为安装了虚拟机,如果要退出来的话,应该说是切出来,按 Ctrl + ]
即可。然后再次登录,如下图:
1 | [root@localhost ~]# #这里按Ctrl + ],然后回车,就退出了虚拟终端 |
现在关机保存快照(给宿主机保存快照)
1 | [root@localhost ~]# poweroff |
使用以下命令可以列出当前有多少个虚拟机,以及其状态,但是无法列出关机状态的虚拟机:
1 | [root@localhost ~]# virsh list |
需要列出关机状态的虚拟机需要加多一个–all参数
查看所有虚拟机和进入控制台
1 | [root@localhost ~]# virsh list --all |
以下介绍一下管理虚拟机的一些常用命令:
1 | [root@localhost ~]# virsh console centos7_01 # 进入指定的虚拟机,进入的时候还需要按一下回车 |
以下实验很乱,可以不做
配置宿主机网络
1.KVM 虚拟机是基于 NAT 的网络配置;
2.只有同一宿主机的虚拟机之间可以互相访问,跨宿主机是不能访问;
3.虚拟机需要和宿主机配置成桥接模式,以便虚拟机可以在局域网内可见;
4.宿主机指的是我们用VMware Workstation Pro安装的虚拟机,它相对于虚拟机里面的虚拟机就是宿主。
5.我们之前virt install 的时候,有个参数是bridge=virbr0,用的桥接网卡已经指定为virbr0了。
Bridge模式配置
Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。桥接网络(也叫 物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。
1 | [root@localhost ~]# yum install -y net-tools #装了网络工具才能用命令:ifconfig |
修改宿主机物理网卡配置(UUID不用改,它是设备标识号)
1 | [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
修改宿主机网桥配置(宿主机里面的虚拟机与宿主机是桥接关系,我的ens33网卡之前是192.168.141.72,这里将virbr0改为这个ip之后,ens33网卡就没有ip了,重启网络后Xshell也会断开,接下来在vmware workstation里继续实验)
1 | [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-virbr0 |
两个网卡都修改完成后重启网络
1 |
|
可以看到ens33网卡已经没有ip了,也可以看到virbr0的接口变成ens33了
进入虚拟机centos7_01测试(如果它关机了的话,virsh start centos7_01 # 启动虚拟机)
1 | [root@localhost ~]# virsh console centos7_01 |
如果之前装系统选的是中文简体,这里改回英文,重启虚拟机,注意宿主机不用重启。
1 | [root@localhost ~]# vim /etc/locale.conf |
配置宿主机网络-NAT模式
NAT(Network Address Translation网络地址翻译),NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。几个虚拟机管理模块产生的接口关系如下图:
从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。
virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:
1 | [root@localhost ~] brctl show |
同时,虚拟机支持模块会自动修改iptables规则,通过命令可以查看:
1 | [root@localhost ~] iptables -t nat -L -nv |
创建名为management的NAT网络,vi /usr/share/libvirt/networks/management.xml
1 | <network> |
启用新建的NAT网络
1 | [root@localhost ~] virsh net-define /usr/share/libvirt/networks/management.xml |
安装windows虚拟机
1 | [root@localhost vms]# virt-install -n windowsxp -r 512 --disk /kvm/vms/winxp.img,format=qcow2,size=5 --network bridge=virbr1 --os-type=windows --os-variant=winxp --cdrom /kvm/iso/winxp.iso --vnc --vncport=5900 --vnclisten=0.0.0.0 |
windows用vnc远程屏幕
克隆虚拟机
- virt-clone 参数介绍
- –version 查看版本。
- -h,–help 查看帮助信息。
- –connect=URI 连接到虚拟机管理程序 libvirt 的URI。
- -o 原始虚拟机名称 原始虚拟机名称,必须为关闭或者暂停状态。
- -n 新虚拟机名称 –name 新虚拟机名称。
- –auto-clone 从原来的虚拟机配置自动生成克隆名称和存储路径。
- -u NEW_UUID, –uuid=NEW_UUID 克隆虚拟机的新的UUID,默认值是一个随机生成的
- UUID。
- -m NEW_MAC, –mac=NEW_MAC 设置一个新的mac地址,默认为随机生成 MAC。
- -f NEW_DISKFILE, –file=NEW_DISKFILE 为新客户机使用新的磁盘镜像文件地址。
- –force-copy=TARGET 强制复制设备。
- –nonsparse 不使用稀疏文件复制磁盘映像。
1 | # 暂停原始虚拟机 |
通过镜像创建虚拟机
创建虚拟机镜像文件
1 | # 复制第一次安装的干净系统镜像,作为基础镜像文件, |
创建虚拟机配置文件
1 | # 复制第一次安装的干净系统镜像,作为基础配置文件。 |
主要是修改虚拟机文件名,UUID,镜像地址和网卡地址,其中 UUID 在 Linux 下可以使用 uuidgen 命令生成
1 | <domain type='kvm'> |
1 | [root@localhost ~] virsh define /kvm/vms/centos7_05.xml |
挂载磁盘
创建镜像文件
1 | [root@localhost ~] qemu-img create /kvm/vms/centos7_01_1.img 5G |
创建普通的qcow2格式镜像文件
1 | # 创建 centos7_01_1 所需的磁盘 |
挂载方法:
1 | [root@localhost ~] virsh attach-disk centos7_05 /kvm/vms/centos7_05_1.qcow2 vdb --cache none |
常用命令说明
virt-install
常用参数说明1
1 | –name指定虚拟机名称 |
virt-install
常用参数说明2
1 | --name 指定虚拟机名称 |
virsh
基础命令
1 | virsh list # 查看在运行的虚拟机 |
错误解决
如果出现以下字符串使用 CTRL+Shift+5或者CTRL+Shift+]
1 | console test |
彻底删除一个虚拟机(以centos7_01为例)
1 | [root@localhost ~]# virsh |
本篇到此结束。