centos7 kvm
阿新 • • 發佈:2018-11-12
安裝KVM環境
# 1、檢測是否支援KVM
[[email protected] ~]# cat /proc/cpuinfo | egrep "vmx|svm"
# 2、關閉SELinux
[[email protected] ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 3、安裝kvm 管理工具
[[email protected] ~]# yum -y install qemu-kvm libvirt virt-install virt-manager virt-viewer
# qemu-kvm: KVM模組
# virt-install: 包含工具(virt-install,virt-clone和virt-image),
# 用於安裝和克隆虛擬機器使用libvirt。 它完全支援paravirtulized半虛擬化和全虛擬化。
# 支援的虛擬機器管理程式是Xen,qemu(QEMU)和kvm
# libvirt: 虛擬管理模組
# virt-manager: 圖形介面管理虛擬機器
# 4、重啟宿主機,以便載入 kvm 模組
# ------------------------
[ [email protected] ~]# reboot
# 5、檢視KVM模組是否被正確載入
# ------------------------
[[email protected] ~]# lsmod | grep kvm
kvm_intel 162153 0
kvm 525259 1 kvm_intel
# 6、開啟libvirtd服務,並且設定其開機自動啟動
[[email protected] ~]# systemctl start libvirtd.service
[[email protected] ~]# systemctl enable libvirtd.service
安裝虛擬機器
安裝前要設定環境語言為英文LANG="en_US.UTF-8",如果是中文的話某些版本可能會報錯。CentOS 7 在這裡修改 /etc/locale.conf。
kvm建立虛擬機器,特別注意.iso映象檔案一定放到/home 或者根目錄重新建立目錄,不然會因為許可權報錯,無法建立虛擬機器。
# 字元介面安裝 virt-install \ --virt-type=kvm \ --name=centos78 \ --vcpus=2 \ --memory=4096 \ --location=/tmp/CentOS-7-x86_64-Minimal-1511.iso \ --disk path=/home/vms/centos78.qcow2,size=40,format=qcow2 \ --network bridge=br0 \ --graphics none \ --extra-args='console=ttyS0' \ --force # --location 裡面可以是本地,也可以是nfs,http # 如 --location=http://mirrors.aliyun.com/centos/7/os/x86_64/ # 圖形化 vnc 安裝 virt-install \ --virt-type=kvm \ -n centos7 \ --vcpu 2 \ -r 2048 \ --disk /kvm/disk/centos.qcow2,format=qcow2,size=10 \ --network bridge=br0 \ --cdrom /opt/centos.iso \ --vnc --vncport=5910 --vnclisten=0.0.0.0
連線虛擬機器
通過 virsh console <虛擬機器名稱> 命令來連線虛擬機器
# 檢視虛擬機器
[[email protected] ~]# virsh list # 檢視在執行的虛擬機器
[[email protected] ~]# virsh list –all # 檢視所有虛擬機器
Id Name State
----------------------------------------------------
7 centos7 running
#連線虛擬機器
virsh console centos7
配置宿主機網路
1.KVM 虛擬機器是基於 NAT 的網路配置;
2.只有同一宿主機的虛擬鍵之間可以互相訪問,跨宿主機是不能訪問;
3.虛擬機器需要和宿主機配置成橋接模式,以便虛擬機器可以在區域網內可見;
Bridge模式配置
Bridge方式即虛擬網橋的網路連線方式,是客戶機和子網裡面的機器能夠互相通訊。可以使虛擬機器成為網路中具有獨立IP的主機。橋接網路(也叫 物理裝置共享)被用作把一個物理裝置複製到一臺虛擬機器。網橋多用作高階設定,特別是主機多個網路介面的情況。
┌─────────────────────────┐ ┌─────────────────┐
│ HOST │ │Virtual Machine 1│
│ ┌──────┐ ┌───────┐ │ │ ┌──────┐ │
│ │ br0 │──┬───│ vnet0 │─│─ ─ ─ │ │ br0 │ │
│ └──────┘ │ └───────┘ │ │ └──────┘ │
│ │ │ │ └─────────────────┘
│ │ │ ┌───────┐ │ ┌─────────────────┐
│ ┌──────┐ └───│ vnet1 │─│─ │Virtual Machine 2│
│ │ eno0 │ └───────┘ │ │ │ ┌──────┐ │
│ └──────┘ │ ─ ─ │ │ br0 │ │
│ ┌──────┐ │ │ └──────┘ │
│ │ eno1 │ │ └─────────────────┘
│ └──────┘ │
└─────────────────────────┘
# 新建網橋裝置
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] ~]# cp ifcfg-eth0 ifcfg-br0
vi ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
#IPADDR=192.168.5.137
#PREFIX=24
#GATEWAY=192.168.5.2
#DNS1=192.168.5.2
vi ifcfg-br0
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.5.137
PREFIX=24
GATEWAY=192.168.5.2
DNS1=192.168.5.2
STP=1
systemctl restart network
[[email protected] ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29db5f75 yes eth0
NAT模式
NAT(Network Address Translation網路地址翻譯),NAT方式是kvm安裝後的預設方式。它支援主機與虛擬機器的互訪,同時也支援虛擬機器訪問網際網路,但不支援外界訪問虛擬機器。
[[email protected] ~]# virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
default active no no
# default是宿主機安裝虛擬機器支援模組的時候自動安裝的。
[[email protected] ~]# ip a;
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:e3:3d:4a brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:e3:3d:4a brd ff:ff:ff:ff:ff:ff
inet 192.168.160.172/24 brd 192.168.160.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee3:3d4a/64 scope link
valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:4d:79:b9 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:4d:79:b9 brd ff:ff:ff:ff:ff:ff
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:4f:3a:89 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe4f:3a89/64 scope link
valid_lft forever preferred_lft forever
# 其中virbr0是由宿主機虛擬機器支援模組安裝時產生的虛擬網路介面,也是一個switch和bridge,負責把內容分發到各虛擬機器。幾個虛擬機器管理模組產生的介面關係如下圖:
┌───────────────────────┐
│ HOST │
│ ┌──────┐ │ ┌─────────────────┐
│ │ br0 │─┬──────┐ │ │Virtual Machine 1│
│ └──────┘ │ │ │ │ ┌──────┐ │
│ │ │ ┌───────┐ │ ─ │ │ br0 │ │
│ │ │ │ vnet0 │─│┘ │ └──────┘ │
│ ┌──────┐ │ └───────┘ │ └─────────────────┘
│ │virbr0│ │ ┌───────┐ │ ┌─────────────────┐
│ │ -nic │ └──│ vnet1 │─│┐ │Virtual Machine 2│
│ └──────┘ └───────┘ │ │ │
│ ┌──────┐ │└ ─│ ┌──────┐ │
│ │ eth0 │ │ │ │ br0 │ │
│ └──────┘ │ │ └──────┘ │
└───────────────────────┘ └─────────────────┘
# 從圖上可以看出,虛擬介面和物理介面之間沒有連線關係,所以虛擬機器只能在通過虛擬的網路訪問外部世界,無法從網路上定位和訪問虛擬主機。
# virbr0是一個橋接器,接收所有到網路192.168.122.*的內容。從下面命令可以驗證:
[[email protected] ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29e33d4a yes eth0
vnet0
virbr0 8000.5254004d79b9 yes virbr0-nic
[[email protected] ~]# ip r
default via 192.168.160.2 dev br0 proto static metric 425
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
192.168.160.0/24 dev br0 proto kernel scope link src 192.168.160.172 metric 425
# 同時,虛擬機器支援模組會修改iptables規則,通過命令可以檢視:
[[email protected] ~]# iptables -t nat -L -nv
[[email protected] ~]# iptables -t filter -L -nv
# 如果沒有default的話,或者需要擴充套件自己的虛擬網路,可以使用命令重新安裝NAT。
[[email protected] ~]# virsh net-define /usr/share/libvirt/networks/default.xml
# 此命令定義一個虛擬網路,default.xml的內容:
<network>
<name>default</name>
<bridge name="virbr0" />
<forward/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254" />
</dhcp>
</ip>
</network>
# 也可以修改xml,建立自己的虛擬網路。
# 標記為自動啟動:
[[email protected] ~]# virsh net-autostart default
# Network default marked as autostarted
啟動網路:
[[email protected] ~]# virsh net-start default
# Network default started
網路啟動後可以用命令brctl show 檢視和驗證。
修改vi /etc/sysctl.conf中引數,允許ip轉發,CentOS7是在vi /usr/lib/sysctl.d/00-system.conf 這裡面修改
net.ipv4.ip_forward=1
通過 sysctl -p 檢視修改結果
自定義NAT模式
# 建立名為management的NAT網路,vi /usr/share/libvirt/networks/management.xml
<network>
<name>management</name>
<bridge name="virbr1"/>
<forward/>
<ip address="192.168.123.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.123.2" end="192.168.123.254"/>
</dhcp>
</ip>
</network>
# 啟用新建的NAT網路
[[email protected] ~]# virsh net-define /usr/share/libvirt/networks/management.xml
[[email protected] ~]# virsh net-start management
[[email protected] ~]# virsh net-autostart management
# 驗證
[[email protected] ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.3863bb44cf6c no eno1
vnet0
virbr0 8000.525400193f0f yes virbr0-nic
virbr1 8000.52540027f0ba yes virbr1-nic
[[email protected] ~]# virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
default active no no
management active yes yes
退出虛擬機器
exit # 退出系統到登入介面
Ctrl+5 # 從虛擬機器登入頁面,退出到宿主機命令列頁面
Ctrl+] # 或者下面
修改虛擬機器配置資訊
# 直接通過vim命令修改
[[email protected] ~]# vim /etc/libvirt/qemu/centos72.xml
# 通過virsh命令修改
[[email protected] ~]# virsh edit centos72
克隆虛擬機器
# 暫停原始虛擬機器
virsh shutdown centos72
[[email protected] ~]# virt-clone -o centos72 -n centos.112 -f /home/vms/centos.112.qcow2 -m 00:00:00:00:00:01
[[email protected] ~]# virt-clone -o centos88 -n centos.112 --file /home/vms/centos.112.qcow2 --nonsparse
virt-clone 引數介紹
--version 檢視版本。
-h,--help 檢視幫助資訊。
--connect=URI 連線到虛擬機器管理程式 libvirt 的URI。
-o 原始虛擬機器名稱 原始虛擬機器名稱,必須為關閉或者暫停狀態。
-n 新虛擬機器名稱 –name 新虛擬機器名稱。
--auto-clone 從原來的虛擬機器配置自動生成克隆名稱和儲存路徑。
-u NEW_UUID, --uuid=NEW_UUID 克隆虛擬機器的新的UUID,預設值是一個隨機生成的UUID。
-m NEW_MAC, --mac=NEW_MAC 設定一個新的mac地址,預設為隨機生成 MAC。
-f NEW_DISKFILE, --file=NEW_DISKFILE 為新客戶機使用新的磁碟映象檔案地址。
--force-copy=TARGET 強制複製裝置。
--nonsparse 不使用稀疏檔案複製磁碟映像。
通過映象建立虛擬機器
---------1、建立虛擬機器映象檔案--------
# 複製第一次安裝的乾淨系統映象,作為基礎映象檔案,
# 後面建立虛擬機器使用這個基礎映象
[[email protected] ~]# cp /home/vms/centos.88.qcow2 /home/vms/centos7.base.qcow2
# 使用基礎映象檔案,建立新的虛擬機器映象
[[email protected] ~]# cp /home/vms/centos7.base.qcow2 /home/vms/centos7.113.qcow2
---------2、建立虛擬機器配置檔案--------
# 複製第一次安裝的乾淨系統映象,作為基礎配置檔案。
[[email protected] ~]# virsh dumpxml centos.88 > /home/vms/centos7.base.xml
# 使用基礎虛擬機器映象配置檔案,建立新的虛擬機器配置檔案
[[email protected] ~]# cp /home/vms/centos7.base.xml /home/vms/centos7.113.xml
# 編輯新虛擬機器配置檔案
[[email protected] ~]# vi /home/vms/centos7.113.xml
# 主要是修改虛擬機器檔名,UUID,映象地址和網絡卡地址,其中 UUID 在 Linux 下可以使用 uuidgen 命令生成
<domain type='kvm'>
<name>centos7.113</name>
<uuid>1e86167a-33a9-4ce8-929e-58013fbf9122</uuid>
<devices>
<disk type='file' device='disk'>
<source file='/home/vms/centos7.113.img'/>
</disk>
<interface type='bridge'>
<mac address='00:00:00:00:00:04'/>
</interface>
</devices>
</domain>
[[email protected] ~]# virsh define /home/vms/centos7.113.xml
# Domain centos.113 defined from /home/vms/centos7.113.xml
# 建立磁碟
[[email protected] ~]# mkdir /home/vms
# 建立 guest 所需的磁碟
# create 表示建立,-f qcow2 表示建立一個格式為 qcow2 的磁碟,
# /home/vms/centos78.qcow2 表示建立的磁碟名稱及磁碟檔案,40G 表示該磁碟可用大小。
[[email protected] ~]# qemu-img create -f qcow2 -o preallocation=metadata /home/vms/centos78.qcow2 40G
常用命令說明
virt-install
# 常用引數說明
–name指定虛擬機器名稱
–memory分配記憶體大小。
–vcpus分配CPU核心數,最大與實體機CPU核心數相同
–disk指定虛擬機器映象,size指定分配大小單位為G。
–network網路型別,此處用的是預設,一般用的應該是bridge橋接。
–accelerate加速
–cdrom指定安裝映象iso
–vnc啟用VNC遠端管理,一般安裝系統都要啟用。
–vncport指定VNC監控埠,預設埠為5900,埠不能重複。
–vnclisten指定VNC繫結IP,預設繫結127.0.0.1,這裡改為0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6
--name 指定虛擬機器名稱
--ram 虛擬機器記憶體大小,以 MB 為單位
--vcpus 分配CPU核心數,最大與實體機CPU核心數相同
–-vnc 啟用VNC遠端管理,一般安裝系統都要啟用。
–-vncport 指定VNC監控埠,預設埠為5900,埠不能重複。
–-vnclisten 指定VNC繫結IP,預設繫結127.0.0.1,這裡改為0.0.0.0。
--network 虛擬機器網路配置
# 其中子選項,bridge=br0 指定橋接網絡卡的名稱。
–os-type=linux,windows
–os-variant=rhel7.2
--disk 指定虛擬機器的磁碟儲存位置
# size,初始磁碟大小,以 GB 為單位。
--location 指定安裝介質路徑,如光碟映象的檔案路徑。
--graphics 圖形化顯示配置
# 全新安裝虛擬機器過程中可能會有很多互動操作,比如設定語言,初始化 root 密碼等等。
# graphics 選項的作用就是配置圖形化的互動方式,可以使用 vnc(一種遠端桌面軟體)進行連結。
# 我們這列使用命令列的方式安裝,所以這裡要設定為 none,但要通過 --extra-args 選項指定終端資訊,
# 這樣才能將安裝過程中的互動資訊輸出到當前控制檯。
--extra-args 根據不同的安裝方式設定不同的額外選項
virsh
virsh list # 檢視在執行的虛擬機器
virsh dumpxml vm-name # 檢視kvm虛擬機器配置檔案
virsh start vm-name # 啟動kvm虛擬機器
virsh shutdown vm-name # 正常關機
virsh destroy vm-name # 非正常關機,強制關閉虛擬機器(相當於物理機直接拔掉電源)
virsh undefine vm-name # 刪除vm的配置檔案
ls /etc/libvirt/qemu
# 檢視刪除結果,Centos-6.6的配置檔案被刪除,但磁碟檔案不會被刪除
virsh define file-name.xml # 根據配置檔案定義虛擬機器
virsh suspend vm-name # 掛起,終止
virsh resumed vm-name # 恢復被掛起的虛擬機器
virsh autostart vm-name # 開機自啟動vm
virsh console <虛擬機器名稱> # 連線虛擬機器
錯誤解決
console test
Connected to domain test
Escape character is ^]
# 如果出現上面字串使用 CTRL+Shift+5 CTRL+Shift+]