centos7 安裝並創建虛擬機


centos7 安裝並創建虛擬機


一 安裝依賴包

yum install qemu-kvm libvirt virt-install bridge-utils、


二 下載鏡像

wget http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso


三 啟動libvirtd進程

systemctl start libvirtd


四 添加網橋

vim /etc/sysconfig/network-scripts/ifcfg-br0

BOOTPROTO=dhcp

TYPE=bridge

NAME=br0

DEVICE=br0

ONBOOT=yes

STP=on

 

五 宿主機網卡加入網橋

echo BRIDGE=br0 >>/etc/sysconfig/network-scripts/ifcfg-eth0.cfg


六 配置qemu允許br0

echo "allow br0" >> /etc/qemu-kvm/bridge.conf


七 創建虛擬機

virt-install -n  kvm1 \ 創建虛擬機,名稱KVM1

--memory=512,maxmemory=1024 \ //分配內存512M,最大可動態擴展1024M,單位M                                

--vcpus  1,maxvcpus=2   \      //cpu個數1,最大2                               

-l  /home/yong/download/CentOS-7-x86_64-Minimal-2009.iso \  //-l指定安裝文件路徑                 

--disk /home/yong/kvm_disk,size=8   \  //虛擬機硬盤位置,可指定,也可自動創建;容量8G,單位G

--bridge=br0   \  //橋接:網橋設備br0。NAT模式:-w network=net0,model=virbr0,mac=                                   

--graphics none   \   //不開啟圖形界面,可選項 vnc,spice                                     

--os-variant rhel7   \  //設置操作系統

-x  console=ttyS0 \ //指定終端,客戶機使用文本模式安裝時,可能需要該選項。第一次沒指定該選項,一直卡在域安裝仍在進行。

 

示例:

virt-install -n  kvm1  \
--memory=512,maxmemory=1024 \
--vcpus 1,maxvcpus=2  \
-l  /home/yong/download/CentOS-7-x86_64-Minimal-2009.iso  \
--disk /home/yong/kvm_disk,size=8 \
--bridge=br0    \   
--graphics none  \ 
--os-variant rhel7   \
-x  console=ttyS0

 

 

八 命令行操作


virsh start kvm1 //啟動虛擬機

virsh console kvm1 //連接虛擬機

virsh edit kvm1 //編輯虛擬機配置文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

##################參考##################################

 


檢查CPU是否支持虛擬化

cat /proc/cpuinfo | egrep 'vmx|svm'

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single intel_pt ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear spec_ctrl intel_stibp flush_l1d
有vmx或者svm就說明CPU支持虛擬化,vmx是Intel的CPU,svm是AMD的CPU。

安裝配置KVM環境

yum -y install qemu-kvm qemu-kvm-tools qemu-img virt-manager libvirt libvirt-python libvirt-client bridge-utils virt-viewer virt-install啟動libvirtd並設置開機自啟,

systemctl enable libvirtd

systemctl start libvirtd

查看模塊是否啟動,

lsmod | grep kvm


關閉防火牆,

systemctl stop firewalld

systemctl disable firewalld

關閉selinux,

vim /etc/sysconfig/selinux

SELINUX=disabled

 

網絡配置

為了虛擬機能夠通過橋接模式上網,需要配置一個網橋。

首先將原本的網卡配置復制一份為br0,方便直接修改:

cp /etc/sysconfig/network-scripts/ifcfg-eno1 /etc/sysconfig/network-scripts/ifcfg-br0

修改原本網卡eno1的配置如下,注意增加了BRIDGE=br0:

TYPE=Ethernet
BRIDGE=br0
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno1
UUID=d92ae489-8b80-4f0b-a8cf-fa06cb539547
DEVICE=eno1
ONBOOT=yes
網橋br0的配置為(如果是復制的,記得把uuid隨便改一下):

TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
UUID=d92ae489-8b80-4f0b-a8cf-fa06cb539568
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=9.9.9.9
配置完成后重啟網絡(注意別改錯了,不然重啟網絡失敗,沒有網了,ssh也會斷掉):

