kvm使用場景
1.公司測試環境/開發環境
測試開發環境可以使用配置低點的物理機就可以
2.公司生產環境
一般小公司沒有私有雲或容器團隊,運維人員可能就1-2個,然后公司也不舍得花錢買商業化的私有雲。
那么在這種情況下搞一台或多台高配的物理機里面裝多個虛擬機,可以設置基礎的虛擬機模板或根據不同業務設置不同的虛擬機模板,完成初步的環境標准,便於以后自動化運維。
KVM介紹
KVM(Kernel-based Virtual Machine)是一個linux的內核模塊,現在已經是內核自帶默認編譯,不需要單獨安裝。主要負責控制cpu和內存跟內核的交互調度等工作,工作在內核態。
KVM需要CPU中虛擬化功能的支持,只可在具有虛擬化支持的CPU上運行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。
KVM 虛擬化特性:
- 嵌入到Linux正式Kernel(提高兼容性)
- 代碼級資源調用(提高性能)
- 虛擬機就是一個進程(內存易於管理)
- 直接支持NUMA技術(提高擴展性)
- ---------- RedHat收購KVM -----------
- 保持開源發展模式 更好的商業支持及服務保障
虛擬機鏡像:
- 全鏡像模式-RAW
- 稀疏模式-QCOW2
KVM 管理工具:

Libvirt介紹
libvirt 提供一種虛擬機監控程序不可知的 API 來安全管理運行於主機上的客戶操作系統。libvirt 本身不是一種工具, 它是一種可以建立工具來管理客戶操作系統的 API。libvirt 本身構建於一種抽象的概念之上。它為受支持的虛擬機監控程序實現的常用功能提供通用的 API。libvirt 起初是專門為 Xen 設計的一種管理 API,后來被擴展為可支持多個虛擬機監控程序。

QEMU介紹
有兩種主要運作模式:
* User mode模擬模式,亦即是用戶模式。QEMU能啟動那些為不
同中央處理器編譯的Linux程序。而Wine及Dosemu是其主要目標。
* System mode模擬模式,亦即是系統模式。QEMU能模擬整個電腦系統,
包括中央處理器及其他周邊設備。它使得為跨平台編寫的程序進行測試及除錯工作變得容易。
其亦能用來在一部主機上虛擬數部不同虛擬電腦。
配置步驟
CentOS 7.2 系統最小化安裝
一,關閉Selinux,Firewalld,Networkmanager,配置dns服務器ip
[root@192-168-x-x img]# systemctl disable NetworkManager [root@192-168-x-x img]# systemctl disable firewalld [root@192-168-x-x img]# grep ^SELINUX /etc/selinux/config SELINUX=disabled [root@192-168-x-x network-scripts]# more /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8
二,配置阿里雲yum源
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
三,安裝系統常用軟件包
yum install net-tools vim screen mtr nc nmap tree lrzsz open-ssl-devel gcc glibc gcc-c* make zip dos2unix systat mysql lsof tcpdump ntpdate -y
四,物理機確認bios確認是否開啟虛擬機技術
虛擬化 Inter VT-x/EPT(內存虛擬化)或 AMD-V/RVI(V) 開啟
grep -E '(vmx|svm)' /proc/cpuinfo
五,安裝kvm相關的軟件包
kvm是內核虛擬機,需要加載內核模塊,libvirtd是用於管理kvm虛擬機
yum install -y qemu-kvm qemu-kvm-tools libvirt
六,啟動libvirtd
systemctl start libvirtd
systemctl enable libvirtd
七,安裝文件存放的目錄,qemu目錄是存放虛擬機xml文件
xml是libvirt 自動生成,xml里面的virtio是半虛擬化渠道,hvm是硬件虛擬機,還有一些其他的虛擬機配置信息
[root@192-168-x-x libvirt]# ls libvirt-admin.conf libvirt.conf libvirtd.conf lxc.conf nwfilter qemu qemu.conf qemu-lockd.conf storage virtlockd.conf virtlogd.conf [root@192-168-x-x libvirt]# pwd /etc/libvirt
八,啟動libvirtd后,會自動創建virbr0 橋接網卡 IP地址永遠都是192.168.122.1
可以用ifconfig命令查看
#ifconfig ...... virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:5c:f1:a5 txqueuelen 0 (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
九,查看dnsmasq進程,dns和dhcp功能 幫助分配虛擬機,dnsmasq無需配置啟動就行
[xiewenming@192-168-x-x ~]$ ps aux |grep dnsmasq nobody 2992 0.0 0.0 15544 152 ? S Mar14 0:36 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper root 2993 0.0 0.0 15516 4 ? S Mar14 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper xiewenm+ 35304 0.0 0.0 112652 960 pts/3 S+ 15:38 0:00 grep --color=auto dnsmasq
安裝virt-install,virt-edit,virt-manager,tigervnc-server和tigervnc相關的包,分別用於 安裝,編輯,管理,vnc服務來管理維護虛擬機
十,libvirt 管理kvm虛擬機
可以提供接口 virsh等 底層都是libvirt libvirtd服務停止 kvm正常,只是管理不了,virsh是用C寫的
yum install -y virt-install libguestfs-tools-c virt-manager tigervnc-server tigervnc
十一,配置網卡橋接方法一
使用命令重啟服務器或重啟網絡后配置丟失 (一般用於調試用)
brctl addbr br0 brctl addif br0 eth0 #(執行這一步會斷網,可以把所有步驟寫在一個腳本里) ip addr del dev eth0 192.168.x.x/24 ifconfig br1 192.168.x.x/24 up route add default gw 192.168.x.1
十二,配置網卡橋接方法二
橋接信息寫到配置文件里面,下面以橋架網卡1為例
[root@192-168-x-x network-scripts]# more ifcfg-br1 TYPE=Bridge BOOTPROTO=none DEVICE=br1 ONBOOT=yes IPADDR0=192.168.x.x PREFIX0=24 GATEWAY0=192.168.x.1 [root@192-168-x-x network-scripts]# more ifcfg-eth1 DEVICE=eth1 TYPE=Ethernet ONBOOT=yes BRIDGE=br1 [root@192-168-x-x network-scripts]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.x.10 0.0.0.0 UG 0 0 0 br1 169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 br0 169.254.0.0 0.0.0.0 255.255.0.0 U 1005 0 0 br1 192.168.x.0 0.0.0.0 255.255.255.0 U 0 0 0 br1 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
十三,安裝圖形桌面方便vnc管理
yum groupinstall "X Window System" yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts unlink /etc/systemd/system/default.target ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
十四,配置vncserver及密碼默認端口是從5901開始
[root@192-168-x-x network-scripts]# vncpasswd Password: #設置密碼 [root@192-168-x-x network-scripts]# vncserver New '192-168-x-x.xxx.com:1 (root)' desktop is 192-168-x-x.xxx.com:1 Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/192-168-x-x.xxx.com:1.log [root@192-168-x-x network-scripts]# netstat -an|grep 0.0.0.0:59 tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN
十五,vnc客戶端連接管理

