kvm的安裝以及例項管理
kvm
服務安裝
檢視機器是否支援虛擬化
cat /proc/cpuinfo | egrep ‘vmx|svm’
安裝軟體:
yum groupinstall "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y yum install -y qemu-kvm libvirt ###qemu-kvm用來建立虛擬機器硬碟,libvirt用來管理虛擬機器 yum install -y virt-install ###用來建立虛擬機器
跟虛擬機器相關的目錄:
/etc/libvirt/storage #儲存池配置檔案存放位置
/etc/libvirt/qemu/ #虛擬機器配置檔案存放位置
/etc/libvirt/qemu/networks #虛擬網路配置檔案存放位置
/var/lib/libvirt/images/ #虛擬磁碟檔案存放位置(預設儲存池)
啟動服務:
systemctl start libvirtd
圖形管理器
virt-manager
命令方式安裝虛擬機器:
儲存
儲存池:
儲存池(Storage pools)是放置虛擬機器的儲存位置,儲存池可以建立在好幾種方式的儲存上,我們以基於目錄為儲存池來學習。
預設儲存池位置: **/var/lib/libvirt/images/**
建立儲存池(目錄)[非必須]
1.圖形方式:
編輯 → 連線詳情 → 儲存
2.命令方式:
# mkdir /kvm/disk 定義儲存池 # virsh pool-define-as vmdisk --type dir --target /kvm/disk 檢視已定義的儲存池 #virsh pool-list --all 啟用並自動啟動已定義的儲存池,儲存池不啟用無法使用。 # virsh pool-start vmdisk # virsh pool-autostart vmdisk
這裡vmdisk儲存池就已經建立好了,可以直接在這個儲存池中建立虛擬磁碟檔案了。
儲存卷:
儲存卷(storage volume)指虛擬磁碟檔案,可以理解為虛擬機器的硬碟
在儲存池中建立虛擬機器儲存卷
virsh命令:
建立儲存卷:
# virsh vol-create-as vmdisk mini.qcow2 20G --format qcow2
檢視儲存卷:
# virsh vol-list vmdisk
名稱 路徑
----------------------------------------------------------------------------
mini.qcow2 /kvm/disk/mini.qcow2
3.qemu命令(不會被儲存池管理)
# qemu-img create -f qcow2 /var/lib/libvirt/images/mini.qcow2 20G
注1:KVM儲存池主要是體現一種管理方式,可以通過掛載儲存目錄,lvm邏輯卷的方式建立儲存池
注2:KVM儲存池也要用於虛擬機器遷移任務。
儲存池相關管理命令
取消啟用儲存池
# virsh pool-destroy vmdisk
取消定義儲存池
# virsh pool-undefine vmdisk
網路
KVM虛擬機器網路配置的兩種方式:NAT方式和Bridge方式。
NAT–使用者網路(User Networking):讓虛擬機器訪問主機、網際網路或本地網路上的資源的簡單方法,但是不能從網路或其他的客戶機訪問客戶機。
Bridge–虛擬網橋(Virtual Bridge):這種方式要比使用者網路複雜一些,但是設定好後客戶機與網際網路,客戶機與主機之間的通訊都很容易。
一. Bridge方式
Bridge方式即虛擬網橋的網路連線方式,是客戶機和子網裡面的機器能夠互相通訊。可以使虛擬機器成為網路中具有獨立IP的主機。
配置:
1、編輯修改網路裝置指令碼檔案,增加網橋裝置br0
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
TYPE=bridge
IPADDR=192.168.50.40
GATEWAY=192.168.40.254
DNS1=114.114.114.114
DNS2=8.8.8.8
2、編輯修改網路裝置指令碼檔案,修改網絡卡裝置ens33
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BRIDGE=br0
BOOTPROTO=none
DEVICE=enp33
ONBOOT=yes
3、重啟網路服務
# /etc/init.d/network restart
4、校驗橋接介面
# ifconfig br0
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.f0795962c1cc no en33
virbr0 8000.5254005a2e43 yes virbr0-nic
啟動STP
# brctl stp sr0 on
二. NAT方式(預設)
NAT方式是kvm安裝後的預設方式。它支援主機與虛擬機器的互訪,同時也支援虛擬機器訪問網際網路,但不支援外界訪問虛擬機器。
修改NAT網路
例:將default網路的dhcp功能關閉
1). 修改網路配置檔案
# virsh net-edit defult #刪除以下三行
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
2). 重啟default網路
# virsh net-destroy default #關閉default網路
# virsh net-start default #啟動default網路
1.建立NAT網路:
1). 圖形方法:
2). 命令方法:
# cd /etc/libvirt/qemu/networks/
建立配置檔案:
# cp default.xml nat-20.xml
修改配置檔案:
# vim nat-20.xml #改名稱,UUID,MAC地址
#加一行nat網路名稱
建立網路:
# virsh net-create nat-20.xml
檢視網路:
# virsh net-list --all
# virsh net-define /etc/libvirt/qemu/networks/nat-20.xml
# virsh net-autostart nat-20
虛擬機器安裝
virt-install -n c7 \
--memory 1024 \
--vcpus=1 \
--cdrom /data/iso/CentOS-7-x86_64-DVD-1908.iso \
--disk /data/img/c7.qcow2,size=10,format=qcow2,bus=scsi \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
引數說明:
--name # 虛擬機器名稱,需全域性惟一
--memory # 虛擬機器內在大小,單位為MB
--vcpus # VCPU個數及相關配置
--virt-type # 使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用virsh capabilities命令獲取;
--cdrom # 光碟安裝介質
--disk # 指定儲存裝置及其屬性
--network bridge=br0 # 將虛擬機器連入宿主機的網路中
--graphics vnc,listen=0.0.0.0 # 使vnc可以連線
--noautoconsole # 禁止自動連線至虛擬機器的控制檯
虛擬機器管理:
連線
vncview 埠可用netstat -tnlp 檢視
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-pvHt7cpn-1607307552811)(_v_images/20201019113245168_30097.png)]
安裝過程和vmware 安裝無異
vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
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=eth0
UUID=0e913cd6-599e-4bdb-a2ca-2c15bb87ea60
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.50.100
GATEWAY=192.168.50.254
DNS1=114.114.114.114
DNS2=8.8.8.8
[[email protected] ~]# ping -c 3 g.cn
PING g.cn (203.208.41.98) 56(84) bytes of data.
64 bytes from 203.208.41.98 (203.208.41.98): icmp_seq=1 ttl=128 time=22.7 ms
64 bytes from 203.208.41.98 (203.208.41.98): icmp_seq=2 ttl=128 time=18.9 ms
64 bytes from 203.208.41.98 (203.208.41.98): icmp_seq=3 ttl=128 time=22.2 ms
--- g.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 18.998/21.344/22.752/1.678 ms
[[email protected] ~]#
使用 ssh 可直接連線
初始化
systemctl stop firewalld
systemctl stop NetworkManager
systemctl disable firewalld
systemctl disable NetworkManager
宿主機能使用console命令連線
systemctl start [email protected]
systemctl enable [email protected]
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
epel源
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y net-tools vim lrzsz tree screen lsof tcp wget tcpdump nc mtr nmap openssl-devel ntpdate glances bash-completion psmisc
檔案描述符數量
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
記錄歷史命令
echo 'export HISTTIMEFORMAT=" %F %T `whoami` "' >> /etc/profile
source /etc/profile
ntp配置
crontab -e
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com
【核心引數優化】
cat /etc/sysctl.conf
# 表示套接字由本端要求關閉,這個引數決定了它保持在FIN-wAIT-2狀態的時間,預設值是60秒,建議調整為2,該引數對應系統路徑為:/proc/sys/net/ipv4/tcp_fin_timeout 60
net.ipv4.tcp_fin_timeout = 2
# 表示開啟TCP連結中TIME_WAIT sockets的快速回收,該引數對應系統路徑為:/proc/sys/net/ipv4/tcp_tw_recycle,預設為0 表示關閉,不建議開>啟,因為nat網路問題
net.ipv4.tcp_tw_reuse = 1
# reuse和recycle這倆個引數是為防止生產環境下web,squid等業務伺服器time_wait網路狀態數量過多設定的
net.ipv4.tcp_tw_recycle = 0
#表示開啟SYN Cookies功能,當出現SYN等待佇列溢位時,啟用Cookies來處理,可防範少量SYN攻擊,該引數對應系統路徑為:/proc/sys/net/ipv4/tcp_syscookies,預設為1,表示開啟
net.ipv4.tcp_syncookies = 1
# 關閉ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1
#允許系統開啟的埠範圍,不建議從1024開始,因為某些埠會存在10000以內。一般情況下已夠用。
net.ipv4.ip_local_port_range = 10000 65000
快取設定
yum makecache
克隆
將c7克隆一個為c7-2
virt-clone -o c7 -n c7-2 -f /data/img/c7-2.qcow2
修改ip地址之後即可使用
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-1PvkWbB4-1607307552814)(_v_images/20201019115130279_16425.png =467x)]
刪除
#!/bin/bash
#delete KVM host completely
read -p "please input host that you want to delete:" $host
virsh destroy $host
virsh undefine $host
rm -f /var/lib/libvirt/images/$host.qcow2
快照
建立
virsh snapshot-create-as c7 c7-mir
恢復
yum install acpid -y
恢復快照前虛擬機器需要關閉
virsh snapshot-revert c7 c7-mir
刪除
刪除快照也需要虛擬機器關閉
virsh snapshot-delete c7 c7-mir
檢視
[[email protected] img]# virsh snapshot-list c7
Name Creation Time State
------------------------------------------------------------
c7-mir 2020-10-18 23:58:49 -0400 running
[[email protected] img]#
virsh snapshot-dumpxml c7 c7-mir ## 檢視一個快照的詳細資訊
virsh snapshot-current #檢視最新的快照
遷移
虛擬機器遷移分為冷遷和熱遷
冷遷:又叫靜態遷移,虛擬機器在關機狀態下,拷貝虛擬機器虛擬磁碟檔案與配置檔案到目標主機中,實現的遷移。
熱遷:又叫動態遷移,虛擬機器無需關機,無需拷貝虛擬磁碟檔案,但是需要遷移到的虛擬主機之間需要有相同的目錄結構虛擬機器磁碟檔案.
基於共享儲存的熱遷移
冷遷
遷移源主機: 192.168.50.40 km
遷移目標主機: 192.168.50.41 km2
1.確定虛擬機器處於關機狀態
# virsh list --all
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-z9Ev8yvD-1607307552815)(_v_images/20201019121720164_5506.png =498x)]
2準備遷移c7虛擬機器,檢視該虛擬機器配置的磁碟檔案
virsh domblklist c7
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-aB6nhsGl-1607307552818)(_v_images/20201019122004881_14856.png =360x)]
3.拷貝磁碟檔案,配置檔案到目標宿主機
# cd /data/img
# rsync c7.qcow2 192.168.50.41:/data/img
# cd /etc/libvirt/qemu
# rsync c7.xml 192.168.50.41:/etc/libvirt/qemu
4.在目標宿主機上啟用虛擬機器
# virsh define /etc/libvirt/qemu/test.xml
5.啟動虛擬機器
# virsh start test
熱遷(基於本地儲存)
遷移源主機: 192.168.50.40
遷移目標主機: 192.168.50.41
使用tcp認證
配置libvirtd服務** 源宿主機和目標宿主機都要執行**
vim /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
auth_tcp = "none"
mdns_adv = 0
配置libvirtd監聽方式(無論是tcp,ssh,tls認證方式都需要配置) ** 源宿主機和目標宿主機都要執行**
# vim /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
**編輯/etc/libvirt/qemu.conf檔案 **源宿主機和目標宿主機都要執行
#vim /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
重啟libvirtd服務,使配置生效, 源宿主機和目標宿主機都要執行
systemctl restart libvirtd
檢查埠和程序,源宿主機和目標宿主機都要執行
# netstat -tanp |grep libv
tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 5061/libvirtd
原機器和目標機器要做好hosts解析
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-y4Lo7cr9-1607307552819)(_v_images/20201019143319844_22546.png =650x)]
在源宿主機測試連線目標宿主機
# virsh -c qemu+tcp://192.168.50.41/system list --all
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-iAGbjQBr-1607307552820)(_v_images/20201019141636057_21240.png =580x)]
在目標宿主機上建立同樣大小的磁碟檔案,名稱,路徑,大小都要一樣
# virsh vol-create-as img c7-2.qcow2 10G --format qcow2
遷移
# virsh migrate --live --copy-storage-all --unsafe --persistent test qemu+tcp://km-2/system
不知道是不是宿主機是vmware 的緣故報錯說cpu 不支援
硬體管理
新增硬體都可以用virsh edit DomainName 來修改
cpu
生成環境只增不減
virsh setvcpus c7 2
硬碟
建立一個硬碟
qemu-img create -f qcow2 c7-sdb.qcow2 20G
#新建xml檔案
[[email protected] img]# vim temp.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/data/img/c7-sdb.qcow2'/>
<target dev='sdb' bus='scsi'/>
</disk>
#載入xml檔案 引數 --config 是寫入配置檔案 --live 是熱新增
virsh attach-device c7 temp.xml --config --live
Device attached successfully
#檢視虛擬機器c7的硬碟資訊
virsh domblklist c7