5430 字
27 分钟
实验 3.2:在 Rocky Linux 9.5 部署和使用 oVirt 4.5

一篇完整的落地记录:从两台 VMware 虚拟机起步,装好 oVirt Engine 4.5 和 oVirt Node NG 4.5,配上 NFS 存储域,最后用管理门户创建并装好一台 CentOS 7 虚拟机。

网上能搜到的教程大多还是 CentOS 7 + oVirt 4.3.8 那一套,仓库、安装包和认证方式都已经变了。本文按 Rocky Linux 9.5 + oVirt 4.5 重做了一遍,把真正卡住人的地方标成 【⚠️ 坑 N】(一共 8 个),其中 3.8 节那个坑会让主机永远加不进去,老教程里完全没有提到。

版本基线

组件版本 / 说明
引擎操作系统Rocky Linux 9.5(最小安装)
oVirt Engine4.5.7-1.el9
oVirt NodeNode NG 4.5(el9 安装镜像)
虚拟化平台VMware Workstation 17,VMnet8(NAT)
数据库PostgreSQL 13(系统 appstream 源,别装新版)
认证Keycloak(4.5 起登录页由 Keycloak 提供,用户名区分大小写)

环境规划

角色主机名IP配置
引擎机engine.lab.net192.168.100.130/244 vCPU / 8 GB / 100 GB
主机节点node.lab.net192.168.100.42/242 vCPU / 4 GB / 100 GB
网关 / DNS—192.168.100.2VMware NAT(VMnet8)

IP 按自己的环境改(老教程写的是 .41,以你的虚拟机为准),装好后不要再变。

目录

  • 1 设置 oVirt 部署环境
  • 2 创建 engine 节点虚拟机
  • 3 部署 oVirt Engine(3.5 engine-setup 逐项问答,含【坑 1】~【坑 6】;3.8 是最坑的一步)
  • 4 部署 oVirt Node(【坑 7】磁盘、【坑 8】坏源)
  • 5 添加主机
  • 6 配置存储(NFS 建在 node 上)
  • 7 上传 ISO
  • 8 安装 spice 客户端
  • 9 创建虚拟机
  • 附录 A 踩坑速查表 · B 常用命令 · C Keycloak 授权问题 · D 与老流程对照

和老流程(CentOS 7 + oVirt 4.3.8)不一样的地方,只有这 6 处

项目4.3.8 / CentOS 7 老流程本文(4.5)
操作系统CentOS 7.9 + 163 源Rocky Linux 9.5,用系统自带源
oVirt 源ovirt-release43.rpmCentOS Stream oVirt SIG 仓库(centos-ovirt45)
Node 镜像ovirt-node-ng-installer-...el7.isoovirt-node-ng-installer-latest-el9.iso
认证AAA-JDBCKeycloak(SSO),登录页由 Keycloak 提供
集群默认版本4.3(能用)引擎默认给 4.8,Node 只支持到 4.7 → 主机永远加不上(3.8 节)
engine-setup 问答无 Keycloak 相关多出 Keycloak / SSO / WebSocket Proxy 问答

关于配图:文中截图取自 oVirt 4.3.8 的界面(图号沿用原图 3-47 ~ 3-78)。4.5 在登录页、主机页、新建虚拟机页的文案和默认值略有差别,操作路径完全一致,看图时注意版本号不同即可。


1. 设置 oVirt 部署环境#

打开 VMware Workstation → 编辑 → 虚拟网络编辑器,确认 VMnet8(NAT) 已启用,并能看到 NAT 设置里的网关地址(一般为 192.168.100.2,就是两台虚拟机的网关和 DNS)。

验证:vmnet8 的”使用本地 DHCP 服务将 IP 地址分配给虚拟机”按需勾选;实验里两台机器建议直接配静态 IP。

图 3-47 虚拟网络编辑器:VMnet8(NAT)的网关就是 192.168.100.2

2. 创建 engine 节点虚拟机#