systemctl restart network


創建虛擬機
virt-install --name=rancher --memory=8000 --vcpus=2 \
--os-type=linux --os-variant=rhel7 \
--location=/home/live/CentOS-7-x86_64-Minimal-1804.iso \
--disk path=/home/live/kvm_data/rancherVM.img,size=200 \
--bridge=br0 \
--graphics=none \
--console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"


其中:

--name=rancher指定了虛擬機名稱為rancher。
--memory=8000指定了虛擬機內存為8000M。
--vcpus=2指定了虛擬機核數為2。
--location=/home/live/CentOS-7-x86_64-Minimal-1804.iso指定了安裝時的系統鏡像的位置。
--disk path=/home/live/kvm_data/rancherVM.img,size=200指定了存儲虛擬機的位置,虛擬機大小為200G。
正常情況下,會進入centos的安裝指引,

 

指定vnc端口  安裝

 

virt-install --name=vm-11 --ram=1024 --vcpus=1 --disk path=/vm/vm-11/vm-11.img,size=15,bus=virtio --accelerate --cdrom /root/CentOS-7-x86_64-NetInstall-2009.iso --vnc --vncport=5900 --vnclisten=0.0.0.0 --network bridge=br0,model=virtio --noautoconsole

 


設置宿主機啟動時,虛擬機也自動啟動:

virsh autostart rancher

查看當前所有虛擬機的情況:

virsh list --all


進入虛擬機的console:

virsh console rancher


停止並刪除虛擬機:

virsh destroy rancher

virsh undefine rancher

rm /home/live/kvm_data/rancherVM.img

 

 

參考地址 https://longrm.com/2021/06/22/2021-06-22-centos7-kvm/

               https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/

              https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%AF%A6%E8%A7%A3.md    

              https://hardboydu.github.io/centos/qemu/kvm/kimchi/2018/08/30/centos-qemu-kvm-kimchi.html   圖形化界面安裝虛擬機

 

 

 

 

檢測是否支持KVM

KVM 是基於 x86 虛擬化擴展(Intel VT 或者 AMD-V) 技術的虛擬機軟件,所以查看 CPU 是否支持 VT 技術,就可以判斷是否支持KVM。有返回結果,如果結果中有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的。

cat /proc/cpuinfo | egrep 'vmx|svm' flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt cqm_llc cqm_occup_llc

關閉SELinux,將 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改為 SELinux=disabled

vi /etc/sysconfig/selinux

安裝 KVM 環境

通過 yum 安裝 kvm 基礎包和管理工具

kvm相關安裝包及其作用:

  • qemu-kvm 主要的KVM程序包
  • python-virtinst 創建虛擬機所需要的命令行工具和程序庫
  • virt-manager GUI虛擬機管理工具
  • virt-top 虛擬機統計命令
  • virt-viewer GUI連接程序,連接到已配置好的虛擬機
  • libvirt C語言工具包,提供libvirt服務
  • libvirt-client 為虛擬客戶機提供的C語言工具包
  • virt-install 基於libvirt服務的虛擬機創建命令
  • bridge-utils 創建和管理橋接設備的工具
# 安裝 kvm # ------------------------ # yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install yum -y install qemu-kvm libvirt virt-install bridge-utils # 重啟宿主機,以便加載 kvm 模塊 # ------------------------ reboot # 查看KVM模塊是否被正確加載 # ------------------------ lsmod | grep kvm kvm_intel 162153 0 kvm 525259 1 kvm_intel 

開啟kvm服務,並且設置其開機自動啟動

systemctl start libvirtd
systemctl enable libvirtd

查看狀態操作結果,如Active: active (running),說明運行情況良好

systemctl status libvirtd
systemctl is-enabled libvirtd

● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: active (running) since 二 2001-01-02 11:29:53 CST; 1h 41min ago Docs: man:libvirtd(8) http://libvirt.org

安裝虛擬機

