一、云计算概述;
传统数据中心存在的问题:
1.硬件资源利用率低;
2.多个程序进城之间隔离性差;
3.资源分配不合理,很容易导致“内存溢出”,“存储”的问题;
4.硬件、软件迁移,灵活性差;
5.自动化实施差;
云计算概述:Cloud Computer并不是一种技术,而是一种模式,基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源;
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互;
关键词:弹性计算、按需分配、快速扩展、管理成本低;
云计算的分类:
公有云:由运营商提供,提供金钱、弹性方式实现,适用于创业型企业;
私有云:在公司内部实现,内部使用,保证数据的安全性,更加可靠,适合大型企业;
混合云:由公有云主机和私有云主机构成,为了特定的需求,如双十一购物节;
云计算的分层:
IAAS:基础设施即服务,提供底层硬件设备;
PAAS:平台即服务,提供底层硬件设备和操作系统;
SAAS:软件即服务,提供所有的服务,只需要使用;
二、虚拟化概述;
概述:通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率;
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求;
也可以将很多硬件资源通过逻辑的虚拟化方式组合在一起,作为一个庞大的资源体系,作为云计算平台运行的基础;
虚拟化与云计算的关联:
桌面虚拟化概述:将计算机的终端系统(也称作桌面)进行虚拟化,以达到桌面使用的安全性和灵活性。客户端可以通过任何设备(瘦客户端),在任何地点,任何时间通过网络访问属于我们个人的桌面系统,可以节约企业的管理成本、资源(电费等);
虚拟化的架构:
原生架构:虚拟化产品之间建立在硬件上,没有中间的OS层;
典型应用:VMware vSphere、微软Hyper-V 2008 R2(免费)、微软Windows 2008 R2 Hyper-V Role、Citrix XenServer/XenDesktop、Xen(Linux,开源)、Qemm(Linux,开源)
寄局架构:硬件资源--OS系统层--虚拟化产品,必须通过以上三层去分隔;
典型应用:VMware Workstation(有Windows及Linux版本)、VMware Server(有Windows及Linux版本,免费)、VMware Player(有Windows及Linux版本,免费)、微软Virtual PC 2007
微软Virtual Server 2005 SP2(免费)、微软Windows Virtual PC(只能在Windows 7上运行,免费)、Parallels Workstation、UN Virtual Box(已被Oracle收购)
三、KVM虚拟化;
KVM概述:Kernel-based Virtual Machine用于Linux内核中的开源虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中;
四、案例:创建KVM虚拟机;
案例环境:
系统类型 |
IP地址 |
主机名 |
所需软件 |
内存 |
Centos 7.4 1708 64bit 添加一块40G硬盘 挂载到/opt下 |
192.168.100.101 |
kvm.linuxfan.cn |
qemu-kvm libvirt virt-install |
4G |
案例步骤:
- 打开主机的虚拟化支持:
- 检测主机的KVM内核模块:
- 安装KVM相关管理程序:
- 使用KVM虚拟化安装Centos 7虚拟机:
- 使用tightVNC程序链接kvm虚拟机进行安装:
- 将安装好的Centos 7虚拟机启动:
- 使用tightVNC工具链接虚拟机:
- 使用KVM虚拟化安装Win7虚拟机;
- 使用tightVNC程序链接kvm虚拟机进行安装:
- 将安装好的Win7虚拟机启动:
- 使用tightVNC工具链接虚拟机:
- 管理KVM相关配置文件将虚拟机进行改名;
- 打开主机的虚拟化支持:
真实物理主机在bios中的cpu设置下Virtual-T选项;
vmware虚拟机中的虚拟化支持,如下;
- 检测主机的KVM内核模块:
[root@kvm ~]# lsmod |grep kvm
kvm_intel 170200 0
kvm 566604 1 kvm_intel
irqbypass 13503 1 kvm
[root@kvm ~]# 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 ht 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 epb tpr_shadow vnmi ept vpid fsgsbase smep xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
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 ht 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 epb tpr_shadow vnmi ept vpid fsgsbase smep xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
- 安装KVM相关管理程序:
[root@kvm ~]# yum -y install qemu-kvm libvirt virt-install ##用户空间的工具、管理kvm虚拟机、安装kvm虚拟机
[root@kvm ~]# systemctl start libvirtd
[root@kvm ~]# systemctl enable libvirtd
[root@kvm ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:4f:c9:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:a8:7d:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:a8:7d:e2 brd ff:ff:ff:ff:ff:ff
- 使用KVM虚拟化安装Centos 7虚拟机:
[root@kvm ~]# ls /tmp/ ##准备镜像
CentOS-7-x86_64-DVD-1708.iso
[root@kvm ~]# qemu-img create -f raw /opt/Centos7.raw 10G ##准备虚拟机存放的镜像位置
Formatting '/opt/Centos7.raw', fmt=raw size=10737418240
[root@kvm ~]# virt-install --virt-type kvm --name Centos7 --ram 1024 --cdrom=/tmp/CentOS-7-x86_64-DVD-1708.iso --disk path=/opt/Centos7.raw --network network=default --graphics vnc,listen=192.168.100.101 -vncport=5900 --noautoconsole
开始安装......
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
注解:virt-install命令详解
https://blog.youkuaiyun.com/qq_36357820/article/details/76434771
https://www.cnblogs.com/nulige/p/8319838.html
[root@kvm ~]# netstat -utpln |grep 5900
tcp 0 0 192.168.100.101:5900 0.0.0.0:* LISTEN 1875/qemu-kvm
- 使用tightVNC程序链接kvm虚拟机进行安装:
- 将安装好的Centos 7虚拟机启动:
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- cport=5900 关闭
[root@kvm ~]# virsh start cport=5900
域 cport=5900 已开始
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 cport=5900 running
- 使用tightVNC工具链接虚拟机:
- 使用KVM虚拟化安装Win7虚拟机;
[root@kvm ~]# ls /tmp/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso
/tmp/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso
[root@kvm ~]# qemu-img create -f raw /opt/Win7.raw 10G
Formatting '/opt/Win7.raw', fmt=raw size=10737418240
[root@kvm ~]# virt-install --virt-type kvm --name Win7 --ram 1024 --cdrom=/tmp/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso --disk path=/opt/Win7.raw --network network=default --graphics vnc,listen=192.168.100.101 -vncport=5901 --noautoconsole
开始安装......
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
[root@kvm ~]# netstat -utpln|grep 5901
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 18345/qemu-kvm
- 使用tightVNC程序链接kvm虚拟机进行安装:
1
- 将安装好的Win 7虚拟机启动:
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 cport=5900 running
- cport=5901 关闭
[root@kvm ~]# virsh start cport=5901
域 cport=5901 已开始
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 cport=5900 running
4 cport=5901 running
[root@kvm ~]# netstat -utpln |grep 59
tcp 0 0 192.168.100.101:5900 0.0.0.0:* LISTEN 2008/qemu-kvm
tcp 0 0 192.168.100.101:5901 0.0.0.0:* LISTEN 2241/qemu-kvm
- 使用tightVNC工具链接虚拟机:
- 管理KVM相关配置文件将虚拟机进行改名;
[root@kvm ~]# virsh destroy cport=5900 ##强制管理虚拟机
域 cport=5900 被删除
[root@kvm ~]# virsh destroy cport=5901
域 cport=5901 被删除
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- cport=5900 关闭
- cport=5901 关闭
[root@kvm ~]# ls /etc/libvirt/qemu ##查看虚拟机的配置文件
cport=5900.xml cport=5901.xml networks
[root@kvm ~]# mv /etc/libvirt/qemu/cport\=5900.xml /etc/libvirt/qemu/Centos7.xml
[root@kvm ~]# mv /etc/libvirt/qemu/cport\=5901.xml /etc/libvirt/qemu/Win7.xml
[root@kvm ~]# vi /etc/libvirt/qemu/Centos7.xml
9 <name>Centos7</name>
10 删除第10行的UUID,删除后会自动生成
11 <memory unit='KiB'>1048576</memory>
12 <currentMemory unit='KiB'>1048576</currentMemory>
13 <vcpu placement='static'>1</vcpu>
14 <os>
94 <graphics type='vnc' port='5900' autoport='no' listen='192.168.100.101'>
95 <listen type='address' address='192.168.100.101'/>
[root@kvm ~]# vi /etc/libvirt/qemu/Win7.xml
9 <name>Win7</name>
10 删除第10行的UUID,删除后会自动生成
11 <memory unit='KiB'>1048576</memory>
12 <currentMemory unit='KiB'>1048576</currentMemory>
13 <vcpu placement='static'>1</vcpu>
14 <os>
94 <graphics type='vnc' port='5901' autoport='no' listen='192.168.100.101'>
95 <listen type='address' address='192.168.100.101'/>
[root@kvm ~]# systemctl restart libvirtd
[root@kvm ~]# virsh define /etc/libvirt/qemu/Centos7.xml ##重新定义虚拟机
定义域 Centos7(从 /etc/libvirt/qemu/Centos7.xml)
[root@kvm ~]# virsh define /etc/libvirt/qemu/Win7.xml ##重新定义虚拟机
定义域 Win7(从 /etc/libvirt/qemu/Win7.xml)
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 cport=5900 running
4 cport=5901 running
- Centos7 关闭
- Win7 关闭
[root@kvm ~]# virsh shutdown cport=5900 ##关闭后,等待其关闭
域 cport=5900 被关闭
[root@kvm ~]# virsh shutdown cport=5901
域 cport=5901 被关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- Centos7 关闭
- Win7 关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
5 Centos7 running
6 Win7 running
[root@kvm ~]# virsh start Centos7
域 Centos7 已开始
[root@kvm ~]# virsh start Win7
域 Win7 已开始
[root@kvm ~]# netstat -utpln |grep 59
tcp 0 0 192.168.100.101:5900 0.0.0.0:* LISTEN 3024/qemu-kvm
tcp 0 0 192.168.100.101:5901 0.0.0.0:* LISTEN 3075/qemu-kvm
五、案例:KVM镜像文件类型;
KVM镜像文件类型:
1.raw:
老牌的格式,赤裸裸,你随便dd一个file就模拟了一个raw格式的镜像。由于裸的彻底,性能上来说的话还是不错的。目前来看,KVM和XEN默认的格式好像还是这个格式。因为其原始,有很多原生的特性,例如直接挂载也是一件简单的事情。 裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的。
但是由于原生的裸格式,不支持snapshot也是很正常的。传说有朋友用版本管理软件对raw格式的文件做版本管理从而达到snapshot的能力,但目前来看牺牲一点灵活性,换取性能和便于管理还是不错的选择;
2.qcow2:
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,对于qcow2的格式,几点还是比较突出的,qcow2的snapshot,可以在镜像上做N多个快照:
3.vmdk:
VMware的格式,原本VMware就是做虚拟化起家,自己做了一个集群的VMDK的pool,做了自己的虚拟机镜像格式。又拉着一些公司搞了一个OVF的统一封包。从性能和功能上来说,vmdk应该算最出色的,由于vmdk结合了VMware的很多能力,目前来看,KVM和XEN使用这种格式的情况不是太多。但就VMware的Esxi来看,它的稳定性和各方面的能力还是可圈可点;
4.vdi:
SUN收购了VirtualBox,Oracle又收购了SUN,这么说呢,vdi也算虚拟化这方面的一朵奇葩,可惜的是入主的两家公司。SUN太专注于技术(可以说是IT技术最前端也不为过),Oracle又是开源杀手(mysql的没落)。单纯从能力上来说vdi在VirtualBox上的表现还是不错的。也是不错的workstation级别的产品。
[root@kvm ~]# ls /opt/
Centos7.raw Win7.raw
[root@kvm ~]# qemu-img convert -f raw -O qcow2 /opt/Centos7.raw /opt/Centos7.qcow2
[root@kvm ~]# ls /opt/
Centos7.qcow2 Centos7.raw Win7.raw
[root@kvm ~]# du -sh /opt/Centos7.*
2.1G /opt/Centos7.qcow2
1.3G /opt/Centos7.raw
[root@kvm ~]# sed -i 's/raw/qcow2/g' /etc/libvirt/qemu/Centos7.xml
[root@kvm ~]# grep qcow2 /etc/libvirt/qemu/Centos7.xml
<driver name='qemu' type='qcow2'/>
<source file='/opt/Centos7.qcow2'/>
<driver name='qemu' type='qcow2'/>
[root@kvm ~]# virsh define /etc/libvirt/qemu/Centos7.xml
定义域 Centos7(从 /etc/libvirt/qemu/Centos7.xml)
[root@kvm ~]# virsh edit Centos7 ##查看虚拟机其配置文件
[root@kvm ~]# virsh start Centos7
域 Centos7 已开始
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
7 Centos7 running
- Win7 关闭
按照同上方法将Win7虚拟机的镜像文件格式也更改成为Qcow2格式;
[root@kvm ~]# qemu-img convert -f raw -O qcow2 /opt/Win7.raw /opt/Win7.qcow2
[root@kvm ~]# ls /opt/
Centos7.qcow2 Centos7.raw Win7.qcow2 Win7.raw
[root@kvm ~]# du -sh /opt/Win7.*
7.5G /opt/Win7.qcow2
7.3G /opt/Win7.raw
[root@kvm ~]# vi /etc/libvirt/qemu/Win7.xml
46 <driver name='qemu' type='qcow2'/>
47 <source file='/opt/Win7.qcow2'/>
51 <disk type='file' device='cdrom'>
52 <driver name='qemu' type='raw'/> ##此处是镜像文件的类型,不能改
53 <source file='/tmp/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso'/>
54 <target dev='hdb' bus='ide'/>
[root@kvm ~]# virsh define /etc/libvirt/qemu/Win7.xml
定义域 Win7(从 /etc/libvirt/qemu/Win7.xml)
[root@kvm ~]# virsh start Win7
域 Win7 已开始
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
7 Centos7 running
8 Win7 running
六:案例:KVM虚拟机管理;
1.连接虚拟机:
连接Centos 7 的虚拟机,在安装好的虚拟机中敲:
连接Centos 6的虚拟机:
KVM节点测试连接创建好的centos 7虚拟机:
2.管理虚拟机:
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
10 Win7 running
11 Centos7 running
[root@kvm ~]# virsh shutdown Centos7 ##正常关闭
域 Centos7 被关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
10 Win7 running
11 Centos7 running
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
10 Win7 running
- Centos7 关闭
[root@kvm ~]# virsh destroy Win7 ##强制关闭
域 Win7 被删除
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- Centos7 关闭
- Win7 关闭
[root@kvm ~]# virsh start Win7
域 Win7 已开始
[root@kvm ~]# virsh start Centos7
域 Centos7 已开始
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
13 Centos7 running
[root@kvm ~]# virsh suspend Centos7 ##挂起虚拟机
域 Centos7 被挂起
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
13 Centos7 暂停
[root@kvm ~]# virsh resume Centos7 ##重新启动虚拟机
域 Centos7 被重新恢复
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
13 Centos7 running
[root@kvm ~]# virsh autostart Centos7 ##设置虚拟机随kvm节点一同启动
域 Centos7标记为自动开始
[root@kvm ~]# virsh autostart Win7
域 Win7标记为自动开始
3.虚拟机的快照和克隆:
[root@kvm ~]# virsh snapshot-create Centos7 ##创建快照
已生成域快照 1536560324
[root@kvm ~]# virsh snapshot-list Centos7 ##查看快照
名称 生成时间 状态
------------------------------------------------------------
1536560324 2018-09-10 14:18:44 +0800 running
[root@kvm ~]# virsh snapshot-revert Centos7 1536560324 ##恢复快照
[root@kvm ~]# virsh snapshot-delete Centos7 1536560324 ##删除快照
已删除域快照 1536560324
[root@kvm ~]# virsh snapshot-list Centos7
名称 生成时间 状态
------------------------------------------------------------
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
13 Centos7 running
[root@kvm ~]# virsh shutdown Centos7
域 Centos7 被关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
- Centos7 关闭
[root@kvm ~]# virt-clone -o Centos7 -n Centos7-1 -f /opt/Centos7.qcow2 ##克隆
正在分配 'Centos7.qcow2' | 10 GB 00:00:11
成功克隆 'Centos7-1'。
[root@kvm ~]# ls /opt/
Centos7-1.qcow2 Centos7.qcow2 Centos7.raw Win7.qcow2 Win7.raw
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
- Centos7-1 关闭
- Centos7 关闭
[root@kvm ~]# virsh start Centos7
域 Centos7 已开始
[root@kvm ~]# virsh start Centos7-1
域 Centos7-1 已开始
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
12 Win7 running
14 Centos7 running
15 Centos7-1 running
[root@kvm ~]# virsh shutdown Centos7-1
域 Centos7-1被关闭
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 Win7 running
7 Centos7 running
- Centos7-1 关闭
[root@kvm ~]# virsh undefine Centos7-1 ##删除虚拟机
域 Centos7-1 已经被取消定义
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 Win7 running
7 Centos7 running
[root@kvm ~]# rm -rf /opt/Centos7-1.qcow2
4.安装virt-manager图形管理kvm虚拟机的工具,进行管理;
[root@kvm ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@kvm ~]# yum -y install virt-manager --skip-broken
[root@kvm ~]# virt-manager
5.查看虚拟机中的文件:
[root@kvm ~]# yum -y install libguestfs-tools virt-top
[root@kvm ~]# virt-cat -d Centos7 /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Sep 10 07:34:05 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=0e7e77b5-0804-41cd-a7f8-63230aa2d260 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@kvm ~]# virsh destroy Centos7
域 Centos7 被删除
[root@kvm ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
6 Win7 running
- Centos7 关闭
[root@kvm ~]# mkdir /linuxfan
[root@kvm ~]# guestmount -d Centos7 -i /linuxfan/
[root@kvm ~]# ls /linuxfan/
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@kvm ~]# virt-edit -d Centos7 /etc/fstab
...