Skip to content

Kubernetes 安装部署

🎯 系统要求

资源最低要求推荐配置
CPU4 核8 核
内存16 GiB64 GiB
磁盘100 GiB200 GiB
架构x86_64 / ARM64
软件Kubernetes 1.24+, Helm 3+, kubectl 已配置Kubernetes 1.28+

💡 注意:推荐的 8 核 64 GiB 内存 配置可确保生产环境下的最佳性能。

🚀 快速开始

在线部署

1. 准备 Kubernetes 集群

确保 Kubernetes 集群正常运行,且 kubectl 已配置好集群访问权限:

bash
kubectl cluster-info
kubectl get nodes

2. 克隆并进入目录

bash
git clone https://github.com/ModelEngine-Group/nexent.git
cd nexent

3. 部署

运行部署脚本:

bash
bash deploy.sh k8s

执行此命令后,系统会通过 Bash TUI 选择配置选项。可使用方向键或 j/k 移动,空格切换多选项,回车确认,b/Backspace 返回上一步,q 退出。

组件组合:

  • infrastructure(必选): Elasticsearch、PostgreSQL、Redis、MinIO
  • application(默认选中,可取消): config、runtime、mcp、northbound、web
  • data-process(默认选中,可选): 数据处理服务
  • supabase(默认选中,可选): 启用用户、租户和认证能力
  • terminal(可选): 启用 OpenSSH 终端工具
  • monitoring(可选): 启用观测组件,选择后会继续选择 provider

端口策略:

  • development(默认): 使用 NodePort 暴露 Web 和调试/内部服务
  • production: 内部服务使用 ClusterIP,仅暴露生产入口

镜像来源:

  • general(默认): 使用标准公开镜像仓库
  • mainland: 使用中国大陆镜像源
  • local-latest: 使用本地 latest 镜像,并将 Nexent 应用镜像的拉取策略设为本地优先

Kubernetes 使用与 Docker 相同的 deploy/env/.env。每次部署前,脚本会保留已有值、注释和旧版变量,并追加当前 deploy/env/.env.example 新增的变量。如果 .env 不存在,会优先复用旧版 docker/.env,再回退到当前模板;部署时必须存在可读的 .env.example

使用 bash deploy.sh k8s --defaults 可跳过 TUI,并复用已保存的 deploy.options 或内置默认值。

部署成功后,非敏感部署选项会保存到 deploy/k8s/deploy.options。下次交互部署时可选择复用本地配置或重新全量配置。

⚠️ 重要提示

1️⃣ 首次部署 v1.8.0 及以上版本时,系统会创建 suadmin@nexent.com 超级管理员账号,默认密码为 Nexent@123,无需交互输入,创建成功后会在终端显示。可在首次部署前通过 deploy/env/.env 中的 NEXENT_SUPER_ADMIN_PASSWORD 覆盖默认值,非交互创建时终端会显示实际使用的密码。使用离线部署包并显式指定 --config 时,部署脚本会要求输入并确认密码,并以本次输入为准;手动输入的密码不会在终端显示。

2️⃣ 如需重建 suadmin 账号,请按照以下步骤操作:

bash
# Step 1: 在 Supabase 数据库中删除 su 账号记录
kubectl exec -it -n nexent deploy/nexent-supabase-db -- psql -U postgres -c \
  "SELECT id, email FROM auth.users WHERE email='suadmin@nexent.com';"
# 获取 user_id 后执行删除
kubectl exec -it -n nexent deploy/nexent-supabase-db -- psql -U postgres -c \
  "DELETE FROM auth.identities WHERE user_id='your_user_id';"
kubectl exec -it -n nexent deploy/nexent-supabase-db -- psql -U postgres -c \
  "DELETE FROM auth.users WHERE id='your_user_id';"

# Step 2: 在 nexent 数据库中删除 su 账号记录
kubectl exec -it -n nexent deploy/nexent-postgresql -- psql -U root -d nexent -c \
  "DELETE FROM nexent.user_tenant_t WHERE user_id='your_user_id';"

