文档首页 / Kubernetes 部署要点

Kubernetes 部署要点

发行包不含 Helm 或 Kubernetes 清单;列出在 Kubernetes 上自行编排时,探针、密钥、存储、粘性会话与机器绑定方面有源码依据的要点。

概述

当前发行包不提供 Helm 包或 Kubernetes 清单,也没有配套的编排工具。产品是一个 jar 加外部数据库,因此可以把它当作普通的有状态 Web 应用来编排。本文只列出程序行为决定的要点,镜像构建见 容器化部署。

Kubernetes 部署结构:Ingress、Pod 探针、Secret、PVC 与外部配置库

要点

主题 做法 依据
镜像 含 Java 21+ 完整运行时的镜像(JDK 或 JRE) 2.0.61 之前的版本运行期需要 javac,须用 JDK 镜像
配置库连接 用 Secret 注入 MR_DB_URL、MR_DB_USERNAME、MR_DB_PASSWORD 环境变量优先于配置文件,密码不落盘
首个管理员 连接全新空库时,用 Secret 注入 MR_ADMIN_ACCOUNT、MR_ADMIN_PASSWORD;库里已有管理员后可以去掉 见 Docker 部署「首个管理员」
加密密钥 用 Secret 固定 SIGHTDATA_DATASOURCE_KEY、SIGHTDATA_AI_KEY、SIGHTDATA_SERVER_KEY、SIGHTDATA_FRONT_KEY,所有副本一致 见 配置项参考
授权 授权存在配置库,副本之间自动同步;也可用 MR_LICENSE_CODE(或 MR_LICENSE_FILE / 工作目录下的 report-license.txt)在配置库为空时自动注册 见 授权与许可
机器绑定 授权带绑定时,注入稳定的 MR_MACHINE_FP;Pod 内会自动获取集群标识,也可用 MR_CLUSTER_UID 显式指定 机器身份采集逻辑
持久化 data/ 目录按需挂载卷(备份包、驱动、插件、字体、内置 H2) 目录布局见配置项参考
多副本 需要 Redis 与粘性会话,见 集群与高可用 报表缓存在节点本地内存
服务暴露 Ingress 或 Service 前置,需支持 WebSocket、SSE,上传大小不小于 220MB 以所用 Ingress 控制器的配置项为准

探针

程序提供 GET /api/health,无需登录,Setup 模式下也可访问。只要进程存活就返回 HTTP 200,status 恒为 UP;是否已初始化、配置库是否可达、是否就绪,由返回 JSON 中的字段表达:

字段 含义
dbReachable 配置库是否可达
initialized 是否已初始化
mode SINGLE 或 CLUSTER
ready 已初始化且运行时就绪

因此:

  • 存活探针可以用 httpGet 访问 /api/health,返回 200 即视为存活。
  • 需要「就绪」语义时,httpGet 不够,因为未就绪时也返回 200。可以用 exec 探针执行 curl 并检查响应体中的 "ready":true(镜像中需有 curl)。
  • 配置库暂时不可达时,程序不会退出,而是降级启动并每 15 秒重试,此时存活探针仍然通过,就绪判断应看 ready。
  • 启动时间包含数据库迁移,startupProbe 或 initialDelaySeconds 请留足余量。

清单示例

以下为示例片段,非官方模板,未经发行流程验证:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sight-report
spec:
  replicas: 1
  selector:
    matchLabels: { app: sight-report }
  template:
    metadata:
      labels: { app: sight-report }
    spec:
      containers:
        - name: sight-report
          image: registry.example.com/sight-report:2.0.64
          ports:
            - containerPort: 9091
          env:
            - name: MR_DB_URL
              valueFrom: { secretKeyRef: { name: sight-db, key: url } }
            - name: MR_DB_USERNAME
              valueFrom: { secretKeyRef: { name: sight-db, key: username } }
            - name: MR_DB_PASSWORD
              valueFrom: { secretKeyRef: { name: sight-db, key: password } }
          livenessProbe:
            httpGet: { path: /api/health, port: 9091 }
            initialDelaySeconds: 60
            periodSeconds: 15
          volumeMounts:
            - { name: data, mountPath: /app/data }
      volumes:
        - name: data
          persistentVolumeClaim: { claimName: sight-data }

注意:replicas 大于 1 之前,必须先完成 集群与高可用 中的 Redis 与粘性会话配置,并切换到集群模式。

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。