安裝前要設置環境語言為英文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 # ------------------------ virt-install --virt-type=kvm --name=centos88 --vcpus=2 --memory=4096 --location=/tmp/CentOS-7-x86_64-Minimal-1511.iso --disk path=/home/vms/centos88.qcow2,size=40,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force

命令行配置系統

上面創建虛擬機命令最終需要你配置系統基礎設置,帶 [!] 基本都是要配置的,按照順序往下配置,按對用的數字以此進行設置。

Installation

 1) [x] Language settings                 2) [!] Timezone settings
        (English (United States))                (Timezone is not set.)
 3) [!] Installation source 4) [!] Software selection (Processing...) (Processing...) 5) [!] Installation Destination 6) [x] Kdump (No disks selected) (Kdump is enabled) 7) [ ] Network configuration 8) [!] Root password (Not connected) (Password is not set.) 9) [!] User creation (No user will be created) Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]:
  1. Timezone settings 時區設置選擇 5) Asia亞洲,再選擇城市 62) Shanghai上海
Available regions
 1)  Africa                 6)  Atlantic              10)  Pacific
 2)  America                7)  Australia             11)  US
 3)  Antarctica             8)  Europe                12)  Etc
 4)  Arctic                 9)  Indian
 5)  Asia
Please select the timezone. Use numbers or type names directly [b to region list, q to quit]: 5 -------------------- 8) Baghdad 35) Kathmandu 61) Seoul 9) Bahrain 36) Khandyga 62) Shanghai 10) Baku 37) Kolkata 63) Singapore 26) Hong_Kong 53) Pontianak 27) Hovd Please select the timezone. Use numbers or type names directly [b to region list, q to quit]: 62 
  1. Installation source 安裝源輸入數字2
Choose an installation source type.
 1)  CD/DVD
 2)  local ISO file 3) Network Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: 2
  1. Software selection 軟件選擇
Base environment
Software selection

Base environment

 1)  [x] Minimal Install
  Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]:
  1. Installation Destination 安裝目的地
Installation Destination

[x] 1) : 40 GiB (vda)

1 disk selected; 40 GiB capacity; 40 GiB free ... Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: c Autopartitioning Options 自動分區選項 [ ] 1) Replace Existing Linux system(s) 替換現有的Linux系統 [x] 2) Use All Space 使用所有空間 [ ] 3) Use Free Space 使用可用空間 ================================================================================ Partition Scheme Options 分區方案選項 [ ] 1) Standard Partition 標准分區 [ ] 2) Btrfs Btrfs [x] 3) LVM LVM(邏輯卷管理) [ ] 4) LVM Thin Provisioning 精簡配置 Select a partition scheme configuration. Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]: c 

此處也可以只設置 Root 密碼Installation Destination 安裝目的地其它進入系統設置比如時區設置如下:

echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile

連接虛擬機

通過 virsh console <虛擬機名稱> 命令來連接虛擬機

# 查看虛擬機 virsh list # 查看在運行的虛擬機 virsh list --all # 查看所有虛擬機 Id Name State ---------------------------------------------------- 7 centos72 running

連接虛擬機

virsh console centos72

配置虛擬機網絡,編輯vi /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.120.200
PREFIX=24
GATEWAY=192.168.120.1
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=adfa3b7d-bf60-47e6-8482-871dee686fb5
DEVICE=eth0
ONBOOT=yes

添加DNS配置,也可以放到ifcfg-eth0中,DNS不是隨便設置的,你可以通過hostdignslookup命令查詢DNS,如果這些工具不存在可以通過yum install bind-utils -y來安裝一下。

# 如果沒有在網絡配置添加DNS可以這種方式添加DNS echo "nameserver 192.168.188.1" > /etc/resolv.conf

激活網卡

ifup eth0 # 激活網卡

虛擬機其它管理