# Step 3: 重新部署;非交互模式将使用配置值或默认密码
bash deploy.sh k8s

离线部署

目标集群无法访问公网镜像仓库时,可从 GitHub Actions 获取已经打包好的离线部署包:

  1. 登录 GitHub,打开 Build Offline Deployment Package
  2. 选择目标版本对应的成功运行记录,在 Artifacts 中下载与集群节点架构匹配的 nexent-<version>-<platform>.zip
  3. 将压缩包复制到可以访问目标集群的管理节点并解压。工作流产物默认保留 30 天;产物过期时,可联系维护者重新运行工作流。

解压离线部署包:

bash
unzip nexent-v2.2.1-amd64.zip -d nexent
cd nexent

单节点且以 Docker 作为容器运行时的集群可直接加载并部署:

bash
bash deploy.sh --load-images k8s

如果管理节点上保留了此前已部署的离线包,可通过 --reuse-from 复用其中的环境配置和 Kubernetes 部署选项:

bash
bash deploy.sh \
  --reuse-from /path/to/previous/nexent \
  --load-images \
  k8s

指定目录必须是已解压的旧部署包根目录,并包含 deploy/env/.env。该参数会导入旧 .env、保留其已有值,并立即追加当前包 .env.example 新增的变量。存在 monitoring.env 和 Kubernetes deploy.options 时也会复用;Helm generated values 由新版本脚本重新生成。--reuse-from 可与 --config--defaults--push-images 组合使用。

其他单节点集群和多节点集群应将镜像推送到集群可访问的内部仓库,或使用对应容器运行时的工具,将镜像导入所有可能运行 Nexent Pod 的节点:

bash
bash deploy.sh \
  --push-images \
  --image-registry-prefix registry.example.com/nexent \
  k8s

离线包默认安装 Nexent 全部组件。添加 --config 可重新选择部署配置;首次创建超级管理员时,该模式会要求手动输入并确认密码,且不会显示或保存输入值。非交互部署使用 NEXENT_SUPER_ADMIN_PASSWORD,默认值为 Nexent@123,创建成功后会在终端显示实际密码。

访问您的安装

部署成功完成后:

获取管理员密码:超级管理员账号为 suadmin@nexent.com。首次非交互创建成功时,终端会显示实际使用的密码;未额外配置时,默认密码为 Nexent@123。离线部署使用 --config 时,手动输入的密码不会保存或显示。如果密码已忘记,请按本文前面的“重建 suadmin 账号”步骤重建账号。

服务默认地址
Web 应用http://localhost:30000
SSH 终端localhost:30022(已启用时)

访问步骤:

  1. 在浏览器中打开 http://localhost:30000
  2. 登录超级管理员账号
  3. 访问租户资源 → 创建租户及租户管理员
  4. 登录租户管理员账号
  5. 参考 用户指南 进行智能体的开发

🏗️ 服务架构

Nexent 采用微服务架构,通过 Helm Chart 进行部署:

应用服务:

服务描述默认端口
nexent-config配置服务5010
nexent-runtime运行时服务5014
nexent-mcpMCP 容器服务5011
nexent-northbound北向 API 服务5013
nexent-webWeb 前端3000
nexent-data-process数据处理服务5012

基础设施服务:

服务描述
nexent-elasticsearch搜索引擎和索引服务
nexent-postgresql关系型数据库
nexent-redis缓存层
nexent-minioS3 兼容对象存储

Supabase 服务(选择 supabase 组件时):

服务描述
nexent-supabase-kongAPI 网关
nexent-supabase-auth认证服务
nexent-supabase-db数据库服务

可选服务:

服务描述
nexent-openssh-serverAI 智能体 SSH 终端
nexent-monitoring可选观测组件

🔌 端口映射

