开始部署前了解下KVM-Qemu-Libvirt-Openstack之间的关系
Qemu
Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件,Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。
由于所有的指令都要从Qemu里面过一手,因而性能较差。
KVM
KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过/dev/kvm暴露接口,用户态程序可以通过ioctl函数来访问这个接口。
KVM内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完成的虚拟化技术,这就是下面要说的qemu-kvm。
qemu-kvm
Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化 内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。
Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。
libvirt
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。
Openstack
Openstack不会直接控制qemu-kvm,使用libvirt库去间接控制qemu-kvm。libvirt提供了跨VM平台的功能,它可以控制除了QEMU之外的模拟器,包括vmware, virtualbox, xen等等。
所以为了openstack的跨VM性,openstack只会用libvirt而不直接用qemu-kvm。libvirt还提供了一些高级的功能,例如pool/vol管理。
(一)检查硬件的相关
1,查看cpu型号,物理cpu颗数
代码语言:javascript复制[root@kvm-node1 ~]# cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq -c
1 Intel(R) Core(TM) i5-6260U CPU @ 1.80GHz
[root@kvm-node1 ~]# cat /proc/cpuinfo | grep physical | sort -n | uniq -c
1 address sizes : 43 bits physical, 48 bits virtual
1 physical id : 0 ###说明有一颗cpu,颗数是从0开始的
2,查看内存
代码语言:javascript复制[root@kvm-node1 ~]# dmidecode|grep -A5 "Memory Device"|grep Size | cut -d: -f2 | sort -n | uniq -c
127 No Module Installed
63 1 kB
1 8 GB
1 8192 MB ###接了一根内存,每根内存的大小为8G
(二)安装kvm
1,查看服务器是否支持虚拟化
代码语言:javascript复制[root@kvm-node1 ~]# grep -E -o 'vmx|svm' /proc/cpuinfo
vmx
确保BIOS里开启虚拟化功能,查看是否加载KVM模块
代码语言:javascript复制[root@kvm-node1 kvm]# lsmod |grep kvm
kvm_intel 188740 0
kvm 637289 1 kvm_intel
irqbypass 13503 1 kvm
如果没有加载,运行以下命令
代码语言:javascript复制[root@kvm-node1 kvm]# modprobe kvm
[root@kvm-node1 kvm]# modprobe kvm-intel
内核模块导出了一个名为/dev/kvm的设备,将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。
代码语言:javascript复制[root@kvm-node1 kvm]# ll /dev/kvm
crw-rw-rw- 1 root kvm 10, 232 May 16 00:11 /dev/kvm
2,安装kvm软件包
yum install -y qemu-kvm qemu-img qemu-kvm-tools virt-manager libvirt virt-install virt-viewer virt-v2v bridge-utils
kvm相关安装包及其作用
- qemu-kvm #kvm模块
- qemu-img #qemu组件,使用qemu命令来创建磁盘,启动虚拟机等
- qemu-kvm-tools #kvm调试工具
- libvirt #虚拟机管理工具,可以使用virsh命令行来管理虚拟机
- virt-manager #图形界面的管理虚拟机的工具
- virt-install #虚拟客户机的安装命令行工具
- virt-viewer #GUI连接程序,连接到已配置好的虚拟机
- virt-top #用于展示虚拟化客户机运行状态和资源使用率的工具
- bridge-utils #网络桥接支持工具
3,安装kvm虚拟化管理工具包
代码语言:javascript复制[root@kvm-node1 ~]# yum install libguestfs-tools -y
libguestfs是用于访问和修改虚拟机的磁盘镜像的一组工具集合。libguestfs提供了访问和编辑客户机中的文件、脚本化修改客户机中的信息、监控磁盘使用和空闲的统计信息、P2V、V2V、创建客户机、克隆客户机、备份磁盘内容、格式化磁盘、调整磁盘大小等非常丰富的功能。
libguestfs-tools提供了很多工具,可以分别对应不同的功能和使用场景,如:
- virt-ls用于列出虚拟机中的文件
- virt-copy-in用于往虚拟机中复制文件或目录
- virt-copy-out用于从虚拟机往外复制文件或目录
- virt-resize用于调整磁盘大小
- virt-cat用于显示虚拟机中的一个文件的内容
- virt-edit用于编辑虚拟机中的文件
- virt-df用于查看虚拟机中文件系统空间使用情况
4,查看虚拟机的相关环境
代码语言:javascript复制[root@kvm-node1 ~]systemctl restart libvirtd
[root@kvm-node1 ~]# virsh -c qemu:///system list
Id Name State
----------------------------------------------------
查看virsh的版本
代码语言:javascript复制[root@kvm-node1 ~]# virsh --version
4.5.0
查看 virt-install工具的版本
代码语言:javascript复制[root@kvm-node1 ~]# virt-install --version
1.5.0
查看qemu-kvm版本
代码语言:javascript复制[root@kvm-node1 ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
[root@kvm-node1 ~]# qemu-kvm -version
QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-175.el7_9.5), Copyright (c) 2003-2008 Fabrice Bellard
5,手动创建虚拟网桥
a,停用NetworkManager服务
代码语言:javascript复制#查看状态
systemctl status NetworkManager
#停止NetworkManager
systemctl stop NetworkManager
#关闭开机启动
systemctl disable NetworkManager
b,创建br0网桥
代码语言:javascript复制cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
IPADDR=192.168.10.225
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=114.114.114.114
代码语言:javascript复制cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.225
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=114.114.114.114
c,重启网络
代码语言:javascript复制systemctl restart network
d,查看网桥br0
代码语言:javascript复制ip add show
e,查看网桥
代码语言:javascript复制[root@kvm-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c293ae6c4 no ens33
virbr0 8000.525400eb3239 yes virbr0-nic
KVM可视化管理工具
virt-manager
Virtual Machine Manager (virt-manager) 是一个轻量级应用程序套件,形式为一个管理虚拟机的命令行或图形用户界面 (GUI)。除了提供对虚拟机的管理功能外,virt-manager 还通过一个嵌入式虚拟网络计算 (VNC) 客户端查看器为 Guest 虚拟机提供一个完整图形控制台。
virt-manager可以通过命令行和图形化两种形式。
如宿主机未安装图形化,可使用以下命令来安装图形化:
代码语言:javascript复制yum -y groupinstall "GNOME Desktop"
安装X Window System
代码语言:javascript复制yum groupinstall "X Window System" -y
默认系统启动默认还是命令行,使系统启动即为图形化窗口,需要执行下面的命令
代码语言:javascript复制ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
命令行模式
代码语言:javascript复制ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
图形界面模式
代码语言:javascript复制ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
重启系统,当系统再次启动,默认进入图形界面
CentOS7的命令行模式与图形界面相互切换
systemctl get-default //获取当前系统启动模式
更改模式命令
systemctl set-default graphical.target //由命令行模式更改为图形界面模式
systemctl set-default multi-user.target //由图形界面模式更改为命令行模式
重启验证是否正确
代码语言:javascript复制systemctl reboot