安裝KVM并創(chuàng)建虛擬機及基本使用方式
#環(huán)境說明:Centos7
環(huán)境準備
CPU開啟虛擬化,給宿主機的CPU和內存分配足夠多的配置
安裝KVM
1.安裝相關軟件包
yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
軟件包簡介:
- qemu-kvm: 為kvm提供底層仿真支持
- libvirt: 使用最多的KVM虛擬化管理工具和應用程序接口,即通過libvirt調用KVM創(chuàng)建虛擬機, libvirt是KVM通用的訪問API,其不但能管理KVM,還能管理VMware、Xen、Hyper-V、 virtualBox等虛擬化方案
- virt-manager: 圖形界面管理工具,其底層也是調用libvirt API來完成對虛擬機的操作,包括虛擬機的 創(chuàng)建、刪除、啟動、停止以及一些簡單的監(jiān)控功能等
- virt-install: 虛擬機命令行安裝工具
- virt-viewer: 通過 VNC 和 SPICE 協(xié)議顯示虛擬機器圖形控制臺的最小工具。該工具在其同名軟件包 中:virtviewer
2.啟動服務
systemctl start --now libvirtd
創(chuàng)建虛擬機
下面介紹三種創(chuàng)建虛擬機的方法
在創(chuàng)建之前需要在宿主機上先創(chuàng)建一個存放系統(tǒng)鏡像的目錄,然后上傳至此目錄下
mkidr -p /data/isos
1.使用virt-manager圖形化界面進行創(chuàng)建
#打開圖形化需要下載Xmanager,并在Xshell開啟下面功能:
#圖形化界面如果亂碼,修改語言為英文就能解決
輸入virt-manager命令打開圖形化界面
基于ISO鏡像文件創(chuàng)建
瀏覽
選擇鏡像
設置虛擬機內存
設置磁盤大小
后面按照安裝Centos7系統(tǒng)時進行配置即可
2.使用virt-install創(chuàng)建虛擬機(需要手動安裝系統(tǒng))
創(chuàng)建前,需要先利用qume-img命令創(chuàng)建虛擬磁盤,如下:
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20G
然后使用下面命令創(chuàng)建虛擬機:
virt-install --virt-type kvm --name centos7 --ram 1024 --vcpus 2 \ --cdrom=/data/isos/CentOS-7-x86_64-Minimal-2009.iso --disk \ path=/var/lib/libvirt/images/centos7.qcow2 --network=default --graphics \ vnc,listen=0.0.0.0 --noautoconsole --os-variant=centos7.0
選項解析如下:
- --virt-type:指定要使用的虛擬機監(jiān)控程序名稱(kvm, qemu, xen)
- --name:指定kvm虛擬機的名稱
- --ram:指定kvm虛擬機的內存大小
- --vcpus:指定kvm虛擬機的CPU核數(shù)
- --cdrom:指定ISO鏡像文件所在路徑
- --disk:指定虛擬磁盤所在路徑
- --network:指定kvm虛擬機的網(wǎng)絡模式,default為NAT模式;橋接模式為--bridge="網(wǎng)卡"
- --graphics:是否使用vnc,none為否
- --noautoconsole:宿主機不自動嘗試連接kvm虛擬機
- --os-variant:指定要安裝的系統(tǒng)版本
vnc工具
kvm默認網(wǎng)絡模式是NAT,宿主機會充當路由器,為內部的kvm虛擬機做端口映射。如果開啟了vnc連接功能,kvm會為每個kvm虛擬機開啟一個連接端口??梢栽L問宿主機的設備,就可以使使用vnc工具來連接kvm虛擬機
下面是宿主機為kvm虛擬機開啟的vnc端口:
查看啟動的虛擬機:
3.配合kickstart實現(xiàn)自動化部署kvm虛擬機(無須手動安裝系統(tǒng))
在創(chuàng)建前還是需要先創(chuàng)建虛擬磁盤,如下:
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20G
編寫應答文件:
#需要自行創(chuàng)建
vim /root/ks.cfg
#platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $6$Dx1M9/RlV5sB0KJv$19AdCxXsCbBnXSrUbYWhHQvKmtgCd0stJSHb3NrMQXZj.OpZWcNGzOROn/tg6fgxU3HYVptC35dgMcg8rpY.61 # 系統(tǒng)語言 #lang zh_CN.UTF-8 lang en_US # System authorization information auth --useshadow --passalgo=sha512 # Use CDROM installation media #cdrom # Use text mode install # 使用字符界面安裝操作系統(tǒng) text # Do not configure the X Window System # 不配置圖形界面系統(tǒng) skipx # SELinux configuration selinux --disabled # Firewall configuration firewall --disabled # 設置動態(tài)獲取 IP network --bootproto=dhcp --device=eth0 --onboot=on #network --hostname=HOSNAME # 設置靜態(tài) IP # network --bootproto=static --device=eth0 --gateway=192.168.122.1 --ip=192.168.122.100 --nameserver=192.168.122.1 --netmask=255.255.255.0 --activate # 系統(tǒng)安裝完成后 重啟系統(tǒng) #halt reboot # System timezone 系統(tǒng)時區(qū) timezone Asia/Shanghai # System services 系統(tǒng)啟動時候自動啟動的服務 services --enable="chronyd" # System bootloader configuration #系統(tǒng)啟動引導方式 vda 是kvm 虛擬機時候的第塊磁盤名稱 bootloader --location=mbr --boot-drive=vda # 清除主引導記錄 zerombr # 刪除原來的分區(qū)和磁盤標簽 clearpart --all --initlabel # 磁盤分區(qū)信息,這里采用的是 lvm 自動分區(qū) autopart --type=lvm # 下面是自定義分區(qū) #part /boot --fstype="xfs" --ondisk=vda --size=200 #part / --fstype="xfs" --ondisk=vda --size=10040 #part /var --fstype="xfs" --ondisk=vda --size=2048 #part /home --fstype="xfs" --ondisk=vda --size=2048 # 安裝軟件 %packages @^minimal @core chrony %end # 禁用 kdump %addon com_redhat_kdump --disable --reserve-mb='auto' %end # 安裝系統(tǒng)完成后執(zhí)行的命令腳本 #%post --interpreter=/bin/bash #yum install -y epel-release bash-completion vim-enhanced wget #yum group install "Development Tools" -y #%end # 用戶密碼策略 %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end
#上文件中rootpw --iscrypted指定的為root賬戶的密碼,如過想修改為其它密碼可以用下面命令生成加密字符串,將其替掉即可:
python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
運行下面命令創(chuàng)建虛擬機:
virt-install -v \ --arch x86_64 --virt-type kvm \ --name centos7 \ --memory 1024 \ --vcpus 2 \ --os-type linux \ --location /data/isos/CentOS-7-x86_64-Minimal-2009.iso \ --network default \ --graphics vnc,listen=0.0.0.0 \ --os-variant centos7.0 \ --initrd-inject "/root/ks.cfg" \ --extra-args "ks=file:/ks.cfg \ console=tty0 console=ttyS0,115200n8 \ hostname=centos7" \ --disk /var/lib/libvirt/images/centos7.qcow2,cache=writeback,io=threads,bus=virtio
選項解析如下:
location
:指定安裝源,這里用于指定ISO鏡像文件路徑os-type
:操作系統(tǒng)類型initrd-inject
:指定ks.cfg文件路徑extra-args
:根據(jù)location指定的方式安裝系統(tǒng)時,用于給內核傳遞額外的選項
安裝完后輸入賬戶密碼即可登錄kvm虛擬機:
- 賬戶:root
- 密碼:123.com
- Ctrl+}退出
克隆現(xiàn)有的虛擬機
virt-clone -o centos7 -f /var/lib/libvirt/images/centos7.qcow2 -n centos7-2
選項解析:
-o
:指定已存在的虛擬機名稱-f
: 指定新虛擬機磁盤文件路徑-n
:指定新虛擬機的名稱
磁盤快照管理
qemu-img管理磁盤快照
創(chuàng)建快照
qemu-img snapshot -c centos7-snapshot1 /var/lib/libvirt/images/centos7.qcow2
選項解析:
-c:指定快照名稱
查看快照
qemu-img snapshot -l /var/lib/libvirt/images/centos7.qcow2
查看快照的詳細信息
qemu-img info /var/lib/libvirt/images/centos7.qcow2
恢復快照
#需要關機后進行
qemu-img snapshot -a centos7-snapshot /var/lib/libvirt/images/centos7.qcow2
選項解析:
-a:指定需要恢復的快照名稱
刪除快照
#需要關機后進行
qemu-img snapshot -d centos7-snapshot /var/lib/libvirt/images/centos7.qcow2
選項解析:
-d:指定需要刪除的快照名稱
virsh管理虛擬機快照
創(chuàng)建快照
virsh snapshot-create centos7
查看快照
virsh snapshot-list centos7
恢復快照
#無須關機
virsh snapshot-revert centos7 --snapshotname 1600593611 --running
選項解析:
snapshotname
:先查看快照確認快照的名稱,是一段數(shù)字,在--snapshotname后跟上快照名稱running
:恢復后,將狀態(tài)更改為正在運行
刪除快照
virsh snapshot-delete centos7 --snapshotname 1600593611
網(wǎng)絡管理
配置虛擬機和宿主機為橋接網(wǎng)絡,實現(xiàn)網(wǎng)絡互通并用Xshell連接
1)配置宿主機的橋接網(wǎng)絡
修改宿主機網(wǎng)卡文件為以下,模式為空,NM_CONTROLLED=no,意思為此網(wǎng)絡不受NetworkManager控制,網(wǎng)橋名為br0:
BOOTPROTO=none NAME=ens32 DEVICE=ens32 ONBOOT=yes NM_CONTRLLED=no BRIDGE=br0
創(chuàng)建并編寫br0網(wǎng)卡文件為一下, 模式為靜態(tài),類型是網(wǎng)橋,不受NM控制,定義IP:
BOOTPROTO=static TYPE=Bridge NAME=br0 DEVICE=br0 ONBOOT=yes NM_CONTRLLED=no IPADDR=10.0.0.200 PREFIX=24 NETMASK=255.255.255.0 GATEWAY=10.0.0.0.2 DNS=202.106.0.20
關閉NetworkManager:
systemctl stop NetworkManager systemctl disable NetworkManager
重啟網(wǎng)絡服務:
systemctl restart network
使用brctl show命令查看虛擬設備情況,沒有的話,安裝名為bridge-utils的包即可:
[root@centos7-temp ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c291e1dd4 yes ens32 virbr0 8000.5254006c683e yes virbr0-nic vnet0
#由上可見,br0設備,綁定了ens32網(wǎng)卡成功,stp enabled為no,可以執(zhí)行brctl stp br0 on打開
使用route命令查看路由情況:
[root@centos7-temp ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 br0
#由上可見,所有地址,網(wǎng)關為10.0.0.2,通過br0,進行通信
2)配置虛擬機橋接網(wǎng)絡
修改/etc/qemu-kvm/bridge.conf文件:
allow virbr0 #加上下面一行 allow br0
將虛擬機關機:
virsh shutdown <name>
查看啟動的虛擬機:
virsh list
修改虛擬機配置文件中網(wǎng)絡部分兩處:
vim /etc/libvirt/qemu/centos7.xml
修改前如下:
修改為:
啟動虛擬機:
virsh start <name>
使用virt-manager打開圖形化界面將網(wǎng)卡修改橋接網(wǎng)卡:
修改虛擬機網(wǎng)絡配置文件:
#加上帶注釋的行即可
vi /etc/sysconfig/network-scripts/ifcfg-eth0
NAME="eth0" HWADDR="52:54:00:38:8D:43" ONBOOT="yes" NETBOOT="yes" UUID="50682a96-3672-42ac-8469-2c2f20ffde5a" IPV6INIT="yes" BOOTPROTO="static" #設置靜態(tài)IP IPADDR=10.0.0.201 #選擇和宿主機在同一個網(wǎng)段的IP NETMASK=255.255.255.0 #與宿主機同網(wǎng)段 GATEWAY=10.0.0.2 #與宿主機同網(wǎng)關 DNS=202.106.0.20 #與宿主機同DNS TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no"
在虛擬機中關閉NetworkManager:
systemctl stop NetworkManager
重啟網(wǎng)絡服務:
systemctl restart network
3)驗證
在宿主機上ping虛擬機的地址,驗證網(wǎng)絡是否能通信:
在虛擬機上ping外網(wǎng)地址,驗證是否能上外網(wǎng):
通過Xshell終端工具連接虛擬機:
virsh常用命令:
- 查看當前啟動的虛擬機: virsh list
- 查看所有虛擬機:virsh list --all
- 啟動虛擬機:virsh start <name>
- 正常關機:virsh shutdown <name>
- 強制關機::virsh destroy <name>
- 暫停虛擬機::virsh suspend <name>
- 恢復虛擬機:virsh resume <name>
- 設置虛擬機隨宿主機啟動而自啟動:virsh autostart <name>
- 禁用虛擬機隨宿主機啟動而自啟動:virsh autostart <name> --distable
- 刪除虛擬機配置,但不刪除磁盤文件:virsh undefine <name>
- 刪除虛擬機包括磁盤文件:virsh undefine <name> --remove-all-storage
- 查看虛擬機網(wǎng)卡配置:virsh domiflist <name>
- 查看虛擬機的網(wǎng)卡地址信息:virsh domifaddr <name>
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。