安装介质换成 Rocky Linux 9.5 minimal:

  1. 新建虚拟机:4 vCPU / 8 GB 内存 / 100 GB 硬盘,CD/DVD 挂载 Rocky-9.5-x86_64-minimal.iso,软件选择 最小安装。

    图 3-48 engine 虚拟机的硬件配置(内存 / 处理器 / 100 GB 磁盘 / NAT 网卡)
  2. 安装过程中在”网络和主机名”里把网卡连上,主机名填 engine.lab.net,设置 root 密码。

    图 3-50 安装向导的“网络和主机名”页

    到“安装目的地”这步自动分区即可(图 3-49 是老流程里手动分区的样子:/boot、swap、/ 三块):

    图 3-49 安装向导的手动分区(engine)
  3. 装完登录,配置 IP(192.168.100.130/24)、网关和 DNS(192.168.100.2)。

  4. 用 SSH(如 Xshell / MobaXterm / Windows 自带 ssh)连上去做后续操作。

Terminal window
hostnamectl set-hostname engine.lab.net
hostname -f # 必须输出 engine.lab.net
ip -4 a # 确认 IP
systemctl enable --now chronyd # 时间同步,oVirt 对时间敏感

3. 部署 oVirt Engine#

3.1 配置 oVirt 4.5 软件源#

老流程(CentOS 7)是”删掉原有源、换成 163 源、再装 ovirt-release43.rpm”。Rocky 上不需要动系统源,只要加一个 oVirt 的仓库文件:

Terminal window
cat > /etc/yum.repos.d/centos-ovirt45.repo <<'EOF'
[centos-ovirt45]
name=CentOS Stream 9 - oVirt 4.5
baseurl=https://mirrors.aliyun.com/centos-stream/SIGs/9-stream/virt/x86_64/ovirt-45/
enabled=1
gpgcheck=0
module_hotfixes=1
EOF
dnf clean all
dnf makecache

module_hotfixes=1 不能少:el9 的模块过滤会让部分 oVirt 包”看不见”,少了这行会出现”源配好了但装不上 ovirt-engine”。

备选:dnf -y install centos-release-ovirt45(会自动写好仓库文件),二选一即可。

验证:dnf repolist | grep ovirt 能看到 centos-ovirt45。

3.2 升级系统#

Terminal window
dnf -y update
shutdown -r now

3.3 安装 ovirt-engine#

Terminal window
dnf -y install ovirt-engine

会连带装 PostgreSQL、Keycloak、WildFly 等,视网速需要较长时间。验证:rpm -q ovirt-engine 输出 ovirt-engine-4.5.7-1.el9.noarch。

3.4 禁用防火墙#

Terminal window
systemctl stop firewalld
systemctl disable firewalld

想保留防火墙也可以,那就在下一步 engine-setup 问”是否自动配置防火墙”时回答 Yes。但不要两边都不管。

3.5 部署 oVirt Engine(engine-setup)—— 坑最集中的一步#

Terminal window
engine-setup

各问答大部分直接回车取默认值,需要留意的几处:

提示该填什么
Configure Engine on this host (Yes, No)Yes(见【坑 2】)
Configure WebSocket Proxy on this host? (Yes, No)Yes(浏览器里的 noVNC 控制台靠它)
Host fully qualified DNS name of this server [...]engine.lab.net(见【坑 1】)
Do you want Setup to configure the firewall?3.4 已关防火墙 → No
Engine admin password: / Confirm engine admin password:记牢!(见【坑 6】)
Found existing PKI files ... overwrite ...? (Yes, No) [No]手打 Yes(见【坑 5】)

成功的样子:

[ INFO ] Execution of setup completed successfully

【坑 1】FQDN 默认成了 localhost.localdomain#

引擎的主机名必须是能被解析的全限定域名。安装前一定要:

Terminal window
hostnamectl set-hostname engine.lab.net
echo '192.168.100.130 engine.lab.net engine' >> /etc/hosts
hostname -f # engine.lab.net

出现 [WARNING] Failed to resolve engine.lab.net using DNS, it can be resolved only locally 可以忽略(本机 hosts 能解析就行)。

【坑 2】Configure Engine on this host 的默认值变成 [No]#

