linux部署[转]_实战CentOS7安装且使用KVM虚拟机

蛋蛋 2024年02月22日 26 0

  • 本文作者: wumingx
  • 本文链接: https://www.wumingx.com/linux/centos-kvm.html
  • 本文主题: 实战CentOS7安装且使用KVM虚拟机
  • 版权声明: 本站所有文章除特别声明外,转载请注明出处!如有侵权,请联系我删除。

镜像格式

介绍

  • RAW格式是直接给云服务器进行读写的文件。RAW不支持动态增长空间,是镜像中I/O性能最好的一种格式。
  • QCOW2格式镜像是QEMU模拟器支持的一种磁盘镜像,是用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的RAW格式镜像相比,QCOW2格式有如下几个特性:

    • 支持更小的磁盘占用。
    • 支持写时拷贝(CoW,Copy-On-Write),镜像文件只反映底层磁盘变化。
    • 支持快照,可以包含多个历史快照。
    • 支持压缩和加密,可以选择ZLIB压缩和AES加密。
  • VMDK是VMware创建的虚拟硬盘格式。一个VMDK文件代表VMFS(云服务器文件系统)在云服务器上的一个物理硬盘驱动。

  • VHD是微软提供的一种虚拟硬盘文件格式。VHD文件格式可以被压缩成单个文件存放到宿主机的文件系统上,主要包括云服务器启动所需的文件系统。微软在Windows Server 2012中的Hyper-V引入的一个新版本的VHD格式,称为VHDX。与VHD格式相比,VHDX具有更大的存储容量。它在电源故障期间提供数据损坏保护,并且优化了磁盘结构对齐方式,以防止新的大扇区物理磁盘性能降级。
  • vdi(Virtual Disk Image)是Oracle的VirtualBox虚拟机中的存储格式

格式转化

在日常使用镜像的过程中,您可能需要将某格式的镜像转换为其他格式,qemu-img工具支持vhd、vmdk、qcow2、raw、vhdx、qcow、vdi或qed格式的镜像之间相互转换。在centos上,直接使用yum install qemu-img即可。

基本语法

1
qemu-img command [command options]

主要参数

  • info : 查看镜像的信息;
  • create: 创建镜像;
  • check: 检查镜像;
  • convert: 转化镜像的格式;
  • snapshot :管理镜像的快照;
  • rebase: 在已有的镜像的基础上创建新的镜像;
  • resize: 增加或减小镜像大小

创建镜像, create

1
2
[root@ubuntu ~]# qemu-img create -f raw -o size=5G /data/raw/raw-disk01.raw  
Formatting '/data/raw/raw-disk01.raw', fmt=raw size=5368709120
  • -f fmt: 执行格式
  • -o options: list of format specific options in a name1=value1,name2=value2… format. size=5G, 5G大小
1
2
3
4
5
6
7
[root@ubuntu cache2]# qemu-img create -f raw -o size=1G t1.raw
Formatting 't1.raw', fmt=raw size=1073741824
[root@ubuntu cache2]# qemu-img create -f qcow2 -o size=1G t2.raw
Formatting 't2.raw', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off
[root@ubuntu cache2]# ll -h t1.raw t2.raw
-rw-r--r-- 1 root root 1.0G Aug 22 23:30 t1.raw
-rw-r--r-- 1 root root 193K Aug 22 23:31 t2.raw

从显示的文件大小上面是可以看出区别的。

查看镜像的信息, info

1
2
3
4
5
[root@ubuntu ~]# qemu-img info /data/raw/raw-disk01.raw  
image: /data/raw/raw-disk01.raw
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 0

镜像格式转换, convert

1
2
3
4
5
6
7
8
9
10
[root@ubuntu ~]# qemu-img convert -f raw -O qcow2 /data/raw/raw-disk01.raw /data/raw/qcow2-disk01.qcow2
[root@ubuntu ~]# qemu-img info /data/raw/qcow2-disk01.qcow2
image: /data/raw/qcow2-disk01.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
  • -f: 指定原镜像的格式,会自动检查可以省略
  • -O: 指定目标镜像格式

镜像快照, snapshot