十六,登陸以后,打開控制台使用virt-manager打開虛擬機管理界面

十七,進行虛擬機維護
可以關機,重啟,刪除,增加刪除配置,安裝系統等等 ,也可以支持安裝Windows系統虛擬機

十八,常用的維護命令
可以使用命令安裝虛擬機
virt-install創建虛擬機,不熟悉可以用virt-install --help查看幫助命令
virt-intall --virt-type kvm --name CentOS-7-x86_64 --ram 2048 --cdrom=/Data/CentOS-7-x86_64-DVD-1503-01.iso \
--disk path=/Data/CentOS-7-x86-_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
用VNC客戶端鏈接(60s內) 默認從5900開始,客戶端安裝截圖略....我一般都通過vnc然后再用virt-manager進行管理虛擬機
brctl show #查看橋接網卡信息 virsh edit vname.xml #修改xml文件 virsh shutdown vname #關閉虛擬機 virsh start vname #啟動虛擬機 virsh list --all #列出全部虛擬機 virsh dumpxml vname > vname.bak.xml #備份 qemu-img convert -f raw -O qcow2 vname test.qcow2 #鏡像文件格式轉換 qemu-img create -f raw node-192.168.3.30-centos-7.2.disk 50G #創建磁盤鏡像命令 virsh undefine node1.xml (刪除虛擬機域,生產環境不用此命令,非常危險) virt-clone -o centos7_mini -n centos7_mini15 --auto-clone #克隆mini,新克隆的為mini15 -o #原始機名字,必須為關閉或暫停狀態 -n #新客戶機的名稱 --auto-clone #從原始客戶機配置中自動生成克隆名稱和存儲路徑 --replace #不檢查命名沖突,覆蓋任何使用相同名稱的客戶機 -f #可以指定克隆后的主機鏡像放在指定目錄下 virsh autostart xxx #讓子機隨宿主機開機自動啟動 virsh autostart --disable xxx #解除自動啟動 virt-install #建立kvm虛擬機 virsh list #查看正在運行的KVM虛擬機 virsh start name #啟動KVM虛擬機 virsh shutdown name #正常關閉KVM虛擬機 virsh destroy name #強制關閉KVM虛擬機(類似於直接斷電) virsh suspend name #掛起KVM虛擬機 virsh resume name #恢復掛起的KVM虛擬機 virsh dumpxml name #查看KVM虛擬機配置文件,可以把輸出的內容定義到xml里,用來克隆遷移用。 virsh edit name #編輯KVM虛擬機的xml配置文件 virsh define /etc/libvirt/qemu/name.xml #定義注冊虛擬機,需要先查看xml文件對應的鏡像,img等路徑是否存在或修改指定路徑 virsh undefine name #徹底刪除KVM虛擬機,不可逆,如果想找回來,需要備份/etc/libvirt/qemu的xml文件
virsh attach-disk centos7_mini15 /home/disk_data/centos7_mini15.img vdb #分離虛擬機硬盤
virsh detach-disk centos7_mini15 /home/disk_data/centos7_mini15.img vdb#為虛擬機添加硬盤
遇到的一些問題
1.之前用CentOS7.3的時候windows虛擬機安裝的時候黑屏,一直沒有找到解決辦法,最后沒有辦法就降到CentOS7.2,所有建議生產環境不用使用CentOS7.3部分服務有兼容的不太好
2.磁盤滿了部分虛擬機進程被系統kill掉
3.沒有可用內存時,也會出現部分虛擬機被系統kill掉,嚴重的情況下物理服務器可能會自動重啟(所有在使用的過程中資源盡量不要超配)
4.有時可能會出現橋接的網卡和時間配置的網卡不是同一個 可以用ifconfig -a查看