只要这台机器中途中断过一次 engine-setup,向导就会以为”引擎已存在”,把这一问的默认值改成 [No];你顺手一回车,它就去配置”远程引擎”,最后失败。

处理:中断 → 清理 → 重来,并在这一问明确输入 Yes:

Terminal window
engine-cleanup # 全部回答 Yes
engine-setup

规矩:每次中断 engine-setup 后,都要跑一次 engine-cleanup。

【坑 3】Database configuration was requested, however, postgresql service was not found#

原因:机器上装的是 PGDG 的 PostgreSQL 18(只提供 postgresql-18.service),而 oVirt 找的是不带版本号的 postgresql.service。

Terminal window
rpm -qa | grep -i postgres # 确认是不是装了 postgresql18-*
dnf -y remove postgresql18 postgresql18-server postgresql18-contrib postgresql18-libs
dnf -y install postgresql-server postgresql
postgresql-setup --initdb
systemctl enable --now postgresql
sudo -u postgres psql -c "select version();" # PostgreSQL 13.23 ...

oVirt 4.5 只认系统源(appstream)的 PostgreSQL 13,别去装新版。

【坑 4】could not open extension control file ".../uuid-ossp.control" 和 ovirt-aaa-jdbc-tool failed to execute#

两个都是缺包,一条命令解决:

Terminal window
dnf -y install postgresql-contrib ongres-scram-client

(第二个的根因是 /usr/share/ovirt-engine/modules/common/com/ongres/scram/client/main/client.jar 指向的文件不存在,ongres-scram-client 来自 centos-ovirt45 仓库。)

【坑 5】PKI 覆盖询问必须手打 Yes#

Found existing PKI files, but /etc/pki/ovirt-engine/ca.pem is missing.
Do you want to Continue with Setup and overwrite existing PKI files? (Yes, No) [No]:

默认是 No,只按回车会被判为放弃,报 Failed to execute stage 'Environment customization': Aborted by user。

顺便记住:engine-setup --config-file=... 是无效选项(报 FATAL: Invalid option),要免交互得用 --answer-file。

【坑 6】admin 密码存在 Keycloak 里,忘了很麻烦#

oVirt 4.5 的 admin 密码不在 ovirt-aaa-jdbc-tool 能改的地方,它在 Keycloak 里。所以:

  • engine-setup 问 Engine admin password: 时输入的密码,当场记下来;
  • 万一忘了,用第 3.7 节的方法重置(需要进 Keycloak 管理控制台)。

3.6 配置 hosts 解析#

Windows 本机:编辑 C:\Windows\System32\drivers\etc\hosts,加一行(用管理员权限):

192.168.100.130 engine.lab.net

engine 节点:

Terminal window
cat >> /etc/hosts <<'EOF'
192.168.100.130 engine.lab.net engine
192.168.100.42 node.lab.net node
EOF

3.7 登录管理门户(以及登录不进去怎么办)#

浏览器访问 https://engine.lab.net/,点”管理门户”。

图 3-53 oVirt 登录界面

用户名必须是小写 admin,不要写 admin@internal——4.5 的登录页是 Keycloak 提供的,用户名区分大小写,老文档那种写法会直接失败。

登录成功后就是管理门户(计算 / 存储 / 网络 / 管理四个入口):

图 3-54 登录成功后的管理门户

登录页反复弹回 / 报 decrypting JWE failed#

Apache 的状态 Cookie 解不开,根因是 /etc/httpd/conf.d/internalsso-openidc.conf 里的 OIDCCryptoPassphrase 是动态随机生成的,每次重启 httpd 就换一把密钥,旧 Cookie 全作废。改成固定口令:

Terminal window
cp /etc/httpd/conf.d/internalsso-openidc.conf{,.bak.$(date +%Y%m%d%H%M)}
sed -i 's|^OIDCCryptoPassphrase.*|OIDCCryptoPassphrase "自己编一个32位随机串"|' \
/etc/httpd/conf.d/internalsso-openidc.conf
httpd -t # Syntax OK
systemctl restart httpd

