准备哪些组件
管理平台提供控制台、数据管理、预测和推荐;任务引擎负责周期运行。需要调整集群副本时部署 Operator,需要为新 Pod 应用资源建议时配置准入策略。
| 组件 | 用途 |
|---|---|
| Platform | 管理界面、API、指标、预测与推荐。 |
| Job engine | 采集、预测、回测、评估等周期任务,可与平台一起运行。 |
| Operator | 按授权和边界调整目标工作负载的副本。 |
| 资源准入 | 使用有效资源建议处理新 Pod 的 requests / limits。 |
Helm 部署平台
在仓库根目录执行以下命令。准备 Helm 3、可用的 Kubernetes 集群及镜像仓库。平台与 Operator 分别安装,平台 Chart 包含控制台、API、预测和任务引擎,不包含数据库或 Operator。
先准备 web/ 源码,构建并推送平台镜像;将示例中的仓库地址与版本替换为自己的值。
docker build -f deploy/docker/Dockerfile --target kube-res-foresight \
-t registry.example.com/kube-res-foresight:0.1.0 .
docker push registry.example.com/kube-res-foresight:0.1.0试用可使用默认 SQLite 与 5Gi PVC,集群需提供可用的 StorageClass;SQLite 只允许一个平台副本。
helm install kube-res-foresight deploy/helm/kube-res-foresight \
-n kube-res-foresight --create-namespace \
--set image.repository=registry.example.com/kube-res-foresight \
--set image.tag=0.1.0数据库与密钥
使用外部 PostgreSQL 或 MySQL 时,先创建数据库和具有建表权限的用户,并准备平台凭据 Secret。平台不负责创建数据库实例。以下为独立安装示例,不要与前面的 SQLite 安装连续执行。
kubectl create namespace kube-res-foresight
kubectl -n kube-res-foresight create secret generic kube-res-foresight-credentials \
--from-file=jwt-secret=./jwt-secret.txt \
--from-file=secret-key=./secret-key.txt \
--from-file=database-password=./database-password.txt三个文件分别保存 JWT 签名密钥、至少 32 字符的凭据加密密钥和数据库密码,文件内容不要带末尾换行。妥善保管密钥文件,不加入仓库。创建 values-production.yaml:
image:
repository: registry.example.com/kube-res-foresight
tag: "0.1.0"
database:
driver: postgres
host: pg.example.internal
port: 5432
name: kube-res-foresight
username: kube-res-foresight
sslMode: require
secrets:
existingSecret: kube-res-foresight-credentials
persistence:
enabled: falsehelm install kube-res-foresight deploy/helm/kube-res-foresight \
-n kube-res-foresight -f values-production.yaml
kubectl -n kube-res-foresight rollout status deployment/kube-res-foresight
helm test kube-res-foresight -n kube-res-foresight
kubectl -n kube-res-foresight port-forward svc/kube-res-foresight 8080:80打开 http://localhost:8080。首次登录为 admin / 123456,登录后立即修改密码。MySQL 将 database.driver 改为 mysql、端口改为 3306,并填写对应连接信息;sslMode 仅用于 PostgreSQL。示例要求 PostgreSQL 支持 TLS。
| 配置 | 用途 |
|---|---|
migration.mode: auto | 默认 SQLite 用 init container 迁移,外部数据库用安装/升级前的 hook Job 迁移。 |
imagePullSecrets | 配置私有镜像仓库拉取凭据。 |
ingress | 设置入口控制器、域名与 TLS;默认关闭。 |
resources | 设置平台容器的 requests / limits,按模块数与历史窗口调整。 |
secrets.existingSecret | 复用稳定密钥。默认键名为 jwt-secret、secret-key、database-password。 |
邮件、模型连接和预测规则在控制台中管理,不写入 Helm values。全部部署参数见平台 values.yaml ↗。
Helm 部署 Operator
在平台创建仅有 Operator 决策读取与上报权限的开发凭据,将 访问密钥:访问密钥密码 保存到无末尾换行的本地文件 operator-credential.txt,再创建 Secret。平台安装不会自动创建此凭据。
docker build -f deploy/docker/Dockerfile --target operator \
-t registry.example.com/kube-res-foresight-operator:0.1.0 .
docker push registry.example.com/kube-res-foresight-operator:0.1.0
kubectl -n kube-res-foresight create secret generic kube-res-foresight-platform \
--from-file=credential=./operator-credential.txt
helm install kube-res-foresight-operator deploy/helm/kube-res-foresight-operator \
-n kube-res-foresight \
--set image.repository=registry.example.com/kube-res-foresight-operator \
--set image.tag=0.1.0 \
--set platform.url=http://kube-res-foresight.kube-res-foresight.svc \
--set platform.credentialSecret.name=kube-res-foresight-platform
kubectl -n kube-res-foresight rollout status deployment/kube-res-foresight-operatorOperator 默认两个副本并启用 leader election,不需要安装 CRD。平台模块是工作负载与伸缩规则的配置入口;确认没有 HPA/KEDA 同时控制目标后,再开启系统自动模式开关和模块自动模式。新 Pod 资源准入另行配置 Kyverno,不由此 Chart 安装。
Prometheus 与 Grafana
集群已有 Prometheus Operator CRD 时,可开启指标发现、告警规则和 Grafana 看板 ConfigMap。以下 release=prom 仅为选择标签示例,需与实际 Prometheus 的 selector 一致;Grafana 需配置读取看板 ConfigMap 的 sidecar。
helm upgrade kube-res-foresight deploy/helm/kube-res-foresight \
-n kube-res-foresight --reuse-values \
--set metrics.serviceMonitor.enabled=true \
--set metrics.serviceMonitor.labels.release=prom \
--set metrics.prometheusRule.enabled=true \
--set metrics.prometheusRule.labels.release=prom \
--set metrics.grafanaDashboard.enabled=true
helm upgrade kube-res-foresight-operator deploy/helm/kube-res-foresight-operator \
-n kube-res-foresight --reuse-values \
--set metrics.serviceMonitor.enabled=true \
--set metrics.serviceMonitor.labels.release=promHelm 升级与卸载
升级前备份数据库,保留原 Secret。更换凭据加密密钥会使已有连接密码无法解密。Chart 自动执行常规迁移,不执行清理退役表的 --upgrade。
helm upgrade kube-res-foresight deploy/helm/kube-res-foresight \
-n kube-res-foresight --reuse-values --set image.tag=NEW_TAG
helm upgrade kube-res-foresight-operator deploy/helm/kube-res-foresight-operator \
-n kube-res-foresight --reuse-values --set image.tag=NEW_TAG不再使用时,分别卸载执行组件和平台:
helm uninstall kube-res-foresight-operator -n kube-res-foresight
helm uninstall kube-res-foresight -n kube-res-foresightSQLite 更新采用 Recreate,会短暂中断。卸载保留平台 Chart 创建的 Secret 与 SQLite PVC,外部数据库和自行创建的 Secret 不受影响。卸载 Operator 不会还原它最后写入的工作负载副本数。
构建管理平台
准备仓库声明的 Go、Node.js 与 pnpm 工具链。管理前端 web/ 是独立仓库,构建前需要准备好其源码。
cd web
pnpm install --frozen-lockfile
cd ..
make package-web
mkdir -p target/bin
go build -o target/bin/kube-res-foresight ./cmd配置与启动
参考 config.yaml 配置数据库、监听地址、日志和稳定的 JWT 密钥。数据库支持 SQLite、MySQL、PostgreSQL。环境变量使用 KUBE_RES_FORESIGHT_ 前缀,凭据加密密钥使用 KUBE_RES_FORESIGHT_SECRET_KEY。
# 首次安装:显式迁移
target/bin/kube-res-foresight server --config config.yaml --migration
# 启动管理平台与任务引擎
target/bin/kube-res-foresight all --config config.yaml示例服务端口为 20001,启动后访问 http://localhost:20001。也可分别运行 server 与 job。
已有安装与执行组件
保留已有数据库连接、路径及密钥值。升级前先备份,再审阅 --upgrade 的清理范围;普通启动不执行退役表清理。
Operator 与准入需要目标集群权限、凭据、证书及相应策略。先保持观察模式,检查资源引用和副本所有权,再开放执行。