
一篇完整的落地记录:从两台 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 Engine | 4.5.7-1.el9 |
| oVirt Node | Node NG 4.5(el9 安装镜像) |
| 虚拟化平台 | VMware Workstation 17,VMnet8(NAT) |
| 数据库 | PostgreSQL 13(系统 appstream 源,别装新版) |
| 认证 | Keycloak(4.5 起登录页由 Keycloak 提供,用户名区分大小写) |
环境规划
| 角色 | 主机名 | IP | 配置 |
|---|---|---|---|
| 引擎机 | engine.lab.net | 192.168.100.130/24 | 4 vCPU / 8 GB / 100 GB |
| 主机节点 | node.lab.net | 192.168.100.42/24 | 2 vCPU / 4 GB / 100 GB |
| 网关 / DNS | — | 192.168.100.2 | VMware 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.rpm | CentOS Stream oVirt SIG 仓库(centos-ovirt45) |
| Node 镜像 | ovirt-node-ng-installer-...el7.iso | ovirt-node-ng-installer-latest-el9.iso |
| 认证 | AAA-JDBC | Keycloak(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。

2. 创建 engine 节点虚拟机
安装介质换成 Rocky Linux 9.5 minimal:
-
新建虚拟机:4 vCPU / 8 GB 内存 / 100 GB 硬盘,CD/DVD 挂载
Rocky-9.5-x86_64-minimal.iso,软件选择 最小安装。
-
安装过程中在”网络和主机名”里把网卡连上,主机名填
engine.lab.net,设置 root 密码。
到“安装目的地”这步自动分区即可(图 3-49 是老流程里手动分区的样子:
/boot、swap、/三块):
-
装完登录,配置 IP(
192.168.100.130/24)、网关和 DNS(192.168.100.2)。 -
用 SSH(如 Xshell / MobaXterm / Windows 自带
ssh)连上去做后续操作。
hostnamectl set-hostname engine.lab.nethostname -f # 必须输出 engine.lab.netip -4 a # 确认 IPsystemctl enable --now chronyd # 时间同步,oVirt 对时间敏感3. 部署 oVirt Engine
3.1 配置 oVirt 4.5 软件源
老流程(CentOS 7)是”删掉原有源、换成 163 源、再装 ovirt-release43.rpm”。Rocky 上不需要动系统源,只要加一个 oVirt 的仓库文件:
cat > /etc/yum.repos.d/centos-ovirt45.repo <<'EOF'[centos-ovirt45]name=CentOS Stream 9 - oVirt 4.5baseurl=https://mirrors.aliyun.com/centos-stream/SIGs/9-stream/virt/x86_64/ovirt-45/enabled=1gpgcheck=0module_hotfixes=1EOF
dnf clean alldnf makecache
module_hotfixes=1不能少:el9 的模块过滤会让部分 oVirt 包”看不见”,少了这行会出现”源配好了但装不上 ovirt-engine”。备选:
dnf -y install centos-release-ovirt45(会自动写好仓库文件),二选一即可。验证:
dnf repolist | grep ovirt能看到centos-ovirt45。
3.2 升级系统
dnf -y updateshutdown -r now3.3 安装 ovirt-engine
dnf -y install ovirt-engine会连带装 PostgreSQL、Keycloak、WildFly 等,视网速需要较长时间。验证:
rpm -q ovirt-engine输出ovirt-engine-4.5.7-1.el9.noarch。
3.4 禁用防火墙
systemctl stop firewalldsystemctl disable firewalld想保留防火墙也可以,那就在下一步 engine-setup 问”是否自动配置防火墙”时回答 Yes。但不要两边都不管。
3.5 部署 oVirt Engine(engine-setup)—— 坑最集中的一步
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
引擎的主机名必须是能被解析的全限定域名。安装前一定要:
hostnamectl set-hostname engine.lab.netecho '192.168.100.130 engine.lab.net engine' >> /etc/hostshostname -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:
engine-cleanup # 全部回答 Yesengine-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。
rpm -qa | grep -i postgres # 确认是不是装了 postgresql18-*
dnf -y remove postgresql18 postgresql18-server postgresql18-contrib postgresql18-libsdnf -y install postgresql-server postgresqlpostgresql-setup --initdbsystemctl 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
两个都是缺包,一条命令解决:
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.netengine 节点:
cat >> /etc/hosts <<'EOF'192.168.100.130 engine.lab.net engine192.168.100.42 node.lab.net nodeEOF3.7 登录管理门户(以及登录不进去怎么办)
浏览器访问 https://engine.lab.net/,点”管理门户”。

用户名必须是小写
admin,不要写admin@internal——4.5 的登录页是 Keycloak 提供的,用户名区分大小写,老文档那种写法会直接失败。
登录成功后就是管理门户(计算 / 存储 / 网络 / 管理四个入口):

登录页反复弹回 / 报 decrypting JWE failed
Apache 的状态 Cookie 解不开,根因是 /etc/httpd/conf.d/internalsso-openidc.conf 里的 OIDCCryptoPassphrase 是动态随机生成的,每次重启 httpd 就换一把密钥,旧 Cookie 全作废。改成固定口令:
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.confhttpd -t # Syntax OKsystemctl restart httpd改完请用无痕窗口重新登录(浏览器里残留的旧 Cookie 会继续捣乱)。
忘记 admin 密码:进 Keycloak 管理控制台重置
- 浏览器打开
https://engine.lab.net/ovirt-engine-auth/admin/ - 用
admin登录(master realm 管理员,密码就是 engine-setup 时设的那个) - 左上角 realm 切到
ovirt-internal - Users → 选
admin→ Credentials → Reset password → 输入新密码,Temporary 关掉 → Save
等价的命令行方式(实测可用):
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')
# 查用户 idcurl -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 秒)
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.5select name, compatibility_version from cluster; -- 4.54. 部署 oVirt Node
4.1 下载镜像(4.5 用 el9 版)
官方下载地址(约 1.2 GB):
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 安装器,步骤和老流程一样,一步步往下走:
① 语言:

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

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

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

cat >> /etc/hosts <<'EOF'192.168.100.130 engine.lab.net engine192.168.100.42 node.lab.net nodeEOFhostname -f4.4 ⚠️【必做】关掉 oVirt Node 自带的坏源 onn-sap
每一台 oVirt Node NG 4.5 都带这个坏源(baseurl 指向一个根本不存在的 SAP 仓库),不关掉,第 5 节添加主机必然失败。
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.185. 添加主机
计算 → 主机 → 新建:

| 字段 | 填写 |
|---|---|
| 名称 | node(显示名,不写 .lab.net) |
| 主机名/IP | 192.168.100.42 |
| 用户名 / 密码 | root / Node 的 root 密码 |
| 集群 | 第 3.8 节里兼容版本为 4.5 的集群 |

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

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

【坑 8】Host node installation failed. Task Ensure Python3 is installed for CentOS/RHEL8 hosts failed to execute.
界面上的报错**≠ 真实原因**,一定要去翻它给出的部署日志:
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 上操作:
# 1) 在 node 节点创建 NFS 共享目录mkdir -p /data/ISO /data/vm # /data 不存在就新建;空间不足可换到有空间的目录
# 2) 配置目录权限(36:36 是 vdsm/kvm 用户)chown 36:36 /data/ISO && chmod 755 /data/ISOchown 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-serversetsebool -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
在门户里建两个存储域(存储 → 域 → 新建域):

| 数据域 | ISO 域 | |
|---|---|---|
| 名称 | vm(描述 Virtual Machine) | ISO(描述 DVD Image) |
| 域功能 | Data | ISO |
| 存储类型 | NFS | NFS |
| 导出路径 | 192.168.100.42:/data/vm | 192.168.100.42:/data/ISO |
两个域的导出路径分别填成刚才 NFS 输出的两个目录:

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

7. 上传 ISO
把系统 ISO 拷进 ISO 域里以”数据中心 ID”命名的目录:
# 在 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-111111111111mkdir -p $ISO_DIRcp /root/CentOS-7-x86_64-Minimal-2009.iso $ISO_DIR/chown 36:36 $ISO_DIR/*.iso && chmod 644 $ISO_DIR/*.isols -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. 创建虚拟机
-
计算 → 虚拟机 → 新建:操作系统
Red Hat Enterprise Linux 7.x x64/CentOS 7,优化目标“服务器”,名称CentOS7。

-
实例镜像“创建”一块 10 GB 虚拟磁盘。
-
网络接口选
ovirtmgmt。
-
用 VMware Workstation 做实验时必做:勾选“显示高级选项 → 系统 → 高级参数 → 自定义仿真机”,选择
pc-i440fx-rhel7.2.0(或pc-i440fx-rhel7.1.0),否则虚机装完系统起不来。
-
选中虚拟机 → “只运行一次” → 勾选附加 CD、选刚上传的系统 ISO、引导顺序把 CD-ROM 放最前。

-
启动后点 控制台,双击下载的
console.vv打开 Remote Viewer(释放鼠标:Shift+F12)完成系统安装。
-
装完把引导顺序改回硬盘;在虚机里
ip a看到 IP 后,宿主机能 ping 通、能 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 failed | OIDCCryptoPassphrase 每次重启 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:常用命令速查
# ---- 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 vdsmdtail -f /var/log/vdsm/vdsm.logjournalctl -u vdsmd -n 50showmount -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-engine | dnf 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:那张表按”报错信息 → 真实原因 → 解决”排好了,可以直接按报错关键字搜。
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
最后更新于 ,距今已过 4 天
部分内容可能已过时