1
2
3
4
5
[root@ubuntu ~]# qemu-img snapshot /data/raw/qcow2-disk01.qcow2 -c /data/raw/qcow2-disk01.qcow2.snapshot 
[root@ubuntu ~]# qemu-img snapshot /data/raw/qcow2-disk01.qcow2 -l
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 /data/raw/qcow2-disk01.qcow2.snapshot 0 2019-06-24 20:42:51 00:00:00.000
  • -c: 创建快照
  • -l: 列出快照
  • -d: 删除快照
    *ps: raw不支持快照,只有qcow2支持快照

调整镜像大小, resize

1
2
3
4
5
6
7
[root@ubuntu ~]# qemu-img resize /data/raw/disk02.raw +2G
Image resized.
[root@ubuntu ~]# qemu-img info /data/raw/disk02.raw
image: /data/raw/disk02.raw
file format: raw
virtual size: 7.0G (7516192768 bytes)
disk size: 0

ps: raw格式镜像大小都可以调整,qcow2格式镜像只能增大,不能缩小

检查镜像,check

对磁盘镜像文件进行一致性检查,查找镜像文件中的错误,目前仅支持对“qcow2”、“qed”、“vdi”格式文件的检查。qcow2是QEMU 0.8.3版本引入的镜像文件格式,也是目前使用最广泛的格式。qed(QEMU enhanced disk)是从QEMU 0.14版开始加入的增强磁盘文件格式,为了避免qcow2格式的一些缺点,也为了提高性能,不过目前还不够成熟

1
2
3
[root@ubuntu ~]# qemu-img check -f qcow2 /data/raw/qcow2-disk01.qcow2   
No errors were found on the image.
Image end offset: 393216
  • -f fmt: 指定文件的格式,如果不指定格式qemu-img会自动检测

安装KVM环境

检测是否支持KVM

KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。

1
2
3
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

安装方法

通过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 创建和管理桥接设备的工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装 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服务,并且设置其开机自动启动

1
2
systemctl start libvirtd
systemctl enable libvirtd

查看状态操作结果,如Active: active (running),说明运行情况良好

1
2
3
4
5
6
7
8
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

安装虚拟机

有2种方式,经过个人测试,建议使用VNC来创建,兼容性更好。

通过VNC来远程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 先创建一个磁盘
[root@localhost cache2]# qemu-img create -f qcow2 test.qcow2 10G
Formatting 'test.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
# 查看磁盘信息
[root@localhost cache2]# qemu-img info test.qcow2
image: test.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
# 创建虚拟机,最好是使用qemu-img create先创建好qcow2文件
[root@localhost cache2]$ virt-install --name centOS78 --virt-type kvm --ram 8192 --vcpus=4 --cdrom=/tmp/CentOS-7-x86_64-Minimal-2003.iso --disk path=/cache2/centos78.qcow2,size=40,format=qcow2 --network=bridge:br0 --graphics vnc,listen=0.0.0.0,port=5962,password=xxxxx --noautoconsole

Starting install...
Allocating 'centos78.qcow2' | 40 GB 00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

通过 https://www.realvnc.com/en/connect/download/viewer/ 下载这个工具就可以通过VNC来远程了。运行完成之后,centos7的系统可以使用 grubby --update-kernel=ALL --args="console=ttyS0"来更新下,这时就可以实现console了。

通过重定向来远程

1
virt-install --virt-type=kvm --name=centos88 --vcpus=2 --memory=4096 --location=/tmp/CentOS-7-x86_64-Minimal-2003.iso --disk path=/cache2/centos88.qcow2,size=40,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force

创建成功之后,可以通过virsh console centos88来远程上机器操作了。

添加硬件

磁盘相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16


# 加磁盘
[root@12038849 ~]# virsh attach-disk slone /cache2/slone/data.qcow2 hdc --subdriver qcow2 --persistent
Disk attached successfully
# 查看磁盘
[root@12038849 slone]# virsh domblklist slone
Target Source
------------------------------------------------
hda /cache2/slone/system.qcow2
hdb -
sdb /cache2/slone/data.qcow2

# 卸载磁盘
[root@12038849 slone]# virsh detach-disk slone /cache2/slone/data.qcow2
Disk detached successfully

https://opengers.github.io/virtualization/kvm-online-add-device/

快照

常用使用方法:

  • 创建默认快照(一般为一串数字):virsh snapshot-create 虚拟机名称

  • 创建自定义名称快照:virsh snapshot-create-as 虚拟机名称 快照名称

  • 查看虚拟机相关的快照:virsh snapshot-list 虚拟机名
  • 删除快照:virsh snapshot-delete 虚拟机名 快照名称
  • 恢复快照:virsh snapshot-revert 虚拟机名称 快照名称
