1. 程式人生 > >雲端計算與虛擬機器kvm

雲端計算與虛擬機器kvm

什麼是雲端計算?

資源使用和交付模式,並不是技術,分為公有云,私有云,混合雲,依賴虛擬化技術,從而實現彈性擴充套件

雲端計算 iaas pass saas圖層

  • Iaas(基礎設施即服務Infrastructure as a Servic)
  • Paas(平臺即服務Platform-as-a-Service)
  • Saas(軟體即服務Software-as-a-Service)

 

KVM

KVM是開源軟體,全稱是kernel-based virtual machine(基於核心的虛擬機器)。

是x86架構且硬體支援虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。

它包含一個為處理器提供底層虛擬化 可載入的核心模組kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

KVM還需要一個經過修改的QEMU軟體(qemu-kvm),作為虛擬機器上層控制和介面。

KVM能在不改變linux或windows映象的情況下同時執行多個虛擬機器,(它的意思是多個虛擬機器使用同一映象)併為每一個虛擬機器配置個性化硬體環境(網絡卡、磁碟、圖形介面卡……)。

在主流的Linux核心,如2.6.20以上的核心均已包含了KVM核心

 

kvm安裝

1.是否支援虛擬化

因特爾 vmx amd svm
[[email protected]
~]# grep -E '(vmx|svm)' /proc/cpuinfo  

如果是vmware虛擬機器,請在配置cpu選擇intel VT-X/EPT或 AMD-V/RVI

如果輸出的資訊中有vmx,說明intel處理器支援完全虛擬化。如果顯示svm,說明是AMD的處理器支援虛擬化。

2.安裝kvm和其他虛擬化所需管理軟體包

[[email protected] ~]# yum install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install -y

軟體包名稱介紹:

Kvm:軟體包中含有KVM核心模組,它在預設linux核心中提供kvm管理程式

Libvirts:安裝虛擬機器管理工具,使用virsh等命令來管理和控制虛擬機器。

Bridge-utils:設定網路網絡卡橋接。

Virt-*:建立、克隆虛擬機器命令,以及圖形化管理工具virt-manager

Qemu-img:安裝qemu元件,使用qemu命令來建立磁碟等

3.載入kvm模組,檢視kvm模組是否被載入

[[email protected] ~]# lsmod | grep kvm
kvm_intel             170181  0 
kvm                   554609  1 kvm_intel
這裡最好reboot,在檢視一下,是否隨著系統重啟也是支援的

4.啟動libvirtd,管理虛擬機器和其他虛擬化功能

包括一個API庫,一個守護程式(libvirtd)和一個命令列工具(virsh),libvirt的主要目標是為各種虛擬化工具提供一套方便、可靠的程式設計介面,用一種單一的方式管理多種不同的虛擬化提供方式

[[email protected] ~]# systemctl enable libvirtd.service
[[email protected] ~]# systemctl start libvirtd.service 

5.準備想要虛擬出的作業系統,iso映象檔案 

[[email protected] ~]# dd if=/dev/cdrom of=/opt/CentOS-7.3.iso

6.建立映象檔案,虛擬機器使用的磁碟映象檔案,實際是個空間

[[email protected] ~]# qemu-img create -f raw /opt/CentOS-7.3-x86_64.raw 8G
Formatting '/opt/CentOS-7.3-x86_64.raw', fmt=raw size=8589934592 
[[email protected] ~]# ls -lh /opt/CentOS-7.3-x86_64.raw 
-rw-r--r--. 1 root root 8.0G Dec 16 08:02 /opt/CentOS-7.3-x86_64.raw
建立磁碟 -f 檔案格式 路徑 磁碟大小

7.建立虛擬機器,cpu預設是一個

[[email protected] ~]# virt-install --name CentOS-7.3-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.3.iso --disk path=/opt/CentOS-7.3-x86_64.raw 
--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.

8.檢視是否監聽5900埠

[[email protected] opt]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      20009/qemu-kvm 

9.vnc 下載客戶端,利用vnc連結,你就會看到安裝centos7.3的介面

https://www.realvnc.com/en/connect/download/viewer/macos/

10.如果按tab鍵,輸入net.ifnames=0 biosdevname=0 ,網絡卡就會是eth0

宿主機與虛擬機器網路問題

1.宿主機網路狀態

[[email protected] ~]# ps aux|grep kvm 
就是一個程序
[[email protected] ~]# cat /etc/libvirt/qemu/CentOS-7.3-x86_64-2.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit CentOS-7.3-x86_64-2
or other application using the libvirt API.
-->
這個檔案時自動生成的,如果你非要修改它,請virsh edit CentOS-7.3-x86_64-2

[[email protected] ~]# virsh edit CentOS-7.3-x86_64-2
與程序引數是一樣的,這是配置裡面的網路,預設會多出一個叫virbr0:虛擬網絡卡

    <interface type='network'>
      <mac address='52:54:00:89:e2:81'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

