|
|

楼主 |
发表于 2025-11-23 21:01
|
显示全部楼层
#############################################################################################################
KVM
这个教程怎么说呢,就纯操作,不讲解
https://cloud.tencent.com/developer/article/1616571
这个教程是创建网桥,然后里面有用的信息就是,KVM安装好以后默认会创建一个NAT类型的网络
https://cloud.tencent.com/developer/article/2463294?policyId=1004
命令行安装kvm虚拟机
第一步:
把物理机的IP改为固定IP,不要自动获取
这一步没必要,物理机的IP不会因为安装软件而改变的
第二步:
关闭SELINUX,我问了问AI,说selinux可能会导致虚拟机创建的过程中出现权限问题
是否要关闭防火墙看情况
第一步:
安装
yum install qemu-img qemu-kvm libvirt libguestfs-tools virt-install bridge-utils
yum install qemu-img qemu-kvm libvirt virt-install bridge-utils
qemu-kvm-tools virt-manager libvirt-client virt-viewer libguestfs-tools
我不理解,为什么不同的教程,安装的包区别这么多
第二步:启动服务,并且开机自动启动
#############################################问AI了
我想在ronkylinux10上安装KVM虚拟机
请问yum install qemu-img qemu-kvm libvirt libguestfs-tools virt-install bridge-utils 这里面的几个包 有哪些是可以不用安装的
为什么我看其他的教程需要安装更多的包 比如 qemu-kvm-tools virt-manager libvirt-client virt-viewer libguestfs-tools
回复如下:
https://www.doubao.com/thread/w530003c4fc691a53
我总结一下:
qemu-img qemu-kvm libvirt 这三个包必须安装
virt-install 这个是强烈推荐安装 不装这个的话,创建虚拟机需要手写配置文件,比较麻烦
bridge-utils 这个可选 如果使用默认的NAT网络,就不用装这个,如果你物理机有多个网卡,然后你需要用到软路由,那么就需要安装这个,弄桥接类型的网络
libguestfs-tools 这个可选 用于在虚拟机关机的时候直接编辑虚拟磁盘里面的配置文件,类似于windows下直接把vhdx磁盘挂载然后查看
最终的结论就是:
yum install qemu-img qemu-kvm libvirt virt-install -y
安装这几个就够了
安装完毕看看各种状态
ip addr
ifconfig
iptables -vnL
firewall-cmd --list-all
getenforce
systemctl start libvirtd #启动服务
systemctl status libvirtd # 确认服务运行正常
systemctl enable libvirtd #设置开机启动启动服务
启动服务以后网卡会出现一个virbr0 网段是192.168.122.1 [一会重启看看这个是否会变]
--------------------------------------------------------------------------
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc htb state DOWN group default qlen 1000
link/ether 52:54:00:06:2b:c3 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
state DOWN 网卡的state状态是DOWN 这个state是什么
回复:
https://www.doubao.com/thread/w0d7fe75b92c5d45f
我觉得应该是目前还没创建虚拟机,等创建了虚拟机应该就好点了
--------------------------------------------------------------------------
最后通过virt-install创建虚拟机
首先把需要的镜像文件复制到/root/KVM/ISO/
然后创建虚拟机
腾讯云教程的方法:不先创建磁盘,直接一条命令搞定
virt-install --virt-type=kvm \
--name=rocky10 \
--vcpus=2 \
--memory=2048 \
--location=/root/KVM/ISO/Rocky-10.0-x86_64-minimal.iso \
--disk path=/root/test1.qcow2,size=10,format=qcow2 \
--network bridge=virbr0 \
--graphics none --extra-args='console=ttyS0' --force
阿里云教程的方法:
先创建一个磁盘
qemu-img create /kvm/img/centos01.img 8G
然后创建虚拟机
virt-install --name vm01 \
--vcpus 2 \
--ram 1024 \
--disk /kvm/img/centos01.img,format=raw \
--network network=default \
--graphics vnc,listen=0.0.0.0,port=6000 \
--noautoconsole \
--os-type=linux \
--os-variant=centos7.0 \
--location=/kvm/iso/centos7.iso
用virt-install命令创建虚拟机
系统镜像文件在/root/KVM/ISO/Rocky-10.0-x86_64-minimal.iso
虚拟机的磁盘存储在/root/KVM/rocky10/rocky10.qcow2
-------------------------------------------------------------------------------问AI
KVM创建虚拟机的时候 磁盘的格式 img 和qcow2 有什么区别?
https://www.doubao.com/thread/w82b0fff5dc3ccbc9
结论:用qcow2
-------------------------------------------------------------------------------问AI
virt-install --virt-type=kvm
创建虚拟机的命令是否需要写这个参数,如果不写会怎么样?
https://www.doubao.com/thread/wdcb3626efcc7a4c4
结论:好像云服务器不支持的话,会进入软虚拟化,但是性能会极大下降-------------------------------------------------------------------------------测试用一个虚拟机,不开启嵌套虚拟化能否用这种方式创建虚拟机
-------------------------------------------------------------------------------问AI
virt-install --os-type=linux \
--os-variant=centos7.0 \
这两个参数的作用,如果不写会怎么样?
https://www.doubao.com/thread/w3d3fa18b7c98f2c0
--os-type=linux、windows、unix 应该只有这3个大类,我忘记问了
哦,后面我运行的时候提醒我了,这个参数废弃了,不要用了
WARNING --os-type is deprecated and does nothing. Please stop using it.
virt-install --os-variant=centos7.0
这个参数都支持哪些系统? 我想安装rockylinux10 这个参数应该填什么
https://www.doubao.com/thread/wbcdf8a8992d66b56
osinfo-query os 这个命令可以查看到支持的系统类型
virt-install --osinfo list 这个命令效果一样
-------------------------------------------------------------------------------问AI
--network bridge=virbr0 \
--network network=default \
这两种网络配置的区别
https://www.doubao.com/thread/wffbd27fec8500cca
--network network=default使用这种方式的时候,把物理机的2200端口转发到虚拟机的22端口,如何配置端口转发?
https://www.doubao.com/thread/w222b40818e3a8413
结论:可以写在配置文件里面,这样即使物理机重启了,端口映射关系还在,也可以手动用iptables转发
--network network=default 还有后续参数吗 比如分配指定的IP地址 指定端口转发
https://www.doubao.com/thread/wc28934d3be9443ce
大概看懂了,可以直接指定IP和MAC
--network network=default,ip=192.168.122.100/24,gateway=192.168.122.1
但是端口转发还是不能在创建的时候弄
那么看来还是别用这个了,手动管理网卡吧
--network network=default,model=virtio
model有哪些类型,不同的类型有什么区别?
--network bridge=virbr0使用这个配置,支持model=virtio吗?
https://www.doubao.com/thread/w19c9c46a7cc0a0c1
结论就是基本上只要不是太老的系统都支持了,而且性能最好,尽量写上,我忘记问是否默认是这个了,不过我估计应该默认就是这个的
-------------------------------------------------------------------------------问AI
virt-install --noautoconsole
这个参数是什么意思
https://www.doubao.com/thread/w04281fd50a40a803
看来这个必须加
-------------------------------------------------------------------------------问AI
--graphics vnc,listen=0.0.0.0,port=6000
这个参数,listen的监听地址可以填物理机的IP吗
https://www.doubao.com/thread/w807f50d2c7ae9558
结论还是不要填0.0.0.0吧,还是填物理机的具体IP,一般都是固定IP的
-------------------------------------------------------------------------------为了安全,还要在防火墙限制哪些IP能访问这个端口,看看是INPUT链还是FORWARD链
我用firewall的 临时放行了6000端口
最终结论:是INPUT链的
-------------------------------------------------------------------------------问AI
最终的那个命令检查一下,是否有问题
还真检查出一个问题,我忘记写vnc的密码了,password=yourkey
-------------------------------------------------------------------------------
运行命令
ERROR unsupported configuration: VNC password is 9 characters long, only 8 permitted
操,密码只能8位?
-------------------------------------------------------------------------------问AI-------------------------------------------------------------------------------selinux的问题,最终的解决方案是把iso镜像和磁盘都存储在/var/lib/libvirt/images/这个目录下就没问题了
ERROR Cannot access storage file '/root/KVM/rockylinux10_test/rockylinux10_test.qcow2' (as uid:107, gid:107): Permission denied
又出错
这次估计是selinux的问题
ERROR Cannot access storage file '/root/KVM/rockylinux10_test/rockylinux10_test.qcow2' (as uid:107, gid:107): Permission denied
这个错误估计是selinux造成的,请问在selinux状态是enforce的情况下,怎么配置selinux才能正常创建虚拟机
https://www.doubao.com/thread/wc9efaff07d562c9e
确实是selinux造成的解决方案是
semanage fcontext -a -t virt_image_t "/root/ISO(/.*)?"
restorecon -Rv /root/ISO
还是不行,可能和我使用的是root有关
若方法 1 仍有问题,可开启允许 libvirt 访问用户家目录的布尔值:
# 允许libvirt访问用户家目录(/root属于root家目录)
setsebool -P virt_use_fusefs on
setsebool -P virt_use_home_dirs on
-------------------------------------------------------------------------------问AI
setsebool -P virt_use_home_dirs on
这个命令运行以后提示
Boolean virt_use_home_dirs is not defined
我用的root用户,还需要怎么操作?
https://www.doubao.com/thread/w9c66f14f5ea36086
我的系统是rockylinux10最小化安装的
getsebool -a | grep virt
这个命令执行以后输出下面的内容
staff_use_svirt --> off
unprivuser_use_svirt --> off
use_virtualbox --> on
virt_hooks_unconfined --> off
virt_lockd_blk_devs --> off
virt_qemu_ga_manage_ssh --> off
virt_qemu_ga_read_nonsecurity_files --> off
virt_qemu_ga_run_unconfined --> off
virt_read_qemu_ga_data --> off
virt_rw_qemu_ga_data --> off
virt_sandbox_share_apache_content --> off
virt_sandbox_use_all_caps --> on
virt_sandbox_use_audit --> on
virt_sandbox_use_fusefs --> off
virt_sandbox_use_mknod --> off
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> on
virt_use_glusterd --> off
virt_use_nfs --> off
virt_use_pcscd --> off
virt_use_pulseaudio --> off
virt_use_rawip --> off
virt_use_samba --> off
virt_use_sanlock --> off
virt_use_usb --> on
virt_use_xserver --> off
virtqemud_use_execmem --> on
没有virt_access_home和virt_use_fusefs[哦,这个是有的,我看错了AI给略过了]
setsebool -P virt_use_comm on
-------------------------------------------------------------------------------问AI
ERROR Cannot access storage file '/root/KVM/rockylinux10_test/rockylinux10_test.qcow2' (as uid:107, gid:107): Permission denied
还是提示这个错误,是否需要我先提前创建好/root/KVM/rockylinux10_test/rockylinux10_test.qcow2这个文件
qemu-img create -f qcow2 /root/KVM/rockylinux10_test/rockylinux10_test.qcow2 32G
用这个命令创建好了磁盘
然后virt-install --disk path应该怎么使用这个磁盘?
--disk path=/root/KVM/rockylinux10_test/rockylinux10_test.qcow2,format=qcow2,bus=virtio \ #AI还建议我添加bus=virtio参数
如果不提前创建好的话,那需要在这里添加一个容量的参数
size=32
算了,这个权限问题始终解决不了,我直接临时关闭了selinux
setenforce 0
草,关闭了还是提示
KVM默认的存储磁盘的目录是什么
--disk path=rockylinux10_test.qcow2,size=32,format=qcow2,bus=virtio \
是否可以这样写,让磁盘存储在默认路径下?
https://www.doubao.com/thread/w2f16e762ca108d52
我靠,走了弯路
貌似需要先创建一个存储的位置,才能把磁盘文件存储进去
然后只需要把存储ISO的文件夹用selinux处理一下就行
ls -Z Rocky-10.0-x86_64-minimal.iso
-------------------------------------------------------------------------------问AI
virsh pool-list --all
输出下面的内容
Name State Autostart
---------------------------------------------
iso inactive yes
ISO inactive yes
rockylinux10_test inactive yes
rockylinux10_test-1 inactive yes
好像有一些我重复弄了,怎么删除
https://www.doubao.com/thread/wfbf13f6188602782
先停止池,如果是inactive则这一步不需要
virsh pool-destroy iso # 停止“iso”池
virsh pool-destroy ISO # 停止重复的“ISO”池
virsh pool-destroy rockylinux10_test # 停止重复的测试池
virsh pool-destroy rockylinux10_test-1 # 停止重复的测试池
然后彻底删除
virsh pool-undefine iso # 删除“iso”池
virsh pool-undefine ISO # 删除重复的“ISO”池
virsh pool-undefine rockylinux10_test # 删除重复的“ISO”池
virsh pool-undefine rockylinux10_test-1 # 删除重复的测试池
-------------------------------------------------------------------------------问AI
virt-install 执行这个命令之前,我应该把操作系统的镜像文件复制到哪个目录?
https://www.doubao.com/thread/we1ce581cd0cc735c
卧槽,原来是需要放到默认的位置
/var/lib/libvirt/images/
-------------------------------------------------------------------------------问AI
KVM列出所有虚拟机
https://www.doubao.com/thread/we3414af48bfb51b1
virsh list --all
虚拟机的状态是shut off 怎么启动
https://www.doubao.com/thread/we0f02ac405c12482
virsh start rockylinux10_test
-------------------------------------------------------------------------------问AI
systemctl enable libvirtd
为什么我设置了开机自动启动libvirtd服务,但是物理机重启以后还是不自动启动?
https://www.doubao.com/thread/w3fc623f1edc7b44a
按照AI回答的检查了,都是开启的,但是我重启两次了,都是默认不启动服务
算了,也没啥大问题,大不了手动启动服务
-------------------------------------------------------------------------------
firewall-cmd --list-all
firewall-cmd --change-interface=eth0 --zone=public --permanent
firewall-cmd --change-interface=eth1 --zone=public --permanent
firewall-cmd --change-interface=eth0 --zone=public
firewall-cmd --change-interface=eth1 --zone=public
firewall-cmd --zone=trusted --add-forward-port=port=2200:proto=tcp:toaddr=192.168.11.4:toport=22
firewall-cmd --zone=trusted --remove-forward-port=port=2200:proto=tcp:toaddr=192.168.11.4:toport=22
firewall-cmd --zone=trusted --add-forward-port=port=2200:proto=tcp:toaddr=192.168.122.5:toport=22
firewall-cmd --zone=trusted --add-masquerade
iptables -t nat -A PREROUTING -p tcp --dport 2200 -j DNAT --to-destination 192.168.122.5:22
firewall-cmd --add-forward-port=port=2200:proto=tcp:toaddr=192.168.122.5:toport=22
firewall-cmd --add-masquerade
firewall-cmd --add-port=2200/tcp
firewall-cmd --add-port=6000/tcp
firewall-cmd --remove-forward-port=port=2200:proto=tcp:toaddr=192.168.122.5:toport=22
socat TCP4-LISTEN:2200,reuseaddr,fork TCP4:192.168.122.5:22 &
-------------------------------------------------------------------------------问AI
用socat进行端口转发和用firewall进行端口转发的区别
https://www.doubao.com/thread/w9faa3574826a2c5d
-------------------------------------------------------------------------------问AI
rockylinux10删除firewall 改用iptables
https://www.doubao.com/thread/w64c020ee27d62eed
好像,直接停止firewall就行,默认有iptables了 实测配置了drop的规则确实不通了
重启试试,重启也没问题
-------------------------------------------------------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward #手动重启network服务以后这个需要重新添加 装了KVM默认就启用了的
iptables -t nat -A POSTROUTING -j MASQUERADE #这里会自动把数据包源地址接口的IP地址
iptables -t nat -I PREROUTING 1 -i eth0 -p tcp --dport 2200 -j DNAT --to 192.168.100.5:22 #这个不生效
iptables -t nat -I PREROUTING 2 -i eth0 -p tcp --dport 2201 -j DNAT --to 192.168.11.2:3389 #这个没问题,说明不是iptables的问题,而是KVM默认网络的问题,不知道KVM默认是怎么处理的
-------------------------------------------------------------------------------问AI
KVM如何创建一个类似于hyper-v那样的内部网络
https://www.doubao.com/thread/w6bad1a75c53a432c
创建一个自定义的xml文件
然后添加
这太麻烦了
virsh命令有没有添加网卡的命令
这个回答AI理解错了,他以为我要给虚拟机添加网卡
我的意思是创建自定义网络的时候,能否不要手动创建xml文件,KVM有没有命令来直接创建一个自定义网络?
这个回答其实和上面手动创建xml文件没啥区别
最终方式如下:
创建xml文件 /root/kvm-internal-net.xml
<network>
<name>kvm-internal</name> <!-- 内部网络名称,可自定义 -->
<bridge name="virbr-internal" stp="on" delay="0"/> <!-- 虚拟网桥名称 -->
<ip address="192.168.100.1" netmask="255.255.255.0"> <!-- 宿主机在该内部网络的IP -->
</ip>
</network>
然后导入
# 1. 加载XML配置,定义内部网络
virsh net-define kvm-internal-net.xml
# 2. 启动该内部网络
virsh net-start kvm-internal
# 3. 设置开机自启(避免物理机重启后网络失效)
virsh net-autostart kvm-internal
导入完毕的效果就是在/etc/libvirt/qemu/networks/会生成一个文件kvm-internal.xml
最后查看一下网卡是否添加成功
virsh net-list --all #显示正常
ip addr #显示正常
重启物理机,看看效果
没问题,重启物理机以后,启动KVM服务,网卡正常显示了
然后手动把刚刚的虚拟机的网络改为这个
需要修改配置文件
方式1:直接用notepad++改/etc/libvirt/qemu/rockylinux10_test.xml #别用这个方式改,改了文件,但是启动还是之前的,还是用下面的方法2吧
方式2:命令改virsh edit rockylinux10_test
默认的内容如下
<interface type='bridge'>
<mac address='52:54:00:75:b9:61'/>
<source bridge='virbr0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
改为
<interface type='network'>
<mac address='52:54:00:75:b9:61'/>
<source network='kvm-internal'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
然后启动虚拟机
virsh start rockylinux10_test
然后修改虚拟机的IP
rockylinux10修改IP的路径是
/etc/NetworkManager/system-connections/
能ping通192.168.100.1了
但是不能访问外网
改了还是不行,我怀疑是上面的配置文件写错了
上面创建的那个内部网络我在虚拟机里面ping 192.168.100.1通了
但是我把虚拟机的网关指向192.168.100.1 却没法访问外网
物理机默认配置了路由转发,请问还需要怎么做让虚拟机能访问外网?
https://www.doubao.com/thread/w9f0a6e16ef183fa0
感觉不对,按我的理解,能ping通应该就是能转发的,我再试试
确实不行
那按照AI给的回答,再新创建一个试试
新的确实能访问外网了,但是端口转发还是不行,是不是和虚拟机启动以后在物理机里面自动创建了一个网卡有关?
看了下面的回答,应该不是这个的问题
但是确实又不能端口映射,使用socat会有性能损失
-------------------------------------------------------------------------------问AI
为什么虚拟机启动以后会在物理机上创建一个网卡?
11: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr-internal state UNKNOWN group default qlen 1000
link/ether fe:54:00:75:b9:62 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe75:b962/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
https://www.doubao.com/thread/w493693126828412d
那通过iptables怎么把物理机的端口转发到虚拟机
比如把2200端口转发到虚拟机的22端口
用iptables转发我始终不成功
我用socat却可以成功
是否是因为这个vnet2网卡的问题?
-------------------------------------------------------------------------------
最终命令如下:
virt-install --name=rockylinux10_test \
--virt-type=kvm \
--os-variant=rocky10 \
--vcpus=2 \
--ram=2048 \
--location=/var/lib/libvirt/images/Rocky-10.0-x86_64-minimal.iso \
--disk path=/var/lib/libvirt/images/rockylinux10_test.qcow2,size=32,format=qcow2,bus=virtio \
--network bridge=virbr0,model=virtio \
--noautoconsole \
--graphics vnc,listen=192.168.11.4,port=6000,password=12345678
systemctl start libvirtd
virsh list --all
virsh start rockylinux10_test
virsh stop rockylinux10_test #或者在虚拟机里面关机
目前还有一个问题没有解决:
端口转发
比如我现在安装的这台虚拟机是rockylinux10
我的物理机也是rockylinux10
目前这个虚拟机可以ping通外网
但是我想把物理机的2200端口 映射到虚拟机的22端口
我通过firewall和iptables都尝试过,都不成功
倒是通过socat成功了
但是socat有性能问题
我还是想用firewall或者iptables转发
--------------------------------------------------------------------------
KVM如何设置宿主机重启以后自动启动指定的虚拟机
https://www.doubao.com/thread/w38699993dabe8584
virsh list --all # --all 表示包含关机/开机状态的虚拟机
virsh autostart centos7 # 替换为你的虚拟机名称/UUID
virsh dominfo centos7 | grep "Autostart" #查看这个虚拟机是否会开机自动启动
virsh autostart --disable centos7 #取消开机自启
######################
Set-VMProcessor -VMName "Rockylinux10-KVM测试" -ExposeVirtualizationExtensions $true
安装rockylinux的时候是否需要开启KDUMP功能
https://www.doubao.com/thread/w7b4cfc4c18be801c
安装了4H4G
然后2个网卡
网卡一是外部2.5G 192.168.11.4 FD00:192:168:11::4 网关192.168.11.3 DNS192.168.11.3
网卡二是内部SSHT 192.168.20.4 FD00:192:168:20::4 未设置网关和DNS
虚拟机名字KVM
未启用KVM
安装时手动设置了分区,删掉了/home,把容量都加到/里面了
很快就装好了
然后安装yum install net-tools
|
|