部署运维
**本文引用的文件** - [[bi-analysis/Dockerfile]](../file/bi-analysis/dockerfile) - [[bi-analysis/k8s/deployment.yaml]](../file/bi-analysis/k8s/deployment.yaml) - [[bi-analysis/k8s/service.yaml]](../file/bi-analysis/k8s/service.yaml) - [[bi-api-jushuitan/Dockerfile]](../file/bi-api-jushuitan/dockerfile) - [[bi-api-leke/Dockerfile]](../file/bi-api-leke/dockerfile) - [[bi-basic/Dockerfile]](../file/bi-basic/dockerfile) - [[bi-chat/Dockerfile]](../file/bi-chat/dockerfile) - [[bi-chat/docker-compose.yml]](../file/bi-chat/docker-compose.yml) - [[scripts/deploy.sh]](../file/scripts/deploy.sh) - [[bi-cron/k8s/cronjob.yaml]](../file/bi-cron/k8s/cronjob.yaml) - [[bi-intra/apisix/apisix-gateway-lb-test.yaml]](../file/bi-intra/apisix/apisix-gateway-lb-test.yaml) - [[bi-intra/apisix/services.yaml]](../file/bi-intra/apisix/services.yaml) - [[bi-common/observability/logger/logger.go]](../file/bi-common/observability/logger/logger.go) - [[bi-common/observability/metrics/metrics.go]](../file/bi-common/observability/metrics/metrics.go) - [[bi-common/registry/nacos/client.go]](../file/bi-common/registry/nacos/client.go)
目录
简介
本文件面向BI分析平台的运维团队,提供从容器化构建、Kubernetes部署、CI/CD自动化到监控告警、负载均衡与高可用、数据库备份恢复与版本升级策略、以及日常维护与性能调优的完整运维指南。文档以仓库中现有的Dockerfile、Kubernetes配置、APISIX网关配置、日志与指标组件、Nacos注册与配置中心集成等为依据,结合最佳实践进行说明。
项目结构
- 平台由多个微服务组成,每个服务均提供独立的Dockerfile与Kubernetes资源配置,便于按模块独立发布与扩缩容。
- 网关采用APISIX,统一对外暴露HTTPS入口,并通过路由规则将流量分发至各后端服务。
- 日志与指标能力在公共组件中提供,服务侧可直接复用,便于集中化观测与告警。
- 提供cron作业模板,支撑定时任务与批量数据同步场景。
图表来源
章节来源
核心组件
- 容器镜像构建:各服务均提供Dockerfile,采用多阶段构建,builder阶段下载依赖并编译,最终镜像仅包含运行时产物,减少体积与攻击面。
- Kubernetes部署:提供Deployment与Service模板,支持通过ConfigMap与Secret注入环境变量与认证信息;NodePort用于开发/测试环境快速访问。
- 网关与路由:APISIX统一入口,支持HTTPS、IP白名单、WAF、JWT认证、路由前缀与上游转发。
- 观测性:公共日志组件支持stdout/file/阿里云三路输出;指标组件提供HTTP/DB/Cache/业务指标,便于Prometheus采集。
- 服务发现与配置:Nacos作为注册中心与配置中心,支持动态配置下发与服务注册。
章节来源
- [bi-analysis/Dockerfile]
- [bi-analysis/k8s/deployment.yaml]
- [bi-analysis/k8s/service.yaml]
- [bi-intra/apisix/services.yaml]
- [bi-common/observability/logger/logger.go]
- [bi-common/observability/metrics/metrics.go]
- [bi-common/registry/nacos/client.go]
架构总览
下图展示从客户端到后端服务的典型链路:浏览器/移动端经APISIX网关访问后端服务,服务通过Nacos进行注册与配置拉取,同时使用Redis/PostgreSQL/Milvus等中间件完成业务处理与数据持久化。
图表来源
章节来源
详细组件分析
容器化与镜像构建
- 多阶段构建:builder阶段设置国内镜像源、安装git/tzdata,配置GOPRIVATE/GONOPROXY等私有仓库访问参数,编译生成server二进制;最终镜像仅拷贝运行时产物与配置,避免携带凭证。
- 端口暴露:不同服务暴露不同端口,例如分析服务暴露HTTP与gRPC端口,基础服务暴露单一端口,需与K8s Service与配置文件保持一致。
- 时区与时钟:统一设置为Asia/Shanghai,避免时区偏差导致的日志与调度问题。
图表来源
章节来源
Kubernetes部署与资源配置
- Deployment:设置副本数、容器端口、资源requests/limits、环境变量(DEPLOY_ENV、NACOS认证)、命令行参数传递环境变量。
- Service:NodePort类型用于开发/测试环境,映射HTTP与gRPC端口;生产建议使用Ingress或LoadBalancer。
- Secret与ConfigMap:通过envFrom从ConfigMap与Secret注入,避免将敏感信息硬编码在镜像中。
- 镜像拉取密钥:imagePullSecrets指向阿里云镜像仓库密钥,确保私有镜像拉取成功。
图表来源
章节来源
CI/CD自动化与部署脚本
- 脚本职责:检查前置条件(git/docker/docker-compose)、拉取代码、前端构建、后端编译、构建镜像、使用docker-compose启动服务。
- 适用场景:本地开发与集成测试环境;生产环境建议替换为Kubernetes原生部署与CI流水线(如GitLab CI/ArgoCD/Flux)。
- 建议增强:将镜像构建与推送、K8s资源apply、健康检查与回滚策略纳入CI流程。
图表来源
章节来源
负载均衡、服务发现与高可用
- 负载均衡:测试环境通过阿里云CLB(LoadBalancer)暴露APISIX,配置按流量计费、最小规格与HTTPS监听;生产建议使用Ingress控制器与证书管理。
- 服务发现:各服务通过Nacos进行注册与发现,支持多实例部署与健康检查;服务间调用通过Nacos服务名解析。
- 高可用:Deployment副本数与Pod就绪探针配合HPA/HPA策略实现弹性伸缩;网关层可结合多可用区与SLB实现跨可用区容灾。
图表来源
章节来源
监控告警与可观测性
- 日志:支持stdout/file/阿里云三路输出,可配置按大小/按日轮转、保留天数与压缩;日志级别过滤与多输出合并。
- 指标:提供HTTP请求总量/耗时、数据库查询总量/耗时/错误、缓存命中/未命中/操作耗时、业务操作总量等指标,便于Prometheus采集与Grafana可视化。
- 建议:接入Prometheus/Grafana/PaasAlert等平台,设置阈值告警与SLI/SLO看板。
图表来源
章节来源
数据库备份恢复与版本升级
- 备份策略:PostgreSQL建议使用逻辑备份(如pg_dump)定期归档;Milvus/Minio等对象存储类数据按周期快照或版本化备份。
- 恢复演练:制定RTO/RPO目标,定期进行恢复演练,验证备份数据完整性与恢复时间。
- 版本升级:采用蓝绿/滚动发布策略,先在预生产验证,再逐步切换流量;数据库schema变更采用灰度与回滚预案。
[本节为通用运维实践说明,不直接分析具体文件,故无“章节来源”]
故障排除指南
- 服务不可达:检查Service端口与容器端口是否一致、NodePort范围是否正确、防火墙与安全组放通。
- 配置异常:确认ConfigMap/Secret已正确挂载,DEPLOY_ENV与NACOS配置文件路径一致;Nacos认证凭据正确。
- 网关异常:检查APISIX路由前缀、上游地址、WAF规则与JWT密钥;测试环境CLB监听器需开启“获取客户端真实IP”。
- 日志与指标:确认日志输出配置与轮转策略;指标采集端点与标签是否正确;Prometheus抓取间隔与超时合理。
- 依赖组件:Redis/PostgreSQL/Milvus/Etcd等组件健康状态与网络连通性;Nacos服务可用性与命名空间隔离。
章节来源
- [bi-analysis/k8s/service.yaml]
- [bi-analysis/k8s/deployment.yaml]
- [bi-intra/apisix/services.yaml]
- [bi-common/observability/logger/logger.go]
- [bi-common/observability/metrics/metrics.go]
依赖关系分析
- 服务间依赖:各后端服务通过Nacos进行服务发现与配置拉取;前端通过APISIX路由到后端服务。
- 中间件依赖:Redis用于缓存,PostgreSQL用于元数据存储,Milvus/Minio/Etcd用于向量检索与对象存储。
- 观测性依赖:日志与指标组件为通用能力,服务侧按需引入;APISIX提供统一网关与安全防护。
图表来源
章节来源
性能考量
- 资源配额:为Deployment设置合理的requests/limits,避免资源争抢;根据实际QPS与响应时间调整副本数与CPU/内存配额。
- 网关性能:APISIX路由规则尽量简化,避免过多正则匹配;开启必要的缓存与连接池;HTTPS证书与ALPN优化。
- 数据库性能:慢查询日志与索引优化;连接池大小与超时设置;读写分离与只读副本。
- 缓存策略:热点数据提升缓存命中率,设置合理的TTL与失效策略;缓存预热与降级策略。
- 指标与采样:对高频指标进行采样或聚合,避免Prometheus压力过大。
[本节提供通用性能建议,不直接分析具体文件,故无“章节来源”]
结论
本运维文档基于仓库现有配置与组件,给出了容器化构建、Kubernetes部署、网关路由、观测性、服务发现与配置中心、以及CI/CD与故障排除的完整实践指南。建议在生产环境中进一步完善CI/CD流水线、引入Ingress与证书管理、强化安全与合规、并建立完善的备份与演练机制。
附录
- 前端Chat服务本地化:提供docker-compose编排,包含PostgreSQL、Milvus、Etcd、MinIO、Redis等依赖,适合本地联调与演示。
章节来源