創建NAT網絡虛擬機:
KVM管理工具:
libvirt
使用最多的KVM虛擬化管理工具和應用程序接口,即通過libvirt調用KVM創建虛擬機,libvirt是KVM通用的訪問API,其不但能管理KVM,還能管理VMware、Xen、Hyper-V、virtualBox等虛擬化方案。
virsh:
是一個常用的管理KVM虛擬化的命令行工具,常用於管理運行在單個宿主機上的虛擬機,virsh是一個使用C語言編寫調用libvirt API的虛擬化管理命令行工具。
virt-manager:
virt-manager是一個虛擬化管理圖形軟件,其底層也是調用libvirt API來完成對虛擬機的操作,包括虛擬機的創建、刪除、啟動、停止以及一些簡單的監控功能等。
openstack:
openstack是一個開源的虛擬化編排工具,常用於構建大規模的虛擬化環境,用於管理成千上萬虛擬機的創建、啟
動、刪除等整個生命周期。
virsh-install命令使用幫助:
# virt-install --help
usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]
使用指定安裝介質新建虛擬機。
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--connect URI 使用 libvirt URI 連接到 hypervisor
通用選項:
-n NAME, --name NAME 客戶端事件名稱
--memory MEMORY 配置虛擬機內存分配。例如:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--vcpus VCPUS 為虛擬機配置的 vcpus 數。例如:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2,
--cpu CPU CPU 型號及功能。例如:
--cpu coreduo,+x2apic
--cpu host
--metadata METADATA 配置虛擬機元數據。例如:
--metadata name=foo,title="My pretty title",uuid=...
--metadata description="My nice long description"
安裝方法選項:
--cdrom CDROM 光驅安裝介質
-l LOCATION, --location LOCATION
安裝源(例如:nfs:host:/path、http://host/path
ftp://host/path)
--pxe 使用 PXE 協議從網絡引導
--import 在磁盤映像中構建虛擬機
--livecd 將光驅介質視為 Live CD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS
附加到使用 --location 引導的內核的參數
--initrd-inject INITRD_INJECT
使用 --location 為 initrd 的 root
添加給定文件
--os-variant DISTRO_VARIANT
在其中安裝 OS 變體的虛擬機,比如
'fedora18'、'rhel6'、'winxp' 等等。
--boot BOOT 配置虛擬機引導設置。例如:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (for containers)
--idmap IDMAP 為 LXC 容器啟用用戶名稱空間。例如:
--idmap uid_start=0,uid_target=1000,uid_count=10
設備選項:
--disk DISK 使用不同選項指定存儲。例如:
--disk size=10 (new 10GiB image in default location)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
配置虛擬機網絡接口。例如:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS 配置虛擬機顯示設置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER
配置虛擬機控制程序設備。例如:
--controller type=usb,model=ich9-ehci1
--input INPUT 配置虛擬機輸入設備。例如:
--input tablet
--input keyboard,bus=usb
--serial SERIAL 配置虛擬機串口設備
--parallel PARALLEL 配置虛擬機並口設備
--channel CHANNEL 配置虛擬機溝通頻道
--console CONSOLE 配置虛擬機與主機之間的文本控制台連接
--hostdev HOSTDEV 將物理 USB/PCI/etc
主機設備配置為與虛擬機共享
--filesystem FILESYSTEM
將主機目錄傳遞給虛擬機。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] 配置虛擬機聲音設備模擬
--watchdog WATCHDOG 配置虛擬機 watchdog 設備
--video VIDEO 配置虛擬機視頻硬件。
--smartcard SMARTCARD
配置虛擬機智能卡設備。例如:
--smartcard mode=passthrough
--redirdev REDIRDEV 配置虛擬機重定向設備。例如:
--redirdev usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON
配置虛擬機 memballoon 設備。例如:
--memballoon model=virtio
--tpm TPM 配置虛擬機 TPM 設備。例如:
--tpm /dev/tpm
--rng RNG 配置虛擬機 RNG 設備。例如:
--rng /dev/random
--panic PANIC 配置虛擬機 panic 設備。例如:
--panic default
虛擬機配置選項:
--security SECURITY 設定域安全驅動器配置。
--numatune NUMATUNE 為域進程調整 NUMA 策略。
--memtune MEMTUNE 為域進程調整內存策略。
--blkiotune BLKIOTUNE
為域進程調整 blkio 策略。
--memorybacking MEMORYBACKING
為域進程設置內存后備策略。例如:
--memorybacking hugepages=on
--features FEATURES 設置域 <features> XML。例如:
--features acpi=off
--features apic=on,eoi=on
--clock CLOCK 設置域 <clock> XML。例如:
--clock offset=localtime,rtc_tickpolicy=catchup
--pm PM 配置 VM 電源管理功能
--events EVENTS 配置 VM 生命周期管理策略
--resource RESOURCE 配置 VM 資源分區(cgroups)
虛擬化平台選項:
-v, --hvm 客戶端應該是一個全虛擬客戶端
-p, --paravirt 這個客戶端一個是一個半虛擬客戶端
--container 這台虛擬機需要一個容器客戶端
--virt-type HV_TYPE 要使用的管理程序名稱(kvm、qemu、xen
等等)
--arch ARCH 模擬的 CPU 構架
--machine MACHINE 要模擬的機器類型
其它選項:
--autostart 引導主機時自動啟動域。
--wait WAIT 等待安裝完成的分鍾數。
--noautoconsole 不要自動嘗試連接到客戶端控制台
--noreboot 完成安裝后不要引導虛擬機。
--print-xml [XMLONLY]
輸出所生成域 XML,而不是創建虛擬機。
--dry-run 完成安裝步驟,但不要創建設備或者定義
虛擬機。
--check CHECK 啟用或禁用驗證檢查。例如:
--check path_in_use=off
--check all=off
-q, --quiet 禁止無錯誤輸出
-d, --debug 輸入故障排除信息
使用 '--option=?' 或者 '--option help' 查看可用子選項
有關示例及完整選項語法,請查看 man page
虛擬機管理命令virsh:
[root@s1 ~]# virsh list #列出當前開機的
[root@s1 ~]# virsh list --inactive #列出關閉的虛擬機
[root@s1 ~]# virsh list --all #列出所有
[root@s1 ~]# virsh shutdown CentOS-7-x86_64 #正常關機
[root@s1 ~]# virsh start CentOS-7-x86_64 #正常開機
[root@s1 ~]# virsh destroy centos7 #強制停止/關機
[root@s1 ~]# virsh undefine Win_2008_r2-x86_64 #強制刪除
[root@s1 ~]# virsh autostart centos7 #設置當前虛擬機開機自啟動
檢查是否支持虛擬化
[root@s1 ~]# grep -E "vmx|svm" /proc/cpuinfo | wc -l
2
Ubuntu 18.04:
https://ubuntu.com/server/docs/virtualization-libvirt
[root@s1 ~]# apt install qemu-kvm virt-manager libvirt-daemon-system
# kvm-ok #驗證是否支持kvm
安裝kvm 軟件(CentOS7.x)
[root@s1 ~]# yum install qemu-kvm qemu-kvm-tools libvirt libvirt-client virt-manager virt-install -y
改virbr0 IP地址(默認是:192.168.122.1)
[root@s1 ~]# grep 192.168.122.1 /etc/ -R
[root@s1 ~]# vim /etc/libvirt/qemu/networks/default.xml
啟動libvirt服務
[root@s1 ~]# systemctl enable --now libvirtd
創建用於存放ISO鏡像的目錄
[root@s1 ~]# mkdir /data/ISOs -p
[root@s1 ~]# ll /data/ISOs/CentOS-7-x86_64-Minimal-2009.iso
創建磁盤
[root@s1 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 10G
創建虛擬機(默認網絡模式)
[root@s1 ~]# virt-install \
--virt-type kvm \
--name centos7-vm1 \
--ram 1024 --vcpus 2 \ --cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos7.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--autostart
啟動kvm管理器
[root@s1 ~]# virt-manager
使用命令列出所有虛擬機
[root@s1 ~]# virsh list --all
案例:創建Bridge網橋模式虛擬機
[root@s1 ~]# cd /etc/sysconfig/network-scripts/
[root@s1 ~]# cp ifcfg-eth0 ifcfg-br0
[root@s1 ~]# vim ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
BRIDGE=br0
#IPADDR=172.31.0.27
#NETMASK=255.255.0.0
#GATEWAY=172.31.0.254
#DNS1=114.114.114.114
#DNS2=223.6.6.6
[root@s1 ~]# vim ifcfg-br0
TYPE="Bridge"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="br0"
DEVICE="br0"
ONBOOT="yes"
IPADDR=172.18.8.127
NETMASK=255.255.0.0
GATEWAY=172.18.1.1
DNS1=172.18.1.1
DNS2=223.6.6.6
# 重啟網絡
[root@s1 ~]# systemctl restart network
# 查看br網橋
[root@s1 ~]# brctl show
# 創建磁盤
[root@s1 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-Bridge.qcow2 10G
# 創建虛擬機
[root@s1 ~]# virt-install \
--virt-type kvm \
--name centos7-vm2-Bridge \
--ram 1024 --vcpus 2 \ --cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos7-Bridge.qcow2 \ --network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
案例:制作模板啟動文件
通過copy虛擬機磁盤文件,可以快速創建虛擬機
[root@s1 ~]# cd /var/lib/libvirt/images/
[root@s1 ~]# cp centos7-Bridge.qcow2 centos7-Bridge2.qcow2
[root@s1 ~]# virt-install \
--virt-type kvm \
--name centos7-vm2-Bridge2 \
--ram 1024 --vcpus 2 \
--cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos7-Bridge2.qcow2 \ --network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
注意:啟動kvm虛擬機不需要進入系統,直接關機,然后設置boot下的IDE Disk啟動即可,copy完記得要改IP地址
案例:使用KVM創建虛擬機並配置好網橋
通過網橋安裝haproxy訪問后端web服務器
# 先准備好兩個網橋br0和br1,一個br0連接外網,一個不能連接外網br1
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost ~]# cp ifcfg-eth0 ifcfg-br0
[root@localhost ~]# vim ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
BRIDGE=br0
[root@localhost ~]# vim ifcfg-br0
TYPE="Bridge"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="br0"
DEVICE="br0"
ONBOOT="yes"
IPADDR=172.31.0.27
NETMASK=255.255.0.0
GATEWAY=172.31.0.254
DNS1=223.6.6.6
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost ~]# cp ifcfg-eth1 ifcfg-br1
[root@localhost ~]# vim ifcfg-eth1
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
BRIDGE=br1
[root@localhost ~]# vim ifcfg-br1
TYPE="Bridge"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="br1"
DEVICE="br1"
ONBOOT="yes"
IPADDR=10.0.0.27
NETMASK=255.255.255.0
# 重啟網絡
[root@localhost ~]# systemctl restart network
# 重啟網絡
[root@localhost ~]# systemctl restart network
# 創建兩台kvm虛擬機
#第一台這樣創建
[root@localhost ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-vm-bridge.qcow2 10G
[root@localhost ~]# virt-install \
--virt-type kvm \
--name centos-vm1-bridge \
--ram 1024 --vcpus 2 \ --cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos7-vm-bridge.qcow2 \ --network bridge=br0 --graphics vnc,listen=0.0.0.0 \ --noautoconsole
# 第一台虛擬機做好優化比如關閉selinux,防火牆
[root@kvm3 ~]# sed -ri 's#^(SELINUX=).*#\1disabled#' /etc/selinux/config
#第二台可以直接拷貝已經安裝好系統的創建
[root@localhost ~]# cd /var/lib/libvirt/images/
[root@localhost images]# ll
-rw-r--r--. 1 qemu qemu 1789657088 Jul 8 14:10 centos7-vm-bridge.qcow2
[root@localhost images]# cp centos7-vm-bridge.qcow2 vm2-bridge2.qcow2
[root@localhost ~]# virt-install \
--virt-type kvm \
--name centos-vm2-bridge \
--ram 1024 --vcpus 2 \
--cdrom=/data/ISOs/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/vm2-bridge2.qcow2 \ --network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
# 啟動管理
[root@localhost ~]# virt-manager
# 立馬關機不安裝,然后再重新運行kvm虛擬機
# 第二台測試ping外網,安裝web服務器
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl enable --now httpd
制作測試頁面
[root@localhost ~]# echo 123456 web > /var/www/html/index.html
測試看看能不能ping外網
[root@localhost ~]# ping www.baidu.com
ping: www.baidu.com: Name or service not known
# 第一台對外的機器安裝haproxy代理服務
[root@localhost ~]# yum install haproxy -y
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
listen web-80
bind 0.0.0.0:80
server 10.0.0.27 10.0.0.27:80 check inter 3000 fall 2 rise 5
# 啟動服務
[root@localhost ~]# systemctl start haproxy
# 開啟路由轉發
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
# 第一台可以連接外網的測試網絡連接
[root@localhost ~]# curl 10.0.0.27
123456 web
# 使用瀏覽器訪問http://10.0.0.27 看到的界面跟上面一樣
腳本
#!/bin/bash
# Date: 2021-07-08
# 用於拷貝多個kvm模板文件
muber=500
for i in `seq $muber`;do
# cpoy KVM模板文件
cp -av /vms/vmdisk/test-v1.qcow2 /vms/vmdisk/v${i}.qcow2
# 安裝並拉起kvm虛擬機
virt-install --virt-type kvm --name v${i} --ram 1024 --vcpus 2 \
--disk path=/vms/vmdisk/v${i}.qcow2 --network bridge=br0 \
--boot hd \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole --autostart
done
案例1:VMware遷移到KVM 機器
[root@localhost ~]# qemu-img --help
convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename
說明:
-f:原文件格式
-O:輸出什么格式ram,qcow2
filename:原文件名
output_filename:輸出什么文件名
范例:轉換VMware里面的格式為KVM(路徑要寫絕對路徑,要么進到路徑里面)
[root@localhost ISOs]# ll
-rw-r--r--. 1 root root 1936523264 Jul 8 15:25 centos8.vmdk
[root@localhost ~]# qemu-img convert -f vmdk -O qcow2 centos8.vmdk centos8.qcow2
[root@localhost ~]# mv centos8.qcow2 /var/lib/libvirt/images/
# 使用命令行
[root@localhost ~]# virt-install \
--virt-type kvm \
--name centos7-vm2 \
--ram 1024 --vcpus 2 \
--boot hd \
--disk path=/var/lib/libvirt/images/CentOS7-vmware.qcow2 \ --network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--autostart
[root@localhost ~]# mv centos8.qcow2 /var/lib/libvirt/images/
# 啟動virt-manager圖形界面選擇import導入,然后測試看看是否能正常使用(不推薦使用)
案例2:跨主機遷移(不會保留本機虛擬機)
准備兩台機器
172.31.0.17
172.31.0.27
# 把鏡像拷貝到其他機器
創建目錄
[root@localhost ~]# mkdir /data/ISOs -p
[root@localhost ISOs]# scp CentOS-7-x86_64-Minimal-2009.iso 172.31.0.27:/data/ISOs/
# 把磁盤拷貝到其他機器
# 安裝軟件
[root@s1 ~]# yum install qemu-kvm qemu-kvm-tools libvirt libvirt-client virt-manager virt-install -y
[root@localhost ~]# systemctl enable --now libvirtd
# 另外一台機器也要配置好網橋
# 啟動管理(必須要改不能相同的主機名)
[root@localhost ~]# virt-manager
# 立馬關機不安裝,然后再重新運行kvm虛擬機
[root@localhost ~]# yum install openssh-askpass -y
案例3:搭建NFS服務共享存儲跨主機遷移
准備三台服務器
172.31.0.17
172.31.0.27
172.31.0.37
# 172.31.0.37做共享存儲服務
# 安裝軟件NFS
[root@localhost ~]# yum install nfs-utils -y
創建掛載目錄並共享
[root@localhost ~]# mkdir /data/vmdata -p
[root@localhost ~]# vim /etc/exports
# 注意:*和()不能有空格,不然掛載會報錯為只讀
/data/vmdata *(rw,no_root_squash)
# 在172.31.0.17
[root@localhost ~]# showmount -e 172.31.0.37
Export list for 172.31.0.37:
/data/vmdata *
[root@localhost images]# ll
-rw-r--r--. 1 root root 1794899968 Jul 8 16:03 centos7-vm2-bridge2.qcow2
[root@localhost images]# scp centos7-vm2-bridge2.qcow2 172.31.0.37:/data/vmdata
# 命令掛載nfs
[root@localhost ~]# mount -t nfs 172.31.0.37:/data/vmdata /var/lib/libvirt/images/
# 命令創建虛擬機
[root@localhost ~]# virt-install --virt-type kvm --name centos7-vm1 --ram 1024 --vcpus 2 --cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2009.iso --disk path=/var/lib/libvirt/images/centos7-vm1-test.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
案例:遠程控制其他機器
打開virt-manager選擇添加其他機器




案例:通過virt-manager管理界面遷移虛擬機


注意:一定要開啟虛擬化技術,不然會報錯
總結:
報錯:比如權限問題?
關閉selinux,關閉防火牆,改文件夾的所屬和所屬組,同時在虛擬機里面重新創建虛擬機
#這是在nfs機器操作
[root@mysql2 ~]# id qemu
uid=107(qemu) gid=107(qemu) groups=107(qemu),36(kvm)
[root@mysql2 ~]# chown qemu:qemu /data/vmdata/centos7-vm-bridge.qcow2
[root@mysql2 ~]# setfacl -m u:qemu:rwx /data/vmdata/centos7-vm-bridge.qcow2
[root@mysql2 ~]# setfacl -m u:qemu:rwx /data/vmdata/
# 下面的操作是在kvm機器上操作
[root@kvm3 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-vm-bridge.qcow2 10G
[root@kvm3 ~]# ll /var/lib/libvirt/images/centos7-vm-bridge.qcow2
[root@kvm3 ~]# virt-install --virt-type kvm --name centos7-vm1 --ram 1024 --vcpus 2 --disk path=/var/lib/libvirt/images/centos7-vm-bridge.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole --import