[[email protected] ~]# ifconfig
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:25:22:31  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

預設是nat網路,我們在下邊會說到如何改成橋接
[[email protected] ~]# iptables -t nat -vnL

2.虛擬機器網路狀態

1.啟動虛擬機器
[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     CentOS-7.3-x86_64              shut off
 -     CentOS-7.3-x86_64-2            shut off

[[email protected] ~]# virsh start  CentOS-7.3-x86_64-2
Domain CentOS-7.3-x86_64-2 started

2.vnc繼續連結,我們看下虛擬機器的網絡卡
[[email protected] ~]# ifconfig
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

3.上面的網絡卡virbr0都是192.168.122.1,為什麼會這樣,是預設dnsmasq起了個dhcp

[[email protected] ~]# ps aux|grep dns 
nobody    10384  0.0  0.0  53884  1112 ?        S    07:37   0:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root      10385  0.0  0.0  53856   564 ?        S    07:37   0:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root      31126  0.0  0.0 112708   976 pts/2    R+   08:40   0:00 grep --color=auto dns

[[email protected] ~]# cat /var/lib/libvirt/dnsmasq/default.conf 
##WARNING:  THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
##OVERWRITTEN AND LOST.  Changes to this configuration should be made using:
##    virsh net-edit default
## or other application using the libvirt API.
##
## dnsmasq conf file created by libvirt
strict-order
pid-file=/var/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.254
dhcp-no-override
dhcp-authoritative
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts

kvm管理

cpu熱修改只能加不能減,不能超過設定的最大數

配置cpu的2種方法
1. 通過啟動時候命令列指定
2. 通過xml指定,可以熱修改

通過xml檔案更改
1.將cpu調成最大四個,當前一個
[[email protected] ~]# virsh edit CentOS-7.3-x86_64-2
  <vcpu placement='auto' current='1'>4</vcpu>

2.重啟生效
[[email protected] ~]# virsh shutdown  CentOS-7.3-x86_64-2
Domain CentOS-7.3-x86_64-2 is being shutdown

[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     CentOS-7.3-x86_64-2              shut off
[[email protected] ~]# virsh start  CentOS-7.3-x86_64-2        
Domain CentOS-7.3-x86_64-2 started
 
3.登入到虛擬機器,檢視cpu個數

4.熱修改將cpu設定成2個
[[email protected] ~]# virsh setvcpus  CentOS-7.3-x86_64-2 2 --live

5.再次登陸到虛擬機器,檢視cpu個數
centos7是自動激活了cpu,如果不是的話需要echo 1 > [[email protected] ~]# cat /sys/devices/system/cpu/cpu0/online 
1

注意熱修改,只能加不能減,也不能超過設定的最大數
[[email protected] ~]# virsh setvcpus  CentOS-7.3-x86_64-2 1 --live
error: unsupported configuration: failed to find appropriate hotpluggable vcpus to reach the desired target vcpu count

記憶體,熱球技術能加能減,不能超過設定的最大數

1.修改xml
[[email protected] ~]# virsh edit CentOS-7.3-x86_64-2
  <memory unit='KiB'>1048576</memory> 最大記憶體
  <currentMemory unit='KiB'>1048576</currentMemory> 現記憶體

2.重啟生效
[[email protected] ~]# virsh shutdown  CentOS-7.3-x86_64-2
Domain CentOS-7.3-x86_64-2 is being shutdown

[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     CentOS-7.3-x86_64-2              shut off
[[email protected] ~]# virsh start  CentOS-7.3-x86_64-2        
Domain CentOS-7.3-x86_64-2 started


3.顯示虛擬機器當前記憶體
[[email protected] ~]# virsh qemu-monitor-command CentOS-7.3-x86_64-2 --hmp --cmd info balloon
balloon: actual=1024

4.修改虛擬機器記憶體,減少
[[email protected] ~]# virsh qemu-monitor-command CentOS-7.3-x86_64-2 --hmp --cmd balloon 600 

顯示虛擬機器當前記憶體
[[email protected] ~]# virsh qemu-monitor-command CentOS-7.3-x86_64-2 --hmp --cmd info balloon
balloon: actual=600

5.修改虛擬機器記憶體,新增
[[email protected] ~]# virsh qemu-monitor-command CentOS-7.3-x86_64-2 --hmp --cmd balloon 1024

顯示虛擬機器當前記憶體
[[email protected] ~]# virsh qemu-monitor-command CentOS-7.3-x86_64-2 --hmp --cmd info balloon
balloon: actual=1024

6.登入到虛擬機器檢視
注意,記憶體也不能超過最大記憶體  

磁碟

[[email protected] ~]# qemu-img --help
支援如下硬碟格式
Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug

1.全映象模式
raw,設定多大,就是多大。寫入塊,方便轉換成其他格式,效能最優

2.稀疏模式
qcow2,功能全,壓縮,快照,映象,更小儲存空間,設定多大,它也只是用多大
所有磁碟管理,可以使用qemu -img管理