CentOS 7.9 离线部署 KVM + WebVirtMgr,通过WebVirtMgr创建虚拟机教程
部署参考连接:https://zhuanlan.zhihu.com/p/434275145
部署参考连接:https://www.cnblogs.com/djlsunshine/p/11040246.html
一、前期准备(能上网的同版本 CentOS7 下载机)
下载 CentOS 7.9 全套 ISO
CentOS-7-x86_64-Everything-2009.iso
发送到部署机器上/root目录下。
既当离线 YUM 源,又当系统镜像。
1. 创建缓存目录
mkdir -p /opt/offline/{kvm,webvirtmgr-pkgs}/{rpms,pips}2. 下载 KVM 及其依赖
yumdownloader --resolve --destdir=/opt/offline/kvm/rpms \qemu-kvm qemu-kvm-tools qemu-img virt-install virt-manager \virt-viewer libvirt libvirt-client libvirt-python libguestfs-tools \bridge-utils3.下载 WebVirtMgr 所需 rpm
yumdownloader --resolve --destdir=/opt/offline/webvirtmgr-pkgs/rpms \git nginx supervisor python2-pip libvirt-python libxml2-python \python-websockify gcc python2-devel python2-lockfile4. 下载 Python2 依赖
cd /opt/offline/webvirtmgr-pkgs/pips
pip2 download -r https://raw.githubusercontent.com/retspen/webvirtmgr/master/requirements.txt
pip2 download 'Django==1.6.11'5.下载源码
cd /opt/offline
git clone https://github.com/retspen/webvirtmgr.git6. 生成本地 repo 数据
createrepo /opt/offline/kvm/rpms
createrepo /opt/offline/webvirtmgr/rpms7.打包
cd /opt
tar zvcf kvm-webvirtmgr-offline.tar.gz offline/ 7.通过scp等命令,发送到远程服务器。
scp -r kvm-webvirtmgr-offline.tar.gz root@部署机ip:/opt/
二、离线主机操作(无网络)
1. 关闭防火墙 / SELinux
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 02. 配置本地 yum 源(方便后续缺少依赖补充)# 1. 创建挂载点
mkdir -p /mnt/centos7-dvd# 挂载
mount -o loop /root/CentOS-7-x86_64-Everything-2009.iso /mnt/centos7-dvd# 写 repo
cat > /etc/yum.repos.d/dvd.repo <<'EOF'
[dvd]
name=CentOS7-DVD
baseurl=file:///mnt/centos7-dvd
enabled=1
gpgcheck=0
EOF# 执行
yum clean all
yum makecache
1. 安装 KVM 核心
1.解压
cd /opt
tar xcf kvm-webvirtmgr-offline.tar.gz cd /opt/offline/kvm/rpmsyum localinstall -y *.rpm# 启服务
systemctl enable --now libvirtd
2. 配置 KVM 与桥接(br0 示例)
1. 创建桥接配置文件
cd /etc/sysconfig/network-scripts
cp ifcfg-<原网卡> cp ifcfg-<原网卡>bak
cp ifcfg-<原网卡> ifcfg-br02. ifcfg-br0 示例:TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.200
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.1143.原网卡 示例(只保留桥接指向):
TYPE=Ethernet
NAME=<原网卡>
DEVICE=<原网卡>
ONBOOT=yes
BRIDGE=br04.重启网络:
systemctl restart network5. 启动 libvirtd
systemctl enable libvirtd && systemctl start libvirtd
3. 安装 WebVirtMgr
# 安装RPM
cd /opt/offline/webvirtmgr-pkgs/rpmsyum localinstall -y *.rpm# 安装pip包
cd /opt/offline/webvirtmgr-pkgs/pipspip2 install --no-index --find-links=. -r \/opt/offline/webvirtmgr/requirements.txtpip2 install --no-index --find-links=. Django==1.6.11
4. 初始化WebVirtMgr
# 修正 secret_key 文件权限(防报错)touch /opt/offline/webvirtmgr/webvirtmgr/.secret_key_store
chmod 600 /opt/offline/webvirtmgr/webvirtmgr/.secret_key_store# 初始化数据库(必须用 Python2)
cd /opt/offline/webvirtmgr
python2 manage.py syncdb # 按提示创建超级用户
python2 manage.py collectstatic --noinput
5. 配置 Nginx
cat > /etc/nginx/conf.d/webvirtmgr.conf <<'EOF'
server {listen 80;server_name _;location /static/ {root /opt/offline/webvirtmgr; # ← 这里改成真实目录expires max;}location / {proxy_pass http://127.0.0.1:8000;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;}
}
EOFsystemctl restart nginx
6. 配置 systemd
1. 创建 webvirtmgr 主服务cat > /etc/systemd/system/webvirtmgr.service <<'EOF'
[Unit]
Description=WebVirtMgr Django UI
After=network.target[Service]
Type=simple
User=root
WorkingDirectory=/opt/offline/webvirtmgr-master
ExecStart=/usr/bin/python2 /opt/offline/webvirtmgr-master/manage.py runserver 0.0.0.0:8000
Restart=on-failure
RestartSec=5s# 日志打到 journal,可用 journalctl -u webvirtmgr -f 查看
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
EOF2.创建 webvirtmgr-console 控制台服务cat > /etc/systemd/system/webvirtmgr-console.service <<'EOF'
[Unit]
Description=WebVirtMgr noVNC console proxy
After=network.target[Service]
Type=simple
User=root
WorkingDirectory=/opt/offline/webvirtmgr-master
ExecStart=/usr/bin/python2 /opt/offline/webvirtmgr-master/console/webvirtmgr-console
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
EOF3.载入并立即启动systemctl daemon-reload
systemctl enable --now webvirtmgr.service webvirtmgr-console.service4. 查看状态/日志systemctl status webvirtmgr.service webvirtmgr-console.service
journalctl -u webvirtmgr -f # 实时日志
三、WebVirtMgr的基本使用
1. 创建ssh连接
浏览器访问 http://<服务器IP>
用刚才创建的 superuser 登录。
点击添加,添加成功后如下:
点击IP进入
2. 添加存放镜像的存储池
点击下图按钮,进行创建
这里我们将iso上传对应路径,ISO文件权限要给到777
创建完成后,可以看到下图信息
点击进入界面后即可看到iso信息
3. 创建KVM的磁盘存储池
点击下图按钮,进行创建
创建完成后,即可看到下图信息。
点击,进入即可看到如下信息。
4. 为kvm准备磁盘文件
按照顺序1,点击添加镜像,在顺序2输入信息,点击创建后,即可在顺序3看到创建的信息。
5. 创建kvm的网络【若不单独创建默认为NAT模式】
对应前面配置br0网桥设置,如果使用的别的名称,则需要再次配置网桥,如果不配置网桥则报错无法启动虚拟机
6.创建KVM
点击
设置参数:
选择刚刚创建的磁盘和网络
7. 开启虚拟机并安装
根据下图操作,点击连接,需要按钮变成已断开
点击启动
进入控制台查看
8.添加新硬盘
需将虚拟机关机,然后编辑xml文件(如下图),添加如下代码(需将中文注释删掉)
<disk type='file' device='disk'><driver name='qemu' type='qcow2' cache='none'/> ---添加改行代码找到新增磁盘格式<source file='/home/kvm/teststorage/entd01.img'/> --指定新增磁盘路径<target dev='vda' bus='virtio'/> --指定磁盘设备名称,和传输总线类型
</disk>
9.设置内存
因为WebVirtMgr 前端限制原因,内存最大只能选择16G,如果需要创建大于16G的机器,就需要修改xml文件。
如下图,将想要的内存换算成kb,然后在<memory unit='KiB'>16777216</memory> 填写即可(需要关机)
10.注意事项
1. 因为WebVirtMgr 前端限制原因,默认CPU数量要设置成1,否则会出现Guest has not initialized the display (yet)的错误(如下图)
需要设置最大CPU数量为需要的,然后当前CPU数量为1(如图)。
这样设置完成后,就不会出现Guest has not initialized the display (yet)了。
在WebVirtMgr服务器,执行命令,在线热插到目标核数(mi04为你的服务器名称,4为你想要的目标核数)
virsh setvcpus mini01 8 --live