1.云计算概述

1.1传统数据中心面临的问题

       1.资源使用率低。传统数据中心CPU使用率普遍来说是低于15%的。

       2.资源分配不合理。

       3.自动化能力差。

       由于这三个原因,大量浪费资源,加大公司成本。

1.2没有云计算之前

    服务器基本上是

       1.IDC托管。

       2.IDC租用。

       3.虚拟主机。

       4.VPS(虚拟专用主机)

1.3什么是云计算

    云计算的解释:

       云计算是一种模式。

       云计算是通过网络来访问。

       弹性计算,按需付费。

       由于云计算的工作性质不同通常划分为私有云、公有云、混合云。

    私有云:

        基本上就可以是在自己使用设备完成一套云计算的场景,所有基础设施都是自己的。私有云对自己来说可控性很高,安全性很高。

    公有云:

        与私有云相反,一般常用于私有云的补充。

    混合云:

        公司有私有云和公有云。

blob.png

1.4云计算分层

blob.png

       蓝色字体的是运维需要完成的工作。


2.KVM实践

       kvm被Redhat收购了,从Redhat6之后内核默认支持的虚拟化技术就是kvm。kvm的社区比较活跃。

2.1KVM虚拟化特性

  • 嵌入到Linux正式Kernel(提高兼容性)。

  • 代码级资源调用(提高性能)。

  • 虚拟机就是一个进程(内存易于管理)。

  • 直接支持NUMA技术(提供高扩展性)。

        RedHat收购KVM

  • 保持开源发展模式。

  • 更好的商业支持及服务保障。

2.2测试环境

[root@kvm ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@kvm ~]# uname -a                
Linux kvm 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

       查看系统是否CPU是否支持虚拟化(vmx、svm)

[root@kvm ~]# egrep "svm|vmx" /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 rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid tsc_adjust

        如果出现如上内容,代表是支持虚拟化的。

2.3安装管理、虚拟化软件

