OpenStack入门篇(三)之KVM介绍及安装

  • 1.什么是虚拟化?

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢? 
这个主要是通过一个叫做 Hypervisor 的程序实现的。

  • 2.虚拟化的分类

①Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

②物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲: 
①号虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高; 
②号虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

  • 3.KVM的介绍

KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。 
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。

那 IO 的虚拟化,比如存储和网络设备由谁实现呢? 
这个就交给 Linux 内核和Qemu来实现。

说白了,作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

  • 4.Libvrit

Libvirt是KVM的管理工具,Libvirt包含3个组成部分:后台daemon程序libvirtd、API库、和命令行工具virsh
①libvirtd是服务程序,接收和处理API请求;
②API库是可以基于libvirt的开发工具,例如vir-manager
③virsh是KVM的命令行工具,比如在实际生产中,图形界面无法使用或无法通过vnc链接云主机时,可以通过virsh命令行进行操作。

  • 5.KVM的安装

(1)查看cpu是否支持虚拟化

[root@linux-node1 ~]# grep -E '(vmx|svm)' /proc/cpuinfo **
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase smep xsaveopt

(2)安装qemu-kvm(用户态管理工具),libvirt(命令行管理工具),virt-install(安装kvm工具)

[root@linux-node1 ~]#  yum install -y qemu-kvm libvirt
[root@linux-node1 ~]# yum install -y virt-install

(3)启动libvirtd服务,查看是否创建多出一个虚拟网卡:virbr0

[root@linux-node1 ~]# systemctl enable libvirtd
[root@linux-node1 ~]# systemctl start libvirtd
[root@linux-node1 ~]# ifconfig
ens33: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::20c:29ff:fe03:f3fe prefixlen scopeid 0x20<link>
ether :0c:::f3:fe txqueuelen (Ethernet)
RX packets bytes (315.1 MiB)
RX errors dropped overruns frame
TX packets bytes (8.7 MiB)
TX errors dropped overruns carrier collisions lo: flags=<UP,LOOPBACK,RUNNING> mtu
inet 127.0.0.1 netmask 255.0.0.0
inet6 :: prefixlen scopeid 0x10<host>
loop txqueuelen (Local Loopback)
RX packets bytes (16.0 KiB)
RX errors dropped overruns frame
TX packets bytes (16.0 KiB)
TX errors dropped overruns carrier collisions virbr0: flags=<UP,BROADCAST,MULTICAST> mtu
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether ::::fb: txqueuelen (Ethernet)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions

(4)创建虚拟机
安装kvm虚拟机的需求:硬盘,光盘镜像。
①创建的虚拟机内存大小不能超过物理机的大小;
②创建的虚拟机不需要每次都安装启动,只需要通过镜像进行启动。

[root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS--x86_64.raw 10G
Formatting '/opt/CentOS-7-x86_64.raw', fmt=raw size=
[root@linux-node1 ~]# virt-install --virt-type kvm --name CentOS--x86_64 --ram \
> --cdrom=/tmp/CentOS--x86_64-DVD-.iso --disk path=/opt/CentOS--x86_64.raw \
> --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

然后快速用TightVNS链接192.168.56.11,按"Tab"键,然后输入:net.ifnames=0 biosdevname=0,更改网卡名称为eth0.按"Enter"进入安装。如图:

OpenStack入门篇(三)之KVM介绍及安装

  • 6.总结思路

1.创建虚拟磁盘
2.通过virt-install安装一台虚拟机
3.通过TightVNC客户端工具连接到192.168.56.11:5900进行安装操作,默认qumu-kvm的端口是5900端口,端口从5900计算.

  • 7.遇到的问题总结

1.如果多次执行安装:
1.删除 rm -f /opt/CentOS-7-x86_64.raw
2.虚拟机的名称,需要指定--name参数进行修改

virt-install --virt-type kvm --name CentOS-dxxxx7-x86_64 --ram  \
--cdrom=/tmp/CentOS--x86_64-DVD-.iso --disk path=/opt/CentOS--x86_64.raw \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

2.如何删除KVM创建的桥接网卡:

brctl show
ifconfig br0 down
brctl delbr br0
systemctl restart network

3.如何在Centos 7 系统安装完毕修改网卡名为eth0:
(1)首先,先编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将里面的NAME项修改为eth0
继续,重命名该配置文件
(2)然后,禁用该可预测命名规则。对于这一点,你可以在启动时传递“net.ifnames=0 biosdevname=0 ”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0 biosdevname=0 ”到GRUBCMDLINELINUX变量来实现的。
(3)运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。
(4)reboot重启系统生效

上一篇:python☞自动发送邮件


下一篇:java.util.ConcurrentModificationException异常原因及解决方法