1
2
3
4
5
6
7
8
9
10
11
[root@localhost Plcm-SoftMcuMain]# virsh snapshot-list --domain centos88
Name Creation Time State
------------------------------------------------------------

[root@localhost Plcm-SoftMcuMain]#
[root@localhost Plcm-SoftMcuMain]# virsh snapshot-create-as --domain centos88 centos78init
Domain snapshot centos78init created
[root@localhost Plcm-SoftMcuMain]# virsh snapshot-list --domain centos88
Name Creation Time State
------------------------------------------------------------
centos78init 2020-07-28 11:31:58 +0800 running

克隆虚拟机

1
2
3
4
5
6
7
8
9
10
# 暂停原始虚拟机
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

# 实例
[root@12038849 template]# virt-clone -o slone -n slthree -f /cache2/slthree/system.qcow2 -f /cache2/slthree/data.qcow2
Allocating 'system.qcow2' | 200 GB 00:00:12
Allocating 'data.qcow2' | 1.0 TB 00:00:00
Clone 'slthree' created successfully.

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 不使用稀疏文件复制磁盘映像。

虚拟机迁移

需求:hids01需要迁移一台虚拟机到hids02、hids03的机器上。

先将以下文件scp到其他的机器上:

1
2
3
4
5
6
7
8
[root@hids01 hids]# virsh domblklist hids 
Target Source
------------------------------------------------
hda /cache1/hids/system.qcow2
hdb /cache1/hids/data.qcow2
hdc -

[root@hids01 hids]# virsh dumpxml hids >hids.xml

在hids02、hids03的机器上面修改hids.xml文件,修改name、uuid、mac这三项即可

1
2
3
4
5
cat hids.xml |egrep "<name>|mac address|uuid"

<name>hids</name>
<uuid>5a1a650a-7ef4-47ae-91fa-973f108b3142</uuid>
<mac address='52:54:00:84:46:41'/>
  • mac地址的生成方法:for i in {1..6}; do printf "%0.2X:" $[ $RANDOM % 0x100 ]; done | sed 's/:$/\n/'
  • uuid的生成方法:uuidgen

接下来按以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@hids02 hids]# virsh define --file hids.xml
Domain hids defined from hids.xml

[root@hids02 hids]# virsh edit hids
Domain hids XML configuration edited.

[root@hids02 hids]# virsh list --all
Id Name State
----------------------------------------------------
- hids shut off

[root@hids02 hids]# virsh start hids
Domain hids started

动态更改cpu数量和内存大小

动态调整,如果超过给虚拟机分配的最大内存,需要重启虚拟机。

1
2
3
4
5
6
7
8
9
10
11
virsh list --all
# Id 名称 状态
# ----------------------------------------------------
# 2 working112 running

# 更改CPU
virsh setvcpus working112 --maximum 4 --config
# 更改内存
virsh setmaxmem working112 1048576 --config
# 查看信息
virsh dominfo working112

网络模式

KVM 虚拟机默认是基于 NAT 的网络配置,只有同一宿主机的虚拟键之间可以互相访问,跨宿主机是不能访问;如果要实现跨宿主机可以访问,需要将网络模式配置成桥接模式。

NAT模式

NAT(Network Address Translation网络地址翻译),NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
virsh net-edit default # 如果要创建或者修改NAT网络,要先编辑default.xml:
<network>
<name>default</name>
<uuid>ab22bbdf-9889-4fea-978c-67c177e586d6</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:a4:0c:91'/>
<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>

virsh net-list --all

Name State Autostart Persistent
----------------------------------------------------------
default active no no

其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。几个虚拟机管理模块产生的接口关系如下图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌───────────────────────┐                      
│ HOST │
│ ┌──────┐ │ ┌─────────────────┐
│ │ br0 │─┬──────┐ │ │Virtual Machine 1│
│ └──────┘ │ │ │ │ ┌──────┐ │
│ │ │ ┌───────┐ │ ─ │ │ br0 │ │
│ │ │ │ vnet0 │─│┘ │ └──────┘ │
│ ┌──────┐ │ └───────┘ │ └─────────────────┘
│ │virbr0│ │ ┌───────┐ │ ┌─────────────────┐
│ │ -nic │ └──│ vnet1 │─│┐ │Virtual Machine 2│
│ └──────┘ └───────┘ │ │ │
│ ┌──────┐ │└ ─│ ┌──────┐ │
│ │ eno0 │ │ │ │ br0 │ │
│ └──────┘ │ │ └──────┘ │
│ ┌──────┐ │ └─────────────────┘
│ │ eno1 │ │
│ └──────┘ │
└───────────────────────┘