virsh start centos72     # 虛擬機開啟(啟動): virsh reboot centos72 # 虛擬機重新啟動 virsh shutdown centos72 # 虛擬機關機 virsh destroy centos72 # 強制關機(強制斷電) virsh suspend centos72 # 暫停(掛起)KVM 虛擬機 virsh resume centos72 # 恢復被掛起的 KVM 虛擬機 virsh undefine centos72 # 該方法只刪除配置文件,磁盤文件未刪除 virsh autostart centos72 # 隨物理機啟動而啟動(開機啟動) virsh autostart --disable centos72 # 取消標記為自動開始(取消開機啟動)

配置物理機網絡

目前我只有一個固定IP,通過配置eno2,網橋當做路由器,虛擬機共享物理機進出網絡。物理機網絡配置,網絡進出走eno2 編輯vi /etc/sysconfig/network-scripts/ifcfg-eno2

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno2
UUID=f66c303e-994a-43cf-bd91-bb897dc2088d
DEVICE=eno2
ONBOOT=yes

IPADDR=<這里固定IP配置的地方> # 設置IP地址 PREFIX=24 # 設置子網掩碼 GATEWAY=<這里設置網關> # 設置網關 DNS1=<這里設置DNS> # DNS

ifcfg-br0 橋接網卡配置在同一個目錄中。

TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.120.1
PREFIX=24

ifcfg-eno1 物理網卡指定橋接網卡BRIDGE="br0"

TYPE=Ethernet
BOOTPROTO=none
NAME=eno1
DEVICE=eno1
ONBOOT=yes
BRIDGE="br0"

配置路由轉發vi /etc/sysctl.conf

# Controls IP packet forwarding net.ipv4.ip_forward = 0 修改為 # Controls IP packet forwarding net.ipv4.ip_forward = 1 允許內置路由

再執行 sysctl -p 使其生效

端口轉發

現在我們還以上述VM為例,目前該KVM的公網IP為211.11.61.7,VM的IP為192.168.188.115,現在我要求通過訪問KVM的2222端口訪問VM的22端口。

編輯vi /etc/rc.d/rc.local 添加下面命令,達到開機重啟配置網絡轉發規則。

# 啟動網絡轉發規則 iptables -t nat -A : -s 192.168.188.0/24 -j SNAT --to-source 211.11.61.7 iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 211.11.61.7 iptables -t nat -A PREROUTING -d 211.11.61.7 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22 iptables -t nat -A PREROUTING -d 211.11.61.7 -p tcp --dport 2221 -j DNAT --to-dest 192.168.188.115:21 # 實際效果可以通過外網連接虛擬機 ssh -p 2222 root@211.11.61.7

通過iptables命令來設置轉發規則,源SNAT規則,源網絡地址轉換,SNAT就是重寫包的源IP地址。

# 數據包進行 源NAT(SNAT),系統先路由——>再過濾(FORWARD)——>最后才進行POSTROUTING SNAT地址翻譯 # -t<表>:指定要操縱的表; # -A:向規則鏈中添加條目; # -s:指定要匹配的數據包源ip地址; # -j<目標>:指定要跳轉的目標; # -j SNAT:源網絡地址轉換,SNAT就是重寫包的源IP地址 # --to-source ipaddr[-ipaddr][:port-port] # 它可以指定單個新的源IP地址,IP地址的包含范圍,以及可選的端口范圍(僅當規則還指定-p tcp或-p udp時才有效)。 # 如果沒有指定端口范圍,則低於512的源端口將映射到512以下的其他端口:512和1023之間的端口將映射到低於1024的端口, # 其他端口將被映射到1024或更高。 在可能的情況下,不會發生港口更改。 # 在內核高達2.6.10,您可以添加幾個 - 源選項。 # 對於這些內核,如果通過地址范圍或多個源選項指定多個源地址,則會在這些地址之間進行簡單的循環(循環中循環)。 # 后來的內核(> = 2.6.11-rc1)不再具有NAT到多個范圍的能力。 iptables -t nat -A POSTROUTING -s 192.168.120.0/24 -j SNAT --to-source <固定IP> # cat /etc/sysconfig/iptables

公網訪問虛擬機

