案例描述 1、了解虚拟化技术及KVM虚拟化技术相关知识点。 2、了解KVM组建的安装及利用KVM技术启动虚拟机。 3、完成以下知识和技能点: 知识点: ● 了解KVM虚拟化的使用坏境。 ● 了解KVM虚拟化的工作方式。 ● 了解KVM虚拟化的优势与特点。 技能点: ● 掌握KVM的安装环境配置。 ● 掌握KVM在CentOS 6.5上的安装方法和步骤。 ● 掌握KVM可视化管理工具的安装方法和步骤。 ● 掌握KVM远程连接软件的安装连接方法。
案例准备
规划节点 准备两台Linux操作系统,一台为Centos7,另一台为Centos6.5,规划节点见表1-1,表1-2。 IP主机名节点自行分配localhost单节点服务器表1-1
IP主机名节点自行分配localhost单节点服务器表1-2 2.基础环境准备 (1)IP地址配置 安装最小化CentOS 7.2操作系统,配置单节点IP地址,并使用远程终端工具进行连接,示例代码如下:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static //地址分配改为静态模式 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=d487d944-e79c-49a7-ad62-78d328d45760 DEVICE=eno16777736 ONBOOT=yes //设置系统启动时激活网卡 IPADDR=192.168.20.10 GATEWAY=192.168.20.2 PREFIX=24 [root@localhost ~]# systemctl restart network实验一 KVM介绍 1、认识虚拟化 (1)什么是虚拟化技术? 虚拟化(Virtualization)在计算机中是一个广义的术语,是将计算机的各类物理资源,比如网络、内存、存储等,加以抽象、转换后呈现给用户,使得用户以更好的方式来使用这些资源。如图1-1 虚拟化示意图。 (2)虚拟化的分类 虚拟化可分为桌面虚拟化、应用虚拟化、服务器虚拟化、网络虚拟化与存储虚拟化。 l桌面虚拟化:将原本在本地计算机上安装的桌面系统统一在后端数据中心进行部署和管理。用户可以通过任何设备在任何地点与任何时间访问自己的桌面系统环境。 l应用虚拟化:将原本安装在本地计算机操作系统上的应用程序统一运行于后台终端服务器上。 l服务器虚拟化:将服务器的物理资源等抽象成逻辑资源,形成一个动态管理的“资源池”,并创建合适的虚拟服务器。实现服务器的资源整合,提升资源利用率,最终更好的适应IT业务的变化。 2、认识KVM虚拟化 (1)什么是KVM虚拟化? Kernel-based Virtual machine(基于内核的虚拟机),是一个开源软件,基于内核的虚拟化技术,通过优化内核来使用虚拟技术,该内核模块使得 Linux 变成了一个Hypervisor,虚拟机使用 Linux 自身的调度器进行管理。 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。 (2)KVM虚拟化技术应用领域及未来发展 KVM虚拟化技术已经在业内受到了大力支持。两大巨头RedHat与IBM公司已经建立合作伙伴关系,展望未来这两家公司还为企业级虚拟项目管理器、IBM Tivoli以及IBM Director开发新的应用接口,已解决云计算技术的引入、数据中心自动化、虚拟存储及网络等各种问题。 目前KVM与VMware、HyperV等产品相比,处在一个比较优势的环境下,因为它汲取了其他虚拟化技术的优点,并且在推出时性能就非常的优异,受到一致好评,国内新一代公有云技术则全部采用KVM做为底层的虚拟化引擎,KVM已经成为开源解决方案的主流选择。 3、KVM虚拟机两种网络模式 (1)NAT的概念 NAT(Network Address Translation,网络地址转换)指在专用网内部的一些主机本来已经分配到了本地IP地址(即本地局域网IP),但现在又想和因特网上的主机通信时,可使用NAT方法解决两者之间的通信问题。 NAT的实现通信有三种: 静态转换(Static Nat) 静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。 动态转换(Dynamic Nat) 动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。 端口多路复用(OverLoad) 端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation)。采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对因特尔的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自网络的攻击。因此,目前网络中应用最多的就是端口多路复用方式。 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。 另外,这种通过使用少量的公有IP地址代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC1632中有对NAT的说明。 (2)NAT网络原理 众所周知,IPV4(Internet Protocol Version 4,网际协议版本4)的地址资源已近乎枯竭,而NAT使内网的多个主机可以共用一个IP地址接入网络,这样有助于节约IP地址资源,这也是NAT最主要的作用。 另外,通过NAT访问外部网络的内部主机,其内部IP对外是不可见的,这就隐藏了NAT内部网络拓扑结构和IP信息,也就能够避免内部主机受到外部网络的攻击。客观事物总是有正反两面性的,没有任何技术是十全十美的。NAT技术隐藏了内部主机细节从而提高了安全性,但是如果NAT内的主机作为Web或数据库服务器需要接受来自外部网络的主动连接,这时NAT就出现了局限性。不过,可以在拥有外网IP的主机上使用Iptables等工具实现端口映射,从而使外网对这个外网IP某个端口的访问被重新映射到NAT内网某个主机的相应端口上。 在QEMU-KVM中,默认使用IP伪装的方式去实现NAT,而不是使用SNAT (Source-NAT,源地址转换)或DNAT(Destination-NAT,目的地址转换)的方式。 在KVM中配置客户机的NAT网络方式,需要在宿主机中运行一个DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器给宿主机分配NAT内网的IP地址,可以使用DNSMASQ工具来实现。在KVM中,DHCP服务器为客户机提供服务的基本架构。 NAT方式是KVM安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。 检查当前的网络设置。
[root@localhost ~]# virsh net-list --all Name State Autostart Persistent -------------------------------------------------- default active yes yes注意:default是宿主机安装虚拟机支持模块的时候自动安装的。 (3)Bridge网络原理 在QEMU-KVM的网络使用中,Bridge(网桥)模式可以让客户机和宿主机共享一个物理网络设备连接网络,客户机有自己独立的IP地址,可以直接连接与宿主机一模一样的网络,客户机可以访问外部网络,外部网络也可以直接访问客户机(就像访问普通物理主机一样)。即使宿主机只有一个网卡设备,使用Bridge模式也可让多个客户机与宿主机共享网络设备,Bridge模式使用非常方便,应用也非常广泛。 桥接网络被用作把一个物理设备复制到一台虚拟机上。网桥多用作高级设置,特别是主机有多个网络接口的情况。网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据,如图1-2。
图1-2 (4)Bridge模式脚本编写 l qemu-ifup脚本的示例 在客户机启动网络前,执行的脚本配置的选项是script(默认路径为/etc/qemu-ifup),一般在该脚本中会去创建一个TAP设备并将其与Bridge绑定起来。其中$1是QEMU-KVM命令工具传递给脚本的参数,它是客户机使用的TAP设备名称(如tap0、tap1等,也或者是前面提及的ifname选项的值)。 另外,其中tunctl命令这一行是不需要的,因为qemu-bridge-helper程序已经创建好TAP设备,这里列出来只是为了再次确保,因为在一些版本较旧的QEMU-KVM中可能没有自动创建TAP设备。 QEMU-KVM安装和启动虚拟系统需要和外界通信,那么就是必须需要设置桥接,在这个脚本中实现了TAP的虚拟网卡设置由DOWN转为UP状态,如果想与外界通信,则可以手动执行生效。脚本中,需要把虚拟的TAP网卡桥接到br0的设备上与外界通信。
# vi /etc/qemu-ifup #!/bin/bash switch=br0 if [ -n $1 ];then ifconfig $1 up sleep 1 brctl addif $switch $1 exit 0 else echo "Error: No Specifed interface." exit 1 fil qemu-ifdown脚本示例 由于QEMU-KVM工具在客户机关闭时会去解除TAP设备与Bridge的绑定,也会自动删除已不再使用的TAP设备,所以qemu-ifdown这个脚本不是必需的,最好设置为downscript=no。如下代码所示,列出了一个qemu-ifdown脚本的示例,是为了说明清理Bridge模式网络环境的步骤,在QEMU-KVM没有自动处理时可以使用。
#vi /etc/qemu-ifdown #!/bin/bash switch=br0 if [ -n "$1" ]; then tunctl -d $1 brctl delif ${switch} $1 ip link set $1 down exit 0 else echo “Error: no interface specified” exit 1 fi1、环境配置 (1)开启虚拟化环境
图1-3 单击编辑虚拟机设置
图1-4单机处理器
图1-5 勾选虚拟化引擎三个选项
(2)配置本地yum源
[root@localhost ~]# mv /etc/yum.repos.d/* /media/ [root@localhost ~]# vi /etc/yum.repos.d/local.repo [centos] name=centos baseurl=file:///mnt gpgcheck=0 enabled=1 [root@localhost ~]# mount /dev/sr0 /mnt/ mount: /dev/sr0 is write-protected, mounting read-only [root@localhost ~]# yum clean all Loaded plugins: fastestmirror Cleaning repos: centos ......(后面省略)...... [root@localhost ~]# yum repolist Loaded plugins: fastestmirror centos | 3.6 kB 00:00:00 (1/2): centos/group_gz | 155 kB 00:00:00 (2/2): centos/primary_db | 2.8 MB 00:00:00 Determining fastest mirrors repo id repo name status centos centos 3,723 repolist: 3,723(3)临时关闭selinux及防火墙
[root@localhost ~]# setenforce 0 [root@localhost ~]# getenforce Permissive [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.(4)安装KVM组件
[root@localhost ~]# yum install qemu-kvm openssl libvirt -y(5)启动启动libvirtd服务
[root@localhost ~]# systemctl start libvirtd(6)将/usr/libexec/qemu-kvm链接为/usr/bin/qemu-kvm:
[root@localhost ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
(7)将cirros-0.3.3-x86_64-disk.img镜像与qemu-ifup-NAT脚本文件上传到系统/root目录下,并将脚本赋予执行权限
[root@localhost ~]# ls anaconda-ks.cfg cirros-0.3.3-x86_64-disk.img qemu-ifup-NAT.txt [root@localhost ~]# chmod +x qemu-ifup-NAT.txt [root@localhost ~]# ll total 12988 -rw-------. 1 root root 958 Apr 30 13:15 anaconda-ks.cfg -rw-r--r--. 1 root root 13287936 Oct 14 2019 cirros-0.3.3-x86_64-disk.img -rwxr-xr-x. 1 root root 2094 Oct 6 2019 qemu-ifup-NAT.txt2、启动虚拟机 (1)通过qemu-kvm命令启动KVM虚拟机,预计等待十分钟,用户名:cirros,密码是:cubswin:)
[root@localhost ~]# qemu-kvm -m 1024 -drive file=/root/cirros-0.3.3-x86_64-disk.img,if=virtio -net nic,model=virtio -net tap,script=/root/qemu-ifup-NAT.txt -nographic -vnc :1 图1-6(2)通过命令查看网卡信息、执行关机命令
图1-7