从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。

virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:

1
2
3
4
5
6
7
8
9
10
11
12
brctl show
# 输出结果
bridge name bridge id STP enabled interfaces
br0 8000.001631f44361 no eth7
vnet0
virbr0 8000.525400a40c91 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规则,通过命令可以查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
iptables -t nat -L -nv
# 输出结果
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE

iptables -t filter -S |egrep "192.168|virbr0"
# 输出结果
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT

如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。

1
virsh net-define /usr/share/libvirt/networks/default.xml

此命令定义一个虚拟网络,default.xml的内容:

1
2
3
4
5
6
7
8
9
10
<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,创建自己的虚拟网络。

重新加载和激活配置:

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

标记为自动启动:

1
2
3
4
virsh net-autostart default
# Network default marked as autostarted

virsh net-start default

启动网络:

1
2
virsh net-start default
# Network default started

网络启动后可以用命令brctl show 查看和验证。

总结一下:如果想自定义一个网络,假设是需要创建名为management的NAT网络,vi /usr/share/libvirt/networks/management.xml

1
2
3
4
5
6
7
8
9
10
<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网络

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

Bridge模式配置

Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。桥接网络(也叫 物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─────────────────────────┐      ┌─────────────────┐
│ HOST │ │Virtual Machine 1│
│ ┌──────┐ ┌───────┐ │ │ ┌──────┐ │
│ │ br0 │──┬───│ vnet0 │─│─ ─ ─ │ │ br0 │ │
│ └──────┘ │ └───────┘ │ │ └──────┘ │
│ │ │ │ └─────────────────┘
│ │ │ ┌───────┐ │ ┌─────────────────┐
│ ┌──────┐ └───│ vnet1 │─│─ │Virtual Machine 2│
│ │ eno0 │ └───────┘ │ │ │ ┌──────┐ │
│ └──────┘ │ ─ ─ │ │ br0 │ │
│ ┌──────┐ │ │ └──────┘ │
│ │ eno1 │ │ └─────────────────┘
│ └──────┘ │
└─────────────────────────┘

通过ip 命令查看宿主机配置文件的名字

1
2
3
4
5
6
7
8
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 宿主机的物理网卡配置文件

1
2
3
4
5
6
7
# cat ifcfg-eno1
DEVICE=eno1
TYPE="Ethernet"
BOOTPROTO="static"
ONBOOT="yes"

BRIDGE="br0" # 指定桥接网卡的名称

ifcfg-br0 桥接网卡配置在同一个目录中。

1
2
3
4
5
6
7
8
9
# cat ifcfg-br0
DEVICE="br0"
TYPE="bridge"
BOOTPROTO="static"
ONBOOT="yes"
TYPE=bridge # 将制定为桥接类型
IPADDR=192.168.188.133 # 设置IP地址
PREFIX=24 # 设置子网掩码
GATEWAY=192.168.188.1 # 设置网关

配置好之后,通过systemctl 命令重启网卡。

1
2
3
4
5
6
7
8
9
10
11
12
13
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

端口转发

现在我们还以上述VM为例,目前该KVM的公网IP为211.11.61.7,VM的IP为192.168.188.115,现在我要求通过访问KVM的2222端口访问VM的22端口。

编辑vi /etc/rc.d/rc.local 添加下面命令,达到开机重启配置网络转发规则。

1
2
3
4
5
6
7
8
9
# 启动网络转发规则
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

常用命令

virsh常用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 <虚拟机名称> # 连接虚拟机

参考资料

CentOS7安装KVM虚拟机详解

https://loveyu.org/5538.html

https://www.leolan.top/index.php/posts/134.html

Centos7.4安装kvm虚拟机(使用virt-manager管理)

https://blog.csdn.net/linzhaolover/article/details/52209477

KVM之磁盘管理工具qemu-img小结

Last Updated: 2024/02/22 15:28:05
linux部署[转]_基于centos7.6制作自定义的ISO镜像 [OP](naiveproxy) error: loading 'build.ninja': No such file or directory