服务内部端口NodePort描述
Web 界面300030000主应用程序访问
Northbound API501330013北向 API 服务
SSH 服务器2230022终端工具访问

内部服务通信使用 Kubernetes 内部 DNS(例如 http://nexent-config:5010)。

💾 数据持久化

Nexent 使用 PersistentVolume 进行数据持久化:

数据类型PersistentVolume默认宿主机路径
Elasticsearchnexent-elasticsearch-pv/var/lib/nexent-data/nexent-elasticsearch
PostgreSQLnexent-postgresql-pv/var/lib/nexent-data/nexent-postgresql
Redisnexent-redis-pv/var/lib/nexent-data/nexent-redis
MinIOnexent-minio-pv/var/lib/nexent-data/nexent-minio
Supabase DB(选择 supabase 时)nexent-supabase-db-pv/var/lib/nexent-data/nexent-supabase-db
共享工作区nexent-workspace-pv/var/lib/nexent
共享技能目录nexent-skills-pv/var/lib/nexent-data/skills

卸载 Helm release 默认不会删除本地 hostPath 数据。可使用 bash uninstall.sh k8s --delete-local-data true 删除 /var/lib/nexent/var/lib/nexent-data/skills/var/lib/nexent-data/nexent-* 下的 Nexent 本地卷内容,使用 --keep-local-data 显式保留。

卸载 Kubernetes 部署

请在仓库根目录使用统一卸载入口:

bash
# 删除 Helm release;交互模式会询问是否删除 namespace 和本地数据
bash uninstall.sh k8s

# 仅清理 Helm release 状态,适合修复卡住的发布
bash uninstall.sh k8s clean

# 删除 Helm release 和 namespace,但保留本地 hostPath 数据
bash uninstall.sh k8s delete --keep-local-data

# 卸载后删除已知本地 hostPath 数据
bash uninstall.sh k8s --delete-local-data true

# 完整清理:Helm release、namespace 和本地 hostPath 数据都会删除
bash uninstall.sh k8s delete-all

--delete-data--delete-volumes 是兼容 Helm 管理资源的参数;本地盘数据请使用 --delete-local-data--keep-local-data 控制。delete-all --keep-local-data 会删除 namespace,但保留本地卷内容。

🔧 部署命令

bash
# 交互式部署
bash deploy.sh k8s

# 非交互式部署默认组件
bash deploy.sh k8s --components infrastructure,application,data-process,supabase --port-policy development --image-source general

# 启用用户/租户能力、数据处理和终端工具
bash deploy.sh k8s --components infrastructure,application,data-process,supabase,terminal

# 使用中国大陆镜像源部署
bash deploy.sh k8s --image-source mainland

# 使用本地 latest 镜像
bash deploy.sh k8s --image-source local-latest

# 使用 --sc 简写指定 StorageClass
bash deploy.sh k8s --sc fast-storage

# 仅清理 Helm 状态(修复卡住的发布)
bash uninstall.sh k8s clean

# 卸载,默认保留本地数据;交互确认是否删除 namespace 和本地数据
bash uninstall.sh k8s

# 卸载并删除 namespace
bash uninstall.sh k8s --delete-namespace true

# 卸载并删除本地 hostPath 数据
bash uninstall.sh k8s --delete-local-data true

# 完全卸载,包括 namespace 和本地 hostPath 数据
bash uninstall.sh k8s delete-all

# 完全卸载但保留本地 hostPath 数据
bash uninstall.sh k8s delete-all --keep-local-data

🔧 高级配置

监控配置

Kubernetes 部署通过脚本交互界面中的 monitoring 组件启用监控。部署脚本会在 deploy/env/monitoring.env 中同步 provider 配置,生成 global.monitoring.*nexent-monitoring.* 运行时 Helm values,并启用 nexent-monitoring 子 Chart。

bash
cd nexent
bash deploy.sh k8s

如果本地已有 deploy/k8s/deploy.options,脚本会询问是否复用本地配置。请选择重新配置/覆盖本地配置,然后在组件选择界面勾选 monitoring,再在 provider 选择界面手动选择 grafanaphoenixlangfuselangsmithzipkinotlp

支持的 provider:

Provider用途默认访问地址
otlp仅启动 OpenTelemetry Collector,适合转发到外部平台无 Dashboard
phoenix本地 Phoenix 追踪分析http://localhost:30006
langfuse本地 Langfuse 观测栈http://localhost:30001
langsmith转发到托管 LangSmithhttps://smith.langchain.com/
grafana本地 Grafana + Tempohttp://localhost:30002/d/nexent-llm-agent/nexent-agent-trace-monitoring?orgId=1
zipkin本地 Zipkinhttp://localhost:30011

选择 langsmith provider 前,请先在 deploy/env/monitoring.env 中配置 LANGSMITH_API_KEY,必要时配置 LANGSMITH_PROJECT。如需修改本地 Grafana、Langfuse 或各 Dashboard 的端口,请调整 deploy/env/monitoring.env 中对应的 K8S_*_NODE_PORT 或服务变量,再通过部署脚本重新配置并手动选择 monitoring

常用生成的 Helm values:

Values说明
global.monitoring.enabled是否让 Nexent 后端开启 OpenTelemetry 上报
global.monitoring.provider后端 provider 标识:otlpphoenixlangfuselangsmithgrafanazipkin
global.monitoring.otlpEndpoint后端 OTLP HTTP 上报地址,默认 http://nexent-otel-collector:4318
global.monitoring.dashboardUrl前端监控入口地址,留空则隐藏入口;speed 模式下可见,标准模式下仅超级管理员可见
global.monitoring.traceContentModeTrace 内容采集模式:summarymetricsfull
nexent-monitoring.<provider>.service.nodePort调整各 Dashboard 的 NodePort
nexent-monitoring.langfuse.init.*本地 Langfuse 初始组织、项目和管理员账号
nexent-monitoring.grafana.adminUser / adminPassword本地 Grafana 管理员账号

常用 deploy/env/monitoring.env 变量:

变量说明
LANGSMITH_API_KEY / LANGSMITH_PROJECTLangSmith 转发配置
K8S_PHOENIX_NODE_PORT / K8S_LANGFUSE_NODE_PORT / K8S_GRAFANA_NODE_PORT / K8S_ZIPKIN_NODE_PORT本地 Dashboard 的 NodePort 覆盖值
K8S_LANGFUSE_NEXTAUTH_URLK8s Langfuse 栈使用的浏览器可访问地址

查看监控组件状态:

bash
kubectl get pods -n nexent | grep -E 'otel|phoenix|grafana|tempo|zipkin|langfuse'
kubectl get svc -n nexent | grep -E 'otel|phoenix|grafana|zipkin|langfuse'

生产建议:请替换默认密码、密钥和 Langfuse encryptionKey,并将 Dashboard Service 改为 ClusterIP 或通过受控 Ingress 暴露。

OAuth 登录配置

OAuth 登录依赖 supabase 组件。启用第三方登录时,请同时部署 supabase,并将 config.oauth.callbackBaseUrl 设置为浏览器可访问的 Nexent Web 地址。

bash
bash deploy.sh k8s --components infrastructure,application,supabase

Kubernetes 部署通过 nexent-commonconfig.oauth.* values 写入后端环境变量:

bash
helm upgrade --install nexent nexent \
  --namespace nexent --create-namespace \
  --set global.deploymentComponents.supabase=true \
  --set nexent-supabase-kong.enabled=true \
  --set nexent-supabase-auth.enabled=true \
  --set nexent-supabase-db.enabled=true \
  --set nexent-common.config.oauth.callbackBaseUrl=https://nexent.example.com \
  --set nexent-common.config.oauth.githubClientId=your_github_client_id \
  --set nexent-common.config.oauth.githubClientSecret=your_github_client_secret \
  --set nexent-common.config.oauth.loginMode=force

可配置的 OAuth values:

Values对应环境变量说明
nexent-common.config.oauth.callbackBaseUrlOAUTH_CALLBACK_BASE_URLWeb 入口地址,回调路径会自动拼接
nexent-common.config.oauth.githubClientIdGITHUB_OAUTH_CLIENT_IDGitHub OAuth Client ID
nexent-common.config.oauth.githubClientSecretGITHUB_OAUTH_CLIENT_SECRETGitHub OAuth Client Secret
nexent-common.config.oauth.gdeUrlGDE_URLGDE OAuth 服务地址
nexent-common.config.oauth.gdeClientIdGDE_OAUTH_CLIENT_IDGDE OAuth Client ID
nexent-common.config.oauth.gdeClientSecretGDE_OAUTH_CLIENT_SECRETGDE OAuth Client Secret
nexent-common.config.oauth.enableWechatENABLE_WECHAT_OAUTH是否启用 WeChat OAuth
nexent-common.config.oauth.wechatClientIdWECHAT_OAUTH_APP_IDWeChat App ID
nexent-common.config.oauth.wechatClientSecretWECHAT_OAUTH_APP_SECRETWeChat App Secret
nexent-common.config.oauth.sslVerifyOAUTH_SSL_VERIFY访问 OAuth provider 时是否校验证书
nexent-common.config.oauth.caBundleOAUTH_CA_BUNDLE自定义 CA bundle 路径
nexent-common.config.oauth.loginModeOAUTH_LOGIN_MODEdisabledbuttonforce

loginMode 默认为 buttonforce 模式下,没有可用 Provider 时禁用 OAuth,同时启用多个 Provider 时回退到登录按钮;CAS force 模式优先于 OAuth 自动登录。

Provider 回调地址:

Provider回调地址
GitHub{OAUTH_CALLBACK_BASE_URL}/api/user/oauth/callback?provider=github
GDE{OAUTH_CALLBACK_BASE_URL}/api/user/oauth/callback?provider=gde
WeChat{OAUTH_CALLBACK_BASE_URL}/api/user/oauth/callback?provider=wechat

本地 NodePort 默认回调示例为 http://localhost:30000/api/user/oauth/callback?provider=github。生产环境应改为公网 HTTPS 域名,并在 OAuth provider 控制台中登记相同地址。

CAS 登录配置

CAS SSO 不依赖 supabase。启用 CAS 时,请将 nexent-common.config.cas.callbackBaseUrl 设置为浏览器可访问的 Nexent Web 地址,且不要带结尾 /nexent-common.config.cas.serverUrl 是 CAS Server 根地址,也不要带结尾 /

Kubernetes 部署通过 nexent-commonconfig.cas.* values 写入后端环境变量:

bash
helm upgrade --install nexent nexent \
  --namespace nexent --create-namespace \
  --set nexent-common.config.cas.enabled=true \
  --set nexent-common.config.cas.serverUrl=https://cas.example.com/cas \
  --set nexent-common.config.cas.callbackBaseUrl=https://nexent.example.com \
  --set nexent-common.config.cas.loginMode=force \
  --set nexent-common.config.cas.logoutUrl=/logout

可配置的 CAS values:

Values对应环境变量说明
nexent-common.config.cas.enabledCAS_ENABLED是否启用 CAS
nexent-common.config.cas.serverUrlCAS_SERVER_URLCAS Server 根地址
nexent-common.config.cas.validatePathCAS_VALIDATE_PATHserviceValidate 路径,默认 /p3/serviceValidate
nexent-common.config.cas.callbackBaseUrlCAS_CALLBACK_BASE_URLWeb 入口地址,CAS 回调路径会自动拼接
nexent-common.config.cas.loginModeCAS_LOGIN_MODEdisabledbuttonforce
nexent-common.config.cas.userAttributeCAS_USER_ATTRIBUTE用户标识属性。为空时使用 <cas:user>
nexent-common.config.cas.emailAttributeCAS_EMAIL_ATTRIBUTE邮箱属性
nexent-common.config.cas.roleAttributeCAS_ROLE_ATTRIBUTE角色属性
nexent-common.config.cas.defaultRoleCAS_DEFAULT_ROLECAS 角色缺失、为空或不受支持时使用的 Nexent 默认角色,默认 USER
nexent-common.config.cas.tenantAttributeCAS_TENANT_ATTRIBUTE租户属性
nexent-common.config.cas.defaultTenantIdCAS_DEFAULT_TENANT_IDCAS 未返回租户属性或属性为空时使用的默认租户
nexent-common.config.cas.roleMapJsonCAS_ROLE_MAP_JSONCAS 角色到 Nexent 角色的 JSON 映射
nexent-common.config.cas.sessionMaxAgeSecondsCAS_SESSION_MAX_AGE_SECONDSCAS 本地会话最长有效期
nexent-common.config.cas.localSessionMaxAgeSecondsLOCAL_SESSION_MAX_AGE_SECONDSNexent 本地会话有效期
nexent-common.config.cas.heartbeatUrlCAS_HEARTBEAT_URL用户活动触发的 CAS Server 心跳 GET 地址;为空时禁用
nexent-common.config.cas.heartbeatIntervalSecondsCAS_HEARTBEAT_INTERVAL_SECONDSCAS 活跃用户最小心跳间隔,默认 300 秒
nexent-common.config.cas.heartbeatCookieNameCAS_HEARTBEAT_COOKIE_NAME复制到心跳 X-Auth-Token Header 的前端可读 Cookie 名称
nexent-common.config.cas.renewBeforeSecondsCAS_RENEW_BEFORE_SECONDS距离过期多少秒内触发无感续期
nexent-common.config.cas.renewTimeoutSecondsCAS_RENEW_TIMEOUT_SECONDS无感续期等待超时时间
nexent-common.config.cas.syntheticEmailDomainCAS_SYNTHETIC_EMAIL_DOMAINCAS 未返回邮箱时生成邮箱使用的域名
nexent-common.config.cas.logoutUrlCAS_LOGOUT_URLCAS 登出地址。为空时 Nexent 主动退出不调用 CAS Server 登出接口
nexent-common.config.cas.sslVerifyCAS_SSL_VERIFY访问 CAS Server 时是否校验证书
nexent-common.config.cas.caBundleCAS_CA_BUNDLE自定义 CA bundle 路径

CAS 心跳仅在 CAS 用户本地会话有效、页面可见且发生用户活动时运行。首次活动立即发送 GET,之后所有浏览器标签页共享配置的最小间隔。配置的 Cookie 可读取时,请求携带 X-Auth-Token: <cookie-name>=<cookie-value>;读取不到时仍发送请求但不带该 Header。由于浏览器直接访问心跳地址,认证源必须通过 CORS 允许 Nexent Origin、GET、OPTIONS 和 X-Auth-Token。心跳失败不会退出用户,也不会刷新本地 JWT。

常用 CAS 地址:

用途地址
Nexent 登录入口{CAS_CALLBACK_BASE_URL}/api/user/cas/login?redirect=/
CAS service 回调{CAS_CALLBACK_BASE_URL}/api/user/cas/callback
CAS 无感续期回调{CAS_CALLBACK_BASE_URL}/api/user/cas/renew_callback
CAS 单点登出回调POST {CAS_CALLBACK_BASE_URL}/api/user/cas/logout_callback

Apereo CAS 使用 JSON Service Registry 时,可以新增一个服务注册文件,例如 Nexent-10001.json。文件需要放到 CAS 部署配置的 service registry 目录中,id 必须全局唯一。本地 NodePort 示例:

json
{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "http://localhost:30000.*",
  "name": "Nexent CAS Client",
  "id": 10001,
  "description": "Nexent CAS SSO client",
  "evaluationOrder": 1,
  "logoutType": "BACK_CHANNEL",
  "logoutUrl": "http://localhost:30000/api/user/cas/logout_callback"
}

生产环境建议保持 CAS_SSL_VERIFY=true;自签名证书优先配置 CAS_CA_BUNDLE,仅本地验证时再临时设置 CAS_SSL_VERIFY=false

CAS 对接 ModelEngine

当使用 CAS 协议对接 ModelEngine 时,建议通过 values 文件配置 Nexent,避免 CAS_ROLE_MAP_JSON 在命令行中转义复杂。

创建 cas-modelengine-values.yaml

yaml
nexent-common:
  config:
    cas:
      enabled: true
      serverUrl: "https://<ModelEngine IP>:5443/SSOSvr"
      validatePath: "/p3/serviceValidate"
      callbackBaseUrl: "http://<Nexent IP>:30000"
      loginMode: "force"
      userAttribute: "userName"
      emailAttribute: "email"
      roleAttribute: "userType"
      defaultRole: "USER"
      tenantAttribute: "tenant_id"
      defaultTenantId: "tenant_id"
      roleMapJson: '{"1":"ADMIN","3":"DEV"}'
      sessionMaxAgeSeconds: 3600
      localSessionMaxAgeSeconds: 3600
      heartbeatUrl: "https://<ModelEngine IP>:5443/<heartbeat-path>"
      heartbeatIntervalSeconds: 300
      heartbeatCookieName: "<cookie-name>"
      renewBeforeSeconds: 300
      renewTimeoutSeconds: 10
      syntheticEmailDomain: "cas.local"
      logoutUrl: "/logout?service=http://<Nexent IP>:30000"
      sslVerify: false
      caBundle: ""

同时,需要进入 OMS 容器添加 CAS client 的注册配置文件,参考如下步骤:

bash
# 创建注册配置文件,将 JSON 部分输入文件并保存
vim Nexent-10000001.json
{
  "@class": "org.apereo.cas.services.CasRegisteredService",
  "serviceId": "http://<Nexent IP>:30000.*",
  "name": "Nexent CAS Client",
  "id": 1000001,
  "description": "Nexent CAS SSO client",
  "evaluationOrder": 1,
  "logoutType": "BACK_CHANNEL",
  "logoutUrl": "http://<Nexent IP>:30000/api/user/cas/logout_callback"
}

# 执行如下命令,将配置文件拷贝到容器中
kubectl cp Nexent-10000001.json model-engine/$(kubectl get pods -n model-engine -l app=oms --no-headers | awk '{print $1}'):/opt/huawei/fce/apps/platform/webapps/SSOSvr/WEB-INF/classes/services/Nexent-10000001.json
kubectl exec -i -n model-engine $(kubectl get pods -n model-engine -l app=oms --no-headers | awk '{print $1}') -- chown tomcat:fusioncube /opt/huawei/fce/apps/platform/webapps/SSOSvr/WEB-INF/classes/services/Nexent-10000001.json

🔍 故障排查

查看 Pod 状态

bash
kubectl get pods -n nexent
kubectl describe pod <pod-name> -n nexent

查看日志

bash
kubectl logs -n nexent -l app=nexent-config
kubectl logs -n nexent -l app=nexent-web
kubectl logs -n nexent -l app=nexent-elasticsearch

重启服务

bash
kubectl rollout restart deployment/nexent-config -n nexent
kubectl rollout restart deployment/nexent-runtime -n nexent

重新初始化 Elasticsearch

如果 Elasticsearch 初始化失败:

bash
bash init-elasticsearch.sh

清理过期的 PersistentVolume

bash
kubectl delete pv nexent-elasticsearch-pv nexent-postgresql-pv nexent-redis-pv nexent-minio-pv

💡 需要帮助