KVM和製作映象以簡單的虛擬化操作命令
真機上修改(製作映象和KVM)
1 .安裝虛擬軟體包
[[email protected] ~]# yum -y install qemu-kvm \
> libvirt-daemon \
> libvirt-client \
> libvirt-daemon-driver-qemu \
> virt-install \
> virt-manager \
> virt-v2v \
> virt-p2v
2.禁用防火牆
[[email protected] ~]# vim /etc/selinux/config #禁用防火牆
SELINUX=disabled
[
[[email protected] ~]# systemctl unmask firewalld
3.yum 源的安裝和配置(網路yum源)
光碟作為 yum 源 CentOS7-1708.iso (共9591包)
有 repodata 目錄的才可以作為 yum 源
自定義 yum 源
建立一個 repodata
createrepo .
更新
createrepo --update .
4. dns 服務
[[email protected]
[[email protected] ~]# vim /etc/named.conf
listen-on port 53 { 192.168.1.254; };
allow-query { any; };
forwarders { 202.106.196.115; };
dnssec-enable no;
dnssec-validation no;
5 時間伺服器
yum install -y chrony
server:配置 /etc/chrony.conf #真機上修改
server ntp1.aliyun.com iburst
bindacqaddress 0.0.0.0
allow 0/0
client:配置 /etc/chrony.conf #虛擬機器
server 192.168.1.254 iburst
檢查狀態
chronyc sources -v
6 建立虛擬交換機
建立配置檔案 /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<bridge name="vbr"/>
<forward mode="nat"/>
<ip address="192.168.122.254" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.100" end="192.168.122.200"/>
</dhcp>
</ip>
</network>
virsh net-define vbr.xml
virsh net-autostart vbr
virsh net-start vbr
7 在虛擬機器管理器上安裝虛擬機器
[[email protected] ~]# yum -y install vsftpd
[[email protected] ftp]# du -sh centos/ #把ISO映象掛載,然後放在/var/ftp/下
8.2G centos/
虛擬機器管理器:
檔案>網路安裝FTP,HTTP,NFS>URL:ftp://176.121.207.149/centos>RAM:2048 CPU:2>9GiB,選擇或建立自定義儲存/var/lib/libvirt/images/node.qcow2>名稱:centos>選擇網路:虛擬網路'vbr':NAT
最小化安裝,手動分割槽:自己配置分割槽>標準分割槽,分割槽位置為/
初始化虛擬機器(在虛擬機器裡面操作)
1 修改 /etc/selinux/config
SELINUX=disabled
2 配置網絡卡配置檔案
[[email protected] ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"
3 禁用空路由
[[email protected] ~]# vi /etc/sysconfig/network
NOZEROCONF="yes"
4 停止 firewalld NetworkManager
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl stop NetworkManager
5 解除安裝
yum remove -y NetworkManager-* firewalld-* python-firewall
6 重啟機器
7 配置 yum 源(yum源IP為真機的一個IP,把真的yum源做虛擬機器的yum源)
[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# rm -rf *
[[email protected] yum.repos.d]# vi local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.122.1/centos7"
enabled=1
gpgcheck=0
8 安裝軟體(可裝必要的軟體包,比如tab)
yum provides 命令
yum install 包名
9 驗證數字簽名(沒有設定)
下載 RPM-GPG-KEY-CentOS-7
匯入 rpm --import RPM-GPG-KEY-CentOS-7
修改 local.repo gpgcheck=1
使用 yum install lftp lrzsz 驗證
10 新增串列埠終端
[[email protected] ~]# vi /etc/default/grub
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0
console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
修改完成之後建立引導檔案
grub2-mkconfig -o /boot/grub2/grub.cfg
11 修改 fstab(將UUID與磁碟相對應,然後再將UUID改為磁碟名字)
blkid(可以檢視磁碟的UUID)
修改 UUID=xxxxxx 為 /dev/sda1
12 安裝分割槽擴充套件軟體
[[email protected] ~]# yum -y install cloud-utils-growpart
擴充套件磁碟分割槽空間(讓 /dev/sda1 變大)
[[email protected] ~]# /usr/bin/growpart /dev/sda 1
擴充套件檔案系統識別空間(讓 df -h 可使用空間變大)
[[email protected] ~]# /usr/sbin/xfs_growfs /
13 關閉虛擬機器,清理資訊 (真機)
設定語言為英文 LANG=en_US.UTF-8
virt-sysprep -d 虛擬機器名稱
[[email protected] ~]# LANG=en_US.UTF-8
[[email protected] ~]# virt-sysprep -d centos
14 刪除虛擬機器定義(真機)
[[email protected] ~]# virsh undefine centos
15 快速建立虛擬機器(真機)
例如建立虛擬機器 node1
建立磁碟檔案
cd /var/lib/libvirt/images
qemu-img create -b node.img -f qcow2 node1.img 32G
建立虛擬機器配置檔案 (將node.xml檔案放在此資料夾內,node.xml內容見下!)
sed 's/node/node1/' node.xml >/etc/libvirt/qemu/node1.xml
virsh define /etc/libvirt/qemu/node1.xml
[[email protected] images]# find / -name node1.xml
/etc/libvirt/qemu/node1.xml
啟動虛擬機器
virsh start node1
連線檢視虛擬機器
virsh console node1
16 附加 virsh edit 虛擬機器名
新增網絡卡
<interface type='bridge'>
<source bridge='private1'/>
<model type='virtio'/>
</interface>
新增硬碟
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 disk.img 20G
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/disk.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
node.xml內容
<domain type='kvm'>
<name>node</name>
<memory unit='KB'>2097152</memory>
<currentMemory unit='KB'>2097152</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
<bootmenu enable='yes'/>
<bios useserial='yes'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='host-passthrough'>
</cpu>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/node.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='vbr'/>
<model type='virtio'/>
</interface>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
<serial type='pty'></serial>
<console type='pty'>
<target type='serial'/>
</console>
<memballoon model='virtio'></memballoon>
</devices>
</domain>
[[email protected] images]# vim /etc/libvirt/qemu/networks/vbr.xml
[[email protected] images]# virsh net-start
error: command 'net-start' requires <network> option
[[email protected] images]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml
• 必備軟體
• qemu-kvm
– 為 kvm 提供底層模擬支援
• libvirt-daemon
– libvirtd 守護程序,管理虛擬機器
• libvirt-client
– 使用者端軟體,提供客戶端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 連線 qemu 的驅勱
• 可選功能
– virt-install
# 系統安裝工具
– virt-manager # 圖形管理工具
– virt-v2v # 虛擬機器遷移工具
– virt-p2v # 物理機遷移工具
虛擬機器的組成
• 虛擬機器的組成
– 核心虛擬化模組(KVM)
– 系統裝置模擬(QEMU)
– 虛擬機器管理程式(LIBVIRT)
– 一個 XML 檔案(虛擬機器配置宣告檔案)
– 位置 /etc/libvirt/qemu/
– 一個磁碟映象檔案(虛擬機器的硬碟)
– 位置 /var/lib/libvirt/images/
檢視虛擬化資訊
• 檢視KVM節點(伺服器)資訊
– virsh nodeinfo
• 列出虛擬機器
– virsh list [--all]
• 列出虛擬網路
– virsh net-list [--all]
• 檢視挃定虛擬機器的資訊
– virsh dominfo 虛擬機器名稱
開關機操作
• 執行|重啟|關閉挃定的虛擬機器
– virsh start|reboot|shutdown 虛擬機器名稱
• 強制關閉挃定的虛擬機器
– virsh destroy 虛擬機器名稱
• 將挃定的虛擬機器設為開機自勱執行
– virsh autostart [--disable] 虛擬機器名稱
qemu-img
• qemu-img 是虛擬機器的磁碟管理命令
• qemu-img 支援非常多的磁碟格式,例如 raw、
qcow2、vdi、vmdk 等等
• qemu-img 命令格式
– qemu-img 命令 引數 塊檔名稱 大小
– 常用的命令有
– create 建立一個磁碟
– convert 轉換磁碟格式
– info 檢視磁碟資訊
– snapshot 管理磁碟快照
• 建立新的映象盤檔案
– qemu-img create -f 格式 磁碟路徑 大小
– qemu-img create -f qcow2 disk.img 50G
• 查詢映象盤檔案的資訊
– qemu-img info 磁碟路徑
– qemu-img info disk.img
• -b 使用後端模板檔案
– qemu-img create -b disk.img -f qcow2 disk1.img
連線本地/遠端KVM
• 使用 virsh 客戶端工具
– 連線本地
– virsh
– virsh# connect qemu:///system (預設選項)
– 連線遠端
– virsh# connect
qemu+ssh://[email protected]:port/system
虛擬機器遠端管理
• 使用 virt-manager 客戶端工具
– virt-manager 也可以通過 add connection 管理其它
機器上的虛擬機器,一般通過"remote tunnel over ssh"
就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密碼登入
如果沒有免密碼登入需要單獨安裝 python 的 ssh 相
關模組,這裡我們可以使用部署 key 的方法解決
建立虛擬交換機
• libvirtd 網路介面
– 原理:呼叫 dnsmasq 提供DNS、DHCP等功能
– 建立配置檔案 /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<bridge name="vbr"/>
<forward mode="nat"/>
<ip address="192.168.1.254" netmask="255.255.255.0">
<dhcp>
<range start="192.168.1.100" end="192.168.1.200"/>
</dhcp>
</ip>
</network>
網路管理
• virsh 管理虛擬網路
– net-list 檢視虛擬網路
– net-define vbr.xml 建立虛擬網路
– net-undefine vbr 初除虛擬網路
– net-start vbr 啟勱虛擬網路
– net-destroy vbr 停止虛擬網路
– net-edit vbr 修改 vbr 網路的配置
– net-autostart vbr 設定 vbr 虛擬網路開機自啟勱
匯出虛擬機器
• xml配置檔案
– 定義了一個虛擬機器的名稱、CPU、記憶體、虛擬磁碟、
網絡卡等各種引數設定
– 預設位於 /etc/libvirt/qemu/虛擬機器名.xml
• 匯出xml配置檔案
– 檢視:virsh dumpxml 虛擬機器名
– 備份:virsh dumpxml 虛擬機器名 > 虛擬機器名.xml
編輯虛擬機器設定
• 對虛擬機器的配置進行調整
– 編輯:virsh edit 虛擬機器名
– 若修改 name、memory、disk、network,可自勱保
存為新虛擬機器配置
[[email protected] ~]# virsh edit rhel-207
<domain type='kvm'>
<name>rhel-207</name>
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rhel7.2.qcow2'/>
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>
匯入虛擬機器
• 根據修改後的獨立xml檔案定義新虛擬機器
– virsh define XML描述檔案
[[email protected] ~]# virsh define /root/rhel-207.xml
定義域 rhel-207(從 /root/rhel-207.xml)
[[email protected] ~]# virsh list --all
Id 名稱
狀態
----------------------------------------------------
- rhel-207
關閉
- rhel7.2
關閉
刪除虛擬機器
• 必要時可去除多餘的xml配置
– 比如虛擬機器改名的情冴
– 避免出現多個虛擬機器的磁碟戒MAC地址衝突
– virsh undefine 虛擬機器名
[[email protected] ~]# virsh undefine rhel7.2
域 rhel7.2 已經被取消定義
自定義虛擬機器安裝
網路yum源的安裝和配置
• 快速配置網路 yum 源
– 配置ftp
yum install vsftp
– 修改配置檔案 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 預設根目錄為 /var/ftp
• 快速配置網路 yum 源
– 在 ftp 跟目錄建立資料夾 centos7
– 把 CentOS7 的光碟掛載到剛剛建立的目錄上
mount –t iso9660 –o loop,ro /xx/xx.iso /var/ftp/centos7
– 在客戶機裡面配置 /etc/yum.repos.d/xxx.repo
[Centos_repo]
name= CentOS packet
baseurl=ftp://xx.xx.xx.xx/centos7
enabled=1
gpgcheck=0
– yum repolist
軟體包安裝及yum配置
• 把剛剛安裝好的系統刜始化
– 1、禁用 selinux /etc/selinux/config
SELINUX=disabled
– 2、解除安裝防火牆不NetworkManager
yum remove -y NetworkManager-* firewalld-* python-
firewall
– 3、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0
– 安裝軟體
yum install -y lftp
– 1、yum 源匯入公鑰驗證配置
gpgcheck=1
– 2、匯入 gpg key
rpm --import ftp://192.168.1.254/centos7/RPM-GPG-KEY-
CentOS-7
– 3、常用系統命令安裝
yum install -y net-tools vim-enhanced bridge-utils psmisc
網絡卡及配置檔案設定
• 初除網路配置裡的個性化資訊
– /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"
– 禁用空路由
– /etc/sysconfig/network
NOZEROCONF="yes"
Console及磁碟分割槽配置
• 新增 Console 配置及初除磁碟分割槽裡的個性化資訊
– /etc/default/grub
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0
console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
– 重新生成 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
– /etc/fstab 檔案中到 UUID 手工修改成系統裝置
– blkid 檢視 uuid 對應的磁碟裝置,修改 fstab 檔案
去除個性化資訊
• 安裝分割槽擴充套件軟體
yum install -y cloud-utils-growpart
– 設定第一次開機自勱擴容根目錄
chmod 755 /etc/rc.local
– 在 rc.local 里加入如下配置
###
/usr/bin/growpart /dev/vda 1
/usr/sbin/xfs_growfs /
/usr/bin/sed '/^###/,$d' -i /etc/rc.d/rc.local
– 關閉虛擬機器後執行資訊清理工作
virt-sysprep -d node
XML詳解
• XML 配置檔案
– 儲存 node 虛擬機器配置檔案
virsh dumpxml node >demo.xml
– 清除模板配置
virsh undefine node
– xml 模板
– <!-- 是註釋的開始
–
--> 是註釋的結尾
– xml 標籤必須成對出現
– <keyword> ... ... </keyword>
• XML 配置檔案
<domain type='kvm' id='4'>
<name>centos7.0</name>
<uuid>8413f30a-c978-4796-a28f-8ba9fe74b759</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
– id=4 個性化設定 ,去掉
– uuid 去掉
– memory unit 虛擬機器最大使用記憶體,可以手勱調整
– currentmemory 建立虛擬機器使用記憶體
• XML 配置檔案
– cpu 設定,可以調整
<vcpu placement='static'>2</vcpu>
– 資源設定,可以初除
<resource> ... ... </resource>
– 系統配置及引導裝置,丌需要修改
<os>
<boot dev='hd'/>
</os>
– 電源相關配置無需修改
<features> ... ... </features>
• XML 配置檔案
– cpu配置,可以修改成使用真機cpu
<cpu ... ... />
<cpu mode='host-passthrough'></cpu>
– 時鐘相關配置,可以初除
<clock ... ... </clock>
– 重啟,關機,強制關閉對應命令
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
• XML 配置檔案
– 記憶體及硬碟休眠相關設定,可以初除
<pm> ... ... </pm>
– 模擬裝置相關配置
<devices> ... ... </devices>
– 其他配置
– 驅勱安全標籤,可初除
<seclabel> ... ... </seclabel>
• 模擬裝置配置
– 匯流排地址,別名配置,都可以初除
<address ....
<alias ...
– 硬碟配置,需要修改
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk ... ... </disk>
– usb 相關裝置配置,可以初除
<controller type='usb'
• 模擬裝置配置
– type='pci' pci匯流排裝置,可初除
– type='virtio-serial' 串列埠裝置需要保留串列埠終端
– type='network' 網路配置需要修改
– type='pty' 串列埠終端,需要保留
– type='unix' 虛擬機器通訊控制介面
– type='spicevmc' 圖形影象相關配置可以初除
– type='tablet' 數位板,可以初除
• 模擬裝置配置
– type='mouse' 滑鼠,保留
– type='keyboard' 鍵盤保留
– graphics、video 圖形影象顯示卡相關配置,可以初除
– sound 音效卡相關配置,可以初除
– redirdev 裝置重定向,可以初除
– memballoon 記憶體氣泡,可以勱態調整記憶體
快速建立虛擬機器
• 如何快速建立虛擬機器
– 1、 xml 檔案配置
– 把我們的 xml 模板檔案進行復制
– 修改名稱及磁碟檔案
– 2 img 檔案建立
– 以我們剛剛裝系統的模板為後端檔案建立虛擬機器
qemu-img create –b node.qcow2 –f qcow2 node1.img
快速建立虛擬機器
• 如何快速建立虛擬機器
– 完成虛擬機器註冊及啟勱虛擬機器
– virsh define node1.xml
– virst start node1
– virsh console node
配置虛擬機器系統有奇招
• 使用 guestmount 工具
– 支援離線掛載 raw、qcow2 格式虛擬機器磁碟
– 可以在虛擬機器關機的情冴下,直接修改磁碟中的文件
– 方便對虛擬機器定製、修復、指令碼維護
!!! 需要注意 SELinux 機制的影響
如何掛載虛擬盤
• 基本用法
guestmount -a 虛擬機器磁碟路徑 -i /掛載點
[[email protected] ~]# mkdir /mnt/kdisk
[[email protected] ~]# guestmount -a node1.qcow2 -i /mnt/kdisk
[[email protected] ~]# ls /mnt/kdisk
bin
home media opt
sbin
tmp
boot
lib
misc
proc
selinux usr