[root@kvm ~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install -y
  • qemu-kvm:硬件虚拟化软件,支持异构。用户态的程序。

  • qemu-kvm-tools:工具包

  • virt-manager:

  • libvirt:用于管理kvm虚拟机

  • virt-install: virt-install是rpm包python-virtinst里的一个工具

2.4创建虚拟机

       创建虚拟机硬盘

[root@kvm ~]# qemu-img create -f raw /opt/CentOS-7.2-x86_64.raw 10G
Formatting '/opt/CentOS-7.2-x86_64.raw', fmt=raw size=10737418240 
[root@kvm ~]# ll -h /opt/
total 0
-rw-r--r--. 1 root root 10G Sep 19 02:05 CentOS-7.2-x86_64.raw
  • create:创建

  • -f raw:指定格式

  • /opt/CentOS-7.2-x86_64.raw:指定路径

  • 10G:磁盘大小

       查看kvm是装好,如果输出关于kvm版本的信息则已装入kvm模块

[root@kvm ~]# lsmod |grep kvm
kvm_intel             162153  0 
kvm                   525259  1 kvm_intel

       启动libvirtd服务


[root@kvm ~]# systemctl start libvirtd
[root@kvm ~]# systemctl enable libvirtd
[root@kvm ~]# ps -ef|grep libvirt|grep -v "grep"
root       1763      1  0 01:47 ?        00:00:00 /usr/sbin/libvirtd
nobody     3036      1  0 01:47 ?        00:00:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       3038   3036  0 01:47 ?        00:00:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

         在启动libvirt后会启动一个网桥

[root@kvm ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes
[root@kvm ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::20c:29ff:fecb:a989  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:cb:a9:89  txqueuelen 1000  (Ethernet)
        RX packets 1382  bytes 121923 (119.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 944  bytes 195650 (191.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 2  bytes 98 (98.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 98 (98.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 00:00:00:00:00:00  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 42 (42.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


    获取镜像的两种方法

        1.复制本身系统镜像。

        2.上传镜像系统到服务器。

        创建镜像

[root@kvm ~]# dd if=/dev/cdrom of=/opt/CentOS-7.2.iso
8456192+0 records in
8456192+0 records out
4329570304 bytes (4.3 GB) copied, 134.592 s, 32.2 MB/s
[root@kvm ~]# ll /opt/CentOS-7.2.iso -h
-rw-r--r--. 1 root root 4.1G Sep 19 02:18 /opt/CentOS-7.2.iso

       创建一个虚拟机

[root@kvm ~]# virt-install --name CentOS-7.2-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.2.iso --disk path=/opt/CentOS-7.2-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Creating domain...                                                                                 |    0 B  00:00:04     
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

       virt-install常用参数

  • -n --name:客户端虚拟机名称

  • -r --ram:客户端虚拟机分配的内存

  • -u --uuid:客户端UUID 默认不写时,系统会自动生成

  • --vcpus:客户端的vcpu个数

  • -v --hvm:全虚拟化

  • -p --paravirt:半虚拟化

  • -l --location=localdir:安装源,有本地、nfs、http、ftp几种,多用于ks网络安装

  • --vnc:使用vnc ,另有--vnclient=监听的IP  --vncport =VNC监听的端口

  • -c --cdrom:光驱 安装途径

  • --disk:使用不同选项作为磁盘使用安装介质

  • -w NETWORK, --network=NETWORK:连接客户机到主机网络 

  • -s --file-size:使用磁盘映像的大小 单位为GB

  • -f --file:作为磁盘映像使用的文件

  • --cpuset:设置哪个物理CPU能够被虚拟机使用

  • --os-type=OS_TYPE:针对一类操作系统优化虚拟机配置(例如:‘linux’,‘windows’)

  • --os-variant=OS_VARIANT:针对特定操作系统变体(例如’rhel6’, ’winxp’,'win2k3')进一步优化虚拟机配置

  • --host-device=HOSTDEV:附加一个物理主机设备到客户机。HOSTDEV是随着libvirt使用的一个节点设备名(具体设备如’virsh nodedev-list’的显示的结果)

  • --accelerate:KVM或KQEMU内核加速,这个选项是推荐最好加上。如果KVM和KQEMU都支持,KVM加速器优先使用。

  • -x EXTRA, --extra-args=EXTRA:当执行从"--location"选项指定位置的客户机安装时,附加内核命令行参数到安装程序

  • --nographics "virt-install" :将默认使用--vnc选项,使用nographics指定没有控制台被分配给客户机

       提前安装好的VNC客户端进行连接

       好了,接下来就是正常安装系统了。可以不用写端口,默认是5900。

       在安装的过程中可以查看进程,这个kvm只是宿主机的一个进程,是可以看到的。

[root@kvm ~]# ps -ef|grep kvm|grep -v "grep"
root        838      2  0 01:47 ?        00:00:00 [kvm-irqfd-clean]
qemu      20267      1 88 02:53 ?        00:18:28 /usr/libexec/qemu-kvm -name CentOS-7.2-x86_64 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu SandyBridge -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 66555a01-ae5c-4b69-9c0d-1cc6c46d2fe5 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-CentOS-7.2-x86_64/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-reboot -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -drive file=/opt/CentOS-7.2-x86_64.raw,if=none,id=drive-virtio-disk0,format=raw -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 -drive file=/opt/CentOS-7.2.iso,if=none,id=drive-ide0-0-0,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:e3:e3:a9,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-CentOS-7.2-x86_64/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
root      20276      2  0 02:53 ?        00:00:00 [kvm-pit/20267]

2.5命令管理虚拟机

       在创建虚拟机的时候,会给生成配置文件。

[root@kvm ~]# ll /etc/libvirt/qemu
total 4
-rw-------. 1 root root 3898 Sep 19 02:53 CentOS-7.2-x86_64.xml
drwx------. 3 root root   40 Sep 19 01:47 networks

       不要修改这个xml文件。如果想要编辑请用如下命令进行修改

virsh edit CentOS-7.2-x86_64

       管理虚拟机的软件libvirt,如果这个程序down了,暂时无法管理虚拟机,虚拟机不受影响。

       在最常用的libvirt的命令是virsh,如果要修改xml文件就是如下进行修改

virsh edit CentOS-7.2-x86_64

        如下边修改CPU热添加的方法

        原

<vcpu placement='static'>1</vcpu>

        修改后

<vcpu placement='auto' current="1">4</vcpu> #设置CPU为动态添加,最大数量为4个。
virsh setvcpus CentOS-7-x86_64 2 --live #设置CPU为两核。

        内存热添加

virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon #查看内存信息。
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512  #设置内存为512MB。