改完请用无痕窗口重新登录(浏览器里残留的旧 Cookie 会继续捣乱)。

忘记 admin 密码:进 Keycloak 管理控制台重置#

  1. 浏览器打开 https://engine.lab.net/ovirt-engine-auth/admin/
  2. 用 admin 登录(master realm 管理员,密码就是 engine-setup 时设的那个)
  3. 左上角 realm 切到 ovirt-internal
  4. Users → 选 admin → Credentials → Reset password → 输入新密码,Temporary 关掉 → Save

等价的命令行方式(实测可用):

Terminal window
TOKEN=$(curl -sk -X POST \
https://engine.lab.net/ovirt-engine-auth/realms/master/protocol/openid-connect/token \
-d client_id=admin-cli -d grant_type=password \
-d username=admin -d password='<master管理员密码>' \
| sed -n 's/.*"access_token":"\([^"]*\)".*/\1/p')
# 查用户 id
curl -sk -H "Authorization: Bearer $TOKEN" \
"https://engine.lab.net/ovirt-engine-auth/admin/realms/ovirt-internal/users?username=admin"
# 重置密码
curl -sk -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
"https://engine.lab.net/ovirt-engine-auth/admin/realms/ovirt-internal/users/<用户id>/reset-password" \
-d '{"type":"password","value":"新密码","temporary":false}'

3.8 ⚠️【最大的坑】把数据中心和集群的兼容版本改成 4.5#

这一步老流程里没有、但 oVirt 4.5 上必做。不做,第 5 节添加主机时永远加不进去。

现象#

主机添加进去、“安装”也跑完了,状态却一直是红色 NonOperational(无法工作),事件里能看到:

Host node is compatible with versions (4.2,4.3,4.4,4.5,4.6,4.7)
and cannot join Cluster Default which is set to version 4.8.

原因#

数据值
引擎支持的集群级别4.2,4.3,4.4,4.5,4.6,4.7,4.8
Node 实际支持的级别4.2,…,4.7(够不到 4.8)
engine-setup 建的 Default 数据中心 / 集群4.8(取了引擎的最高值)

而且图形界面里改不了:

  • 数据中心版本只能升不能降 → 下拉框里只剩 4.8;
  • 集群版本必须 ≥ 所属数据中心版本 → 数据中心是 4.8,集群也只能选 4.8。

→ 界面死锁。 解法只有两个:

方案 A(推荐,10 秒)#

Terminal window
export PGPASSWORD=<引擎库口令> # 见 /etc/ovirt-engine/engine.conf.d/ 下 engine-setup 生成的配置
psql -h 127.0.0.1 -U engine -d engine <<'SQL'
begin;
update storage_pool set compatibility_version='4.5' where name='Default';
update cluster set compatibility_version='4.5' where name='Default';
commit;
SQL
systemctl restart ovirt-engine # 引擎把兼容版本缓存在内存里,必须重启才生效

方案 B(纯界面)#

删掉默认的 Default 数据中心和 Default 集群(此时还没建存储域,可以直接删),然后自己新建数据中心(兼容版本选 4.5)+ 新建集群(兼容版本选 4.5,CPU 类型选 qemu64)。

完成后的正常告警(忽略它)#

Data Center Default compatibility version is 4.5, which is lower than latest available version 4.8.
Please upgrade your Data Center to latest version ...

这是引擎例行提醒”数据中心不是最新级别”。我们正是要它低于 4.8,因为 Node 只认到 4.7。

验证:

select name, compatibility_version from storage_pool; -- 4.5
select name, compatibility_version from cluster; -- 4.5

4. 部署 oVirt Node#

4.1 下载镜像(4.5 用 el9 版)#

官方下载地址(约 1.2 GB):

ovirt-node-ng-installer-latest-el9.iso

4.2 新建虚拟机#

2 vCPU / 4 GB 内存 / 100 GB 硬盘,CPU 启用虚拟化,挂 ovirt-node-ng-installer-latest-el9.iso。

【坑 7】磁盘必须 ≥ 100 GB

oVirt Node 的默认分区方案吃不下 50 GB,会报:

可用空间 50 GiB / 总空间 50 GiB
自动分区失败:not enough free space in volume group

解决:关机 → VMware 里把虚拟磁盘从 50 GB 扩到 100 GB(qcow2 稀疏文件,不会立刻占满物理盘)→ 重新引导安装。

4.3 安装与网络配置#

oVirt Node NG 用的就是 CentOS 的 Anaconda 安装器,步骤和老流程一样,一步步往下走:

① 语言:

图 3-55 安装向导:语言选择

② 软件选择——保持默认的“最小安装”:

图 3-56 安装向导:软件选择

③ 安装目的地——点 “Click here to create them automatically”(自动创建分区)。图 3-57 是还没分区时的样子,图 3-58 是自动创建的入口,图 3-59 是自动分好的结果:

图 3-57 安装向导:还没分区的磁盘 图 3-58 安装向导:自动创建分区 图 3-59 安装向导:自动分区结果

④ 网络和主机名——网卡连上,主机名填 node.lab.net,IP 192.168.100.42/24、网关和 DNS 192.168.100.2:

图 3-60 安装向导的“网络和主机名”页(node)
Terminal window
cat >> /etc/hosts <<'EOF'
192.168.100.130 engine.lab.net engine
192.168.100.42 node.lab.net node
EOF
hostname -f

4.4 ⚠️【必做】关掉 oVirt Node 自带的坏源 onn-sap#

每一台 oVirt Node NG 4.5 都带这个坏源(baseurl 指向一个根本不存在的 SAP 仓库),不关掉,第 5 节添加主机必然失败。

Terminal window
cat /etc/yum.repos.d/node-optional.repo # 看一眼,[onn-sap] 那段的 baseurl 是死的
dnf config-manager --set-disabled onn-sap
# 更保险:全局禁掉,防止 oVirt Node 重启后被重新启用
grep -q '^disablerepo=onn-sap' /etc/dnf/dnf.conf || \
sed -i '/^\[main\]/a disablerepo=onn-sap' /etc/dnf/dnf.conf
dnf makecache # 无报错
dnf -y install python3 && python3 --version # 3.9.18

5. 添加主机#

计算 → 主机 → 新建:

图 3-61 主机页面:点“新建”
字段填写
名称node(显示名,不写 .lab.net)
主机名/IP192.168.100.42
用户名 / 密码root / Node 的 root 密码
集群第 3.8 节里兼容版本为 4.5 的集群
图 3-62 新建主机:基础信息

提示“没有配置电源管理”点确定(实验环境不需要 fencing):

图 3-63 电源管理配置:直接确定

之后引擎会自动跑 host-deploy,状态先变成“安装中”(图 3-64),跑完就是绿色 Up:

图 3-64 主机安装中(Installing)

【坑 8】Host node installation failed. Task Ensure Python3 is installed for CentOS/RHEL8 hosts failed to execute.#

界面上的报错**≠ 真实原因**,一定要去翻它给出的部署日志:

Terminal window
ls -lt /var/log/ovirt-engine/host-deploy/
grep -nE "fatal:|FAILED" /var/log/ovirt-engine/host-deploy/ovirt-host-deploy-ansible-*.log | tail

日志里真正的原因是 onn-sap 这个死源,跟 Python 毫无关系:

Failed to download metadata for repo 'onn-sap':
Cannot download repodata/repomd.xml: All mirrors were tried

回到 Node 上按 4.4 节 关掉 onn-sap,再回门户重试添加主机即可。


6. 配置存储(NFS 建在 node 节点上)#

存储用 NFS,全部在 node 上操作:

Terminal window
# 1) 在 node 节点创建 NFS 共享目录
mkdir -p /data/ISO /data/vm # /data 不存在就新建;空间不足可换到有空间的目录
# 2) 配置目录权限(36:36 是 vdsm/kvm 用户)
chown 36:36 /data/ISO && chmod 755 /data/ISO
chown 36:36 /data/vm && chmod 755 /data/vm
# 3) 编辑 NFS 服务器配置文件
cat >> /etc/exports <<'EOF'
/data/ISO 192.168.100.0/24(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
/data/vm 192.168.100.0/24(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
EOF
# 4) 启动 NFS 服务
systemctl enable --now rpcbind nfs-server
setsebool -P virt_use_nfs 1
# 5) 查看 NFS 输出
showmount -e
# Export list for node.lab.net:
# /data/vm 192.168.100.0/24
# /data/ISO 192.168.100.0/24

若 engine 与 node 之间被防火墙隔开,记得放行 NFS: firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd && firewall-cmd --reload

在门户里建两个存储域(存储 → 域 → 新建域):

图 3-65 新建域:名称 / 域功能 / 存储类型 / 导出路径
数据域ISO 域
名称vm(描述 Virtual Machine)ISO(描述 DVD Image)
域功能DataISO
存储类型NFSNFS
导出路径192.168.100.42:/data/vm192.168.100.42:/data/ISO

两个域的导出路径分别填成刚才 NFS 输出的两个目录:

图 3-66 新建域:Data 域指向 192.168.100.42:/data/vm 图 3-67 新建域:ISO 域指向 192.168.100.42:/data/ISO

数据域会自动挂到数据中心;ISO 域建好后要右键”附加”到数据中心。等两个域状态都变成 “活跃的”。

图 3-68 存储域列表:两个域都是“活跃的”

7. 上传 ISO#

把系统 ISO 拷进 ISO 域里以”数据中心 ID”命名的目录:

Terminal window
# 在 node 上先查数据中心 ID(在 engine 上执行也可以)
DC_ID=$(PGPASSWORD=<引擎库口令> psql -h 127.0.0.1 -U engine -d engine -t -A \
-c "select id from storage_pool where name='Default';")
ISO_DIR=/data/ISO/$DC_ID/images/11111111-1111-1111-1111-111111111111
mkdir -p $ISO_DIR
cp /root/CentOS-7-x86_64-Minimal-2009.iso $ISO_DIR/
chown 36:36 $ISO_DIR/*.iso && chmod 644 $ISO_DIR/*.iso
ls -lh $ISO_DIR

引擎会周期性扫描 ISO 域,等 1~2 分钟(或选中 ISO 域点一下”刷新”)。

验证:新建虚拟机时,在”运行一次”窗口的 CD 下拉框里能看到这个 ISO。


8. 安装 spice 客户端#

下载并安装 virt-viewer-x64-11.0-1.0.msi(oVirt 官方的 Windows 控制台客户端),装完用它打开门户里下载的 console.vv。

不想装也行:门户里的虚拟机控制台可以直接用 noVNC(浏览器打开),前提是 engine-setup 时 Configure WebSocket Proxy 选了 Yes。 另外 TigerVNC 也能连(在虚拟机”控制台选项”里看 VNC 端口)。


9. 创建虚拟机#

  1. 计算 → 虚拟机 → 新建:操作系统 Red Hat Enterprise Linux 7.x x64 / CentOS 7,优化目标“服务器”,名称 CentOS7。

    图 3-69 虚拟机页面:点“新建” 图 3-70 新建虚拟机:常规(操作系统 + 名称)

  2. 实例镜像“创建”一块 10 GB 虚拟磁盘。

    图 3-71 新建虚拟磁盘:10 GiB
  3. 网络接口选 ovirtmgmt。

    图 3-72 网络接口:ovirtmgmt
  4. 用 VMware Workstation 做实验时必做:勾选“显示高级选项 → 系统 → 高级参数 → 自定义仿真机”,选择 pc-i440fx-rhel7.2.0(或 pc-i440fx-rhel7.1.0),否则虚机装完系统起不来。

    图 3-73 系统 → 高级参数 → 自定义仿真机
  5. 选中虚拟机 → “只运行一次” → 勾选附加 CD、选刚上传的系统 ISO、引导顺序把 CD-ROM 放最前。

    图 3-74 工具栏上的“只运行一次” 图 3-75 运行一次:附加 CD + 引导顺序

  6. 启动后点 控制台,双击下载的 console.vv 打开 Remote Viewer(释放鼠标:Shift+F12)完成系统安装。

    图 3-76 控制台里进入安装引导菜单
  7. 装完把引导顺序改回硬盘;在虚机里 ip a 看到 IP 后,宿主机能 ping 通、能 SSH 上去,实验完成。

    图 3-77 虚机里 ip a 看 IP 图 3-78 宿主机 SSH 连上虚机

界面刷新不下来时,systemctl restart ovirt-engine 是最省事的”重启大法”。


附录 A:踩坑速查表(按报错信息检索)#

现象 / 报错真实原因解决
Database configuration ... postgresql service was not found装了 PGDG 的 PostgreSQL 18(只有 postgresql-18.service)卸掉 18,装系统源 postgresql-server(13),postgresql-setup --initdb
could not open extension control file ".../uuid-ossp.control"缺 contrib 扩展dnf -y install postgresql-contrib
'/usr/bin/ovirt-aaa-jdbc-tool' failed to execute + NoSuchFileException: .../ongres/scram/client.jar缺 scram 客户端包dnf -y install ongres-scram-client
PKI 询问后 Aborted by user该问默认 No,回车等于放弃手打 Yes 再回车
Configure Engine on this host 默认成了 [No]上次中途中断留下残留状态engine-cleanup 后重跑,明确回答 Yes
主机装完一直是红色 NonOperational,事件 VDS_CLUSTER_VERSION_NOT_SUPPORTED(154)默认数据中心/集群被设成 4.8,Node 只到 4.7;界面里数据中心只能升、集群必须 ≥ 数据中心 → 死锁按 3.8 节 改库为 4.5 并重启引擎
告警 Data Center ... lower than latest available version 4.8引擎例行”升级数据中心”提示忽略(本来就是要它低)
Host node installation failed. Task Ensure Python3 is installed ...Node 上的 onn-sap 死源,与 Python 无关Node 上 dnf config-manager --set-disabled onn-sap + /etc/dnf/dnf.conf 加 disablerepo=onn-sap
oVirt Node 安装报 not enough free space in volume group虚拟磁盘 50 GB 不满足默认分区磁盘扩到 100 GB 重装
登录页反复弹回 / decrypting JWE failedOIDCCryptoPassphrase 每次重启 httpd 都变改成固定口令 + systemctl restart httpd,用无痕窗口重登
The user admin@internalkeycloak-authz with profile [internalsso] is not authorized to perform login认证过了、授权没过(Keycloak realm 缺用户 / 引擎 permissions 表缺 SuperUser 授权)见附录 C
浏览器控制台连不上虚机没配 WebSocket Proxy重跑 engine-setup 时对该问答 Yes,或改用 console.vv + remote-viewer
虚机装完系统无法引导VMware 嵌套环境需要指定仿真机高级参数 → 自定义仿真机 → pc-i440fx-rhel7.2.0

附录 B:常用命令速查#

Terminal window
# ---- engine 节点 ----
systemctl status ovirt-engine # 引擎状态(Keycloak 是引擎内嵌子系统,没有独立的 keycloak.service)
engine-setup / engine-cleanup # 配置 / 清理
engine-backup --mode=backup --file=/root/all.bk --log=/root/all.log
export PGPASSWORD=<引擎库口令>
psql -h 127.0.0.1 -U engine -d engine
select name, compatibility_version from storage_pool; # 数据中心版本
select name, compatibility_version from cluster; # 集群版本
select vds_name, status, non_operational_reason from vds; # 主机状态(原因码在这里,比翻界面快)
select to_char(log_time,'MM-DD HH24:MI'), message
from audit_log order by log_time desc limit 30; # 最近事件
# ---- node 节点 ----
systemctl status vdsmd
tail -f /var/log/vdsm/vdsm.log
journalctl -u vdsmd -n 50
showmount -e
# ---- 主机部署排障(engine 上)----
ls -lt /var/log/ovirt-engine/host-deploy/
grep -nE "fatal:|FAILED" /var/log/ovirt-engine/host-deploy/ovirt-host-deploy-ansible-*.log

附录 C:特殊情况——Keycloak 过了仍提示 “not authorized to perform login”#

The user admin@internalkeycloak-authz with profile [internalsso] is not authorized to perform login

说明认证成功、授权失败。链路是:

Keycloak 登录 → 引擎 SSO → internalkeycloak-authz 授权域 → 引擎按用户名找用户 → 查 permissions 表里的 SuperUser 授权

① Keycloak 的 ovirt-internal realm 里有没有 admin 这个用户? 没有就在 Keycloak 管理控制台(realm 切到 ovirt-internal)→ Users → Add user 建一个 admin,再 Reset password(Temporary 关掉)。

② 引擎 permissions 表里有没有对该用户的 SuperUser 授权?

admin@internal、admin@ovirt、admin@internalkeycloak-authz 在引擎里是三条不同的用户记录,授权不能互相顶替:

select u.username, u.domain, p.role_id, p.ad_element_id
from permissions p join users u on u.user_id = p.ad_element_id;

缺 internalkeycloak-authz 域下 admin 的 SuperUser 授权时补一条(SuperUser 角色 ID 固定为 00000000-0000-0000-0000-000000000001,系统级对象 ID aaa00000-0000-0000-0000-123456789aaa):

insert into permissions (id, role_id, ad_element_id, object_id, object_type_id, creation_date)
select uuid_generate_v4(), '00000000-0000-0000-0000-000000000001', user_id,
'aaa00000-0000-0000-0000-123456789aaa', 1,
(extract(epoch from now())*1000)::bigint
from users
where domain = 'internalkeycloak-authz' and username = 'admin'
and not exists (select 1 from permissions p
where p.ad_element_id = users.user_id
and p.role_id = '00000000-0000-0000-0000-000000000001');

权限是实时读取的,补完直接重登,不用重启引擎。 注意 users.user_and_domain 是生成列(不能直接 UPDATE),creation_date 是 bigint 毫秒。


附录 D:与老流程(CentOS 7 + oVirt 4.3.8)的对照#

老流程(CentOS 7 + oVirt 4.3.8)本文(Rocky 9.5 + oVirt 4.5)
换 163 源、装 ovirt-release43.rpm不动系统源,加 centos-ovirt45.repo
yum install ovirt-enginednf install ovirt-engine
engine-setup(无 Keycloak)engine-setup(多 Keycloak / WebSocket Proxy 问答)
装 el7 的 ovirt-node-ng ISO装 ovirt-node-ng-installer-latest-el9.iso(磁盘 ≥100 GB)
加主机加主机,但必须先做 3.8 节
node 上 /data/ISO、/data/vm 做 NFS完全相同(chown 36:36、chmod 755)
拷贝 ISO 到 <数据中心ID>/images/11111111-...完全相同
VMware 实验需指定 pc-i440fx-rhel7.2.0完全相同

结语#

按 1 → 9 走完,最终会得到:

  • 一台 engine.lab.net(Rocky 9.5)跑着 oVirt Engine 4.5,浏览器打开 https://engine.lab.net/ 能进管理门户;
  • 一台 node.lab.net(oVirt Node NG 4.5)作为虚拟化主机,状态是绿色的 Up;
  • 数据中心 Default 里挂好 Data 和 ISO 两个 NFS 存储域,都显示”活跃的”;
  • 一台 CentOS 7 虚拟机,从门户创建、装完系统,宿主机能 SSH 连上。

整个过程真正容易栽的其实只有三处:PostgreSQL 装成了 18(坑 3)、数据中心/集群的兼容版本被设成 4.8(3.8 节)、Node 自带的 onn-sap 死源(坑 8)。把这三个记住,剩下的照着点就行。

遇到报错建议直接翻 附录 A:那张表按”报错信息 → 真实原因 → 解决”排好了,可以直接按报错关键字搜。

实验 3.2:在 Rocky Linux 9.5 部署和使用 oVirt 4.5
https://blog.ipox.cn/posts/zh-cn/ovirt-45-rocky9-deploy/
作者
槿鸢
发布于
2026-10-18
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取