1. 程式人生 > >centos7 kvm

centos7 kvm

安裝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+]