通過公網ip 192.168.188.222端口2280,轉發到虛擬機192.168.111.133:80上面

iptables -t nat -A PREROUTING -d 192.168.188.222 -p tcp --dport 2280 -j DNAT --to-dest 192.168.111.133:80

重啟並保存 iptables 配置。

# 保存 service iptables save # 重啟 service iptables restart

配置宿主機網絡

  1. KVM 虛擬機是基於 NAT 的網絡配置;
  2. 只有同一宿主機的虛擬鍵之間可以互相訪問,跨宿主機是不能訪問;
  3. 虛擬機需要和宿主機配置成橋接模式,以便虛擬機可以在局域網內可見;

Bridge模式配置

Bridge方式即虛擬網橋的網絡連接方式,是客戶機和子網里面的機器能夠互相通信。可以使虛擬機成為網絡中具有獨立IP的主機。橋接網絡(也叫 物理設備共享)被用作把一個物理設備復制到一台虛擬機。網橋多用作高級設置,特別是主機多個網絡接口的情況。

┌─────────────────────────┐      ┌─────────────────┐
│          HOST           │      │Virtual Machine 1│
│ ┌──────┐      ┌───────┐ │      │    ┌──────┐     │
│ │ br0  │──┬───│ vnet0 │─│─ ─ ─ │    │ br0  │     │
│ └──────┘  │   └───────┘ │      │    └──────┘     │
│     │     │             │      └─────────────────┘
│     │     │   ┌───────┐ │      ┌─────────────────┐
│ ┌──────┐  └───│ vnet1 │─│─     │Virtual Machine 2│
│ │ eno0 │      └───────┘ │ │    │    ┌──────┐     │
│ └──────┘                │  ─ ─ │    │ br0  │     │
│ ┌──────┐                │      │    └──────┘     │
│ │ eno1 │                │      └─────────────────┘
│ └──────┘                │
└─────────────────────────┘

通過ip 命令查看宿主機配置文件的名字

ip addr

6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 38:63:bb:44:cf:6c brd ff:ff:ff:ff:ff:ff inet 192.168.188.132/24 brd 192.168.188.255 scope global dynamic eno1 valid_lft 2822sec preferred_lft 2822sec inet6 fe80::3a63:bbff:fe44:cf6c/64 scope link valid_lft forever preferred_lft forever

可以看到上面eno1是有獲取到ip地址的,相對應的文件在/etc/sysconfig/network-scripts/目錄中,ifcfg-eno1 宿主機的物理網卡配置文件

# cat ifcfg-eno1 TYPE=Ethernet BOOTPROTO=static NAME=eno1 DEVICE=eno1 UUID=242b3d4d-37a5-4f46-b072-55554c185ecf ONBOOT=yes BRIDGE="br0" # 指定橋接網卡的名稱

ifcfg-br0 橋接網卡配置在同一個目錄中。

# cat ifcfg-br0 BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=br0 UUID=242b3d4d-37a5-4f46-b072-55554c185ecf DEVICE=br0 ONBOOT=yes TYPE=bridge # 將制定為橋接類型 IPADDR=192.168.188.133 # 設置IP地址 PREFIX=24 # 設置子網掩碼 GATEWAY=192.168.188.1 # 設置網關

配置好之后,通過systemctl 命令重啟網卡。

ifup eno1 # 激活網卡 ifup br0 # 激活橋接網卡 # 兩種重啟網絡的方法 systemctl restart network.service service network restart # 校驗橋接接口 brctl show bridge name bridge id STP enabled interfaces br0 8000.3863bb44cf6c no eno1 vnet0 virbr0 8000.525400193f0f yes virbr0-nic

NAT模式

NAT(Network Address Translation網絡地址翻譯),NAT方式是kvm安裝后的默認方式。它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。

virsh net-edit default # 如果要創建或者修改NAT網絡,要先編輯default.xml: virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- default active no no

default是宿主機安裝虛擬機支持模塊的時候自動安裝的。

ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens1f0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 2c:44:fd:8c:43:44 brd ff:ff:ff:ff:ff:ff 3: ens1f1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 2c:44:fd:8c:43:45 brd ff:ff:ff:ff:ff:ff 4: ens1f2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 2c:44:fd:8c:43:46 brd ff:ff:ff:ff:ff:ff 5: ens1f3: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 2c:44:fd:8c:43:47 brd ff:ff:ff:ff:ff:ff 6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000 link/ether 38:63:bb:44:cf:6c brd ff:ff:ff:ff:ff:ff 7: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 38:63:bb:44:cf:6d brd ff:ff:ff:ff:ff:ff 8: eno3: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 38:63:bb:44:cf:6e brd ff:ff:ff:ff:ff:ff 9: eno4: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether 38:63:bb:44:cf:6f brd ff:ff:ff:ff:ff:ff 10: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 52:54:00:19:3f:0f 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 11: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500 link/ether 52:54:00:19:3f:0f brd ff:ff:ff:ff:ff:ff 12: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 38:63:bb:44:cf:6c brd ff:ff:ff:ff:ff:ff inet 192.168.188.132/24 brd 192.168.188.255 scope global dynamic br0 valid_lft 3397sec preferred_lft 3397sec inet 192.168.188.133/24 brd 192.168.188.255 scope global secondary br0 valid_lft forever preferred_lft forever inet6 fe80::3a63:bbff:fe44:cf6c/64 scope link valid_lft forever preferred_lft forever 19: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500 link/ether fe:54:00:72:12:a8 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fe72:12a8/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│
│ └──────┘    └───────┘ │   │                 │
│ ┌──────┐              │└ ─│   ┌──────┐      │
│ │ eno0 │              │   │   │ br0  │      │
│ └──────┘              │   │   └──────┘      │
│ ┌──────┐              │   └─────────────────┘
│ │ eno1 │              │
│ └──────┘              │
└───────────────────────┘

從圖上可以看出,虛擬接口和物理接口之間沒有連接關系,所以虛擬機只能在通過虛擬的網絡訪問外部世界,無法從網絡上定位和訪問虛擬主機。

virbr0是一個橋接器,接收所有到網絡192.168.122.*的內容。從下面命令可以驗證:

brctl show
# 輸出結果 # --------------------- # bridge name bridge id STP enabled interfaces # br0 8000.3863bb44cf6c no eno1 # vnet0 # virbr0 8000.525400193f0f yes virbr0-nic ip route # default via 192.168.188.1 dev br0 # 169.254.0.0/16 dev br0 scope link metric 1012 # 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 # 192.168.188.0/24 dev br0 proto kernel scope link src 192.168.188.132

同時,虛擬機支持模塊會修改iptables規則,通過命令可以查看:

iptables -t nat -L -nv
iptables -t filter -L -nv

如果沒有default的話,或者需要擴展自己的虛擬網絡,可以使用命令重新安裝NAT。

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,創建自己的虛擬網絡。

重新加載和激活配置:

virsh  net-define /etc/libvirt/qemu/networks/default.xml

標記為自動啟動:

virsh net-autostart default
# Network default marked as autostarted virsh net-start default

啟動網絡:

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網絡

virsh net-define /usr/share/libvirt/networks/management.xml
virsh net-start management
virsh net-autostart management

驗證

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 virsh net-list --all # Name State Autostart Persistent # ---------------------------------------------------------- # default active no no # management active yes yes

退出虛擬機

exit # 退出系統到登錄界面 Ctrl+5 # 從虛擬機登錄頁面,退出到宿主機命令行頁面 Ctrl+] # 或者下面

修改虛擬機配置信息

直接通過vim命令修改

vim  /etc/libvirt/qemu/centos72.xml

通過virsh命令修改

virsh edit centos72

克隆虛擬機

# 暫停原始虛擬機 virsh shutdown centos72 virt-clone -o centos72 -n centos.112 -f /home/vms/centos.112.qcow2 -m 00:00:00:00:00:01 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 不使用稀疏文件復制磁盤映像。

通過鏡像創建虛擬機

創建虛擬機鏡像文件

# 復制第一次安裝的干凈系統鏡像,作為基礎鏡像文件, # 后面創建虛擬機使用這個基礎鏡像 cp /home/vms/centos.88.qcow2 /home/vms/centos7.base.qcow2 # 使用基礎鏡像文件,創建新的虛擬機鏡像 cp /home/vms/centos7.base.qcow2 /home/vms/centos7.113.qcow2

創建虛擬機配置文件

# 復制第一次安裝的干凈系統鏡像,作為基礎配置文件。 virsh dumpxml centos.88 > /home/vms/centos7.base.xml # 使用基礎虛擬機鏡像配置文件,創建新的虛擬機配置文件 cp /home/vms/centos7.base.xml /home/vms/centos7.113.xml # 編輯新虛擬機配置文件 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>
virsh define /home/vms/centos7.113.xml
# Domain centos.113 defined from /home/vms/centos7.113.xml

動態更改cpu數量和內存大小

動態調整,如果超過給虛擬機分配的最大內存,需要重啟虛擬機。

virsh list --all
# Id 名稱 狀態 # ---------------------------------------------------- # 2 working112 running # 更改CPU virsh setvcpus working112 --maximum 4 --config # 更改內存 virsh setmaxmem working112 1048576 --config # 查看信息 virsh dominfo working112

掛載磁盤

創建磁盤

mkdir /home/vms

查看鏡像信息

virt-filesystems --long --parts --blkdevs -h -a working112.qcow2

# Name Type Size Parent # /dev/sda1 partition 200M /dev/sda # /dev/sda2 partition 9.8G /dev/sda # /dev/sda device 10G - qemu-img info working112.qcow2 # image: working112.qcow2 # file format: qcow2 # virtual size: 140G (150323855360 bytes) # disk size: 33G # cluster_size: 65536 # Format specific information: # compat: 1.1 # lazy refcounts: true

給虛擬機鏡像添加200G大小,注意需要停止working112虛擬機

qemu-img resize working112.qcow2 +200G
# Image resized.

首先,我們制作如下所示的磁盤的備份副本。

cp working112.qcow2 working112-orig.qcow2

然后我們運行下面的命令來增加 /dev/sda

virt-resize --expand /dev/sda1 working112-orig.qcow2 working112.qcow2

查看鏡像信息

qemu-img info working112.qcow2
# image: working112.qcow2 # file format: qcow2 # virtual size: 140G (150323855360 bytes) # disk size: 33G # cluster_size: 65536 # Format specific information: # compat: 1.1 # lazy refcounts: true

進入虛擬機virsh console working112 查看信息:

vgdisplay # 顯示卷組大小 lvdisplay # 顯示邏輯卷大小

卷組大小已增加,下面需要分配容量給邏輯卷

lvextend -L +60G /dev/centos/root

還有最后一步,分配好了需要做系統調整

# ext 系統格式使用: resize2fs /dev/centos/root # xfs 系統格式使用下面命令 xfs_growfs /dev/centos/root

常用命令說明

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 --all           # 查看所有運行和沒有運行的虛擬機 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+]

  1. ERROR Format cannot be specified for unmanaged storage. virt-manager 沒有找到存儲池,創建儲存池即可

  2. KVM VNC客戶端連接閃退 使用real vnc或者其它vnc客戶端連接kvm閃退,把客戶端設置中的ColourLevel值設置為rgb222或full即可

  3. virsh shutdown 無法關閉虛擬機 使用該命令關閉虛擬機時,KVM是向虛擬機發送一個ACPI的指令,需要虛擬機安裝acpid服務:

  4. operation failed: Active console session exists for this domain

# 方案1 $ ps aux | grep console $ kill -9 <進程號> # 方案2 $ /etc/init.d/libvirt-bin restart # 方案3 $ ps aux | grep kvm $ kill 對應的虛擬機進程




















centos 安裝qemu kvm

一 檢測硬件是否支持虛擬化

cat /proc/cpuinfo | egrep 'vmx|svm'

二 安裝kvm qemu軟件以及依賴軟件

yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install

systemctl start libvirtd
systemctl enable libvirtd

三 配置網絡(宿主機創建網橋)

/etc/sysconfig/network-scripts/ifcfg-br0


BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
UUID=b93c8c68-f3cb-4c02-9da8-1c704431860b
DEVICE=br0
ONBOOT=yes
TYPE=bridge
IPADDR=192.168.226.135
PREFIX=24
GATEWAY=192.168.226.2

 


ifcfg-eno1 物理網卡指定橋接網卡BRIDGE="br0"


TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
#UUID="b93c8c68-f3cb-4c02-9da8-1c704431860b"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE="br0"

 

配置路由轉發vi /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 0
修改為
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 允許內置路由

 


四 安裝虛擬機

virt-install --name=vm-12 \ #虛擬機名稱
--ram=1024 \ #內存
--vcpus=1 \ # cpu
--disk path=/vm/vm-12/vm-12.img,size=15,bus=virtio \ #磁盤大小
--accelerate \
--cdrom /vm/CentOS-7-x86_64-NetInstall-2009.iso \ # 鏡像文件
--vnc --vncport=5912 \ # vnc 端口
--vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \ # 網橋
--noautoconsole

五 啟動虛擬機並登錄


virsh list --all
virsh start vm-12

 

cockpit  基於linux的web圖形化管理工具

 

自定義存儲池

默認存儲池

存儲池Storage pools是在宿主機上放置虛擬機虛擬磁盤的存儲位置,默認的存儲是在/var/lib/libvirt/images目錄下,由於對硬盤和虛擬磁盤大小的空間規划,一般在/opt/kvm/images目錄或規划的目錄下集中存放虛擬機的虛擬磁盤方便管理,操作存儲卷的命令行是virsh。

建立存儲池目錄

創建目錄

mkdir -p /opt/kvm/images

更改目錄的所有者,並設置權限

chown -R qemu:qemu /opt/kvm/images

chmod -R 700 /opt/kvm/images

完成驗證

ls -al /opt/kvm

創建存儲池

定義一個存儲池綁定目錄
virsh pool-define-as StoragePool --type dir --target /opt/kvm/images

建立基於文件夾的存儲池

virsh pool-build StoragePool

激活StoragePool

virsh pool-start StoragePool

存儲池開機自動運行,使用virsh pool-autostart

virsh pool-autostart StoragePool

virsh pool-create-as –name vmware_pool –type dir –target /virhost/vmware

創建存儲池vmware_pool,類型為文件目錄,/virhost/vmware,與pool-define-as結果一樣

驗證查看存儲池信息

virsh pool-info StoragePool

查看創建的所有存儲池

virsh pool-list

StoragePool存儲池中創建一個卷,這個卷是用來做虛擬機的硬盤

創建卷baseCentos.qcow2,所在存儲池為StoragePool,容量10G,初始分配1G,文件格式類型qcow2

virsh vol-create-as --pool StoragePool --name baseCentos.qcow2 --capacity 10G --allocation 1G --format qcow2

查看卷信息名稱:baseCentos.qcow2,類型:文件,容量:10.00 GiB,分配:196.00 KiB

virsh vol-info /opt/kvm/images/baseCentos.qcow2

 

 

磁盤掛載---虛擬機出現故障,通過掛載磁盤修復

libguestfs   

a.1 查看磁盤鏡像分區信息

virt-df -h -d vm1

a.2 查看文件系統

virt-filesystems -d vm1

a.3 掛載磁盤鏡像分區

guestmount -d vm1 -m /dev/centos/root --rw /mnt

-m /dev/centos/root 虛擬機vm1的根目錄

--rw /mnt 掛載到宿主機的mnt目錄下,並且具有讀寫權限

a.4 取消掛載

gustunmount /mnt




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM