容器化部署
**本文引用的文件** - [[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-cron/Dockerfile]](../file/bi-cron/dockerfile) - [[bi-chat/docker-compose.yml]](../file/bi-chat/docker-compose.yml) - [[bi-intra/charts/apisix/templates/apisix-config-cm.yml]](../file/bi-intra/charts/apisix/templates/apisix-config-cm.yml)
目录
简介
本文件面向BI分析平台的容器化部署,覆盖Docker镜像构建流程(含多阶段构建与安全要点)、Kubernetes资源配置(Deployment、Service、ConfigMap、Secret等)、服务发现与负载均衡、Helm Charts使用、滚动更新与蓝绿/金丝雀发布策略,以及资源限制、亲和性与污点容忍等高级配置。文档同时为各服务模块提供可直接落地的部署示例与配置说明。
项目结构
本仓库采用多模块Go/Python微服务架构,每个服务均提供独立的Dockerfile与Kubernetes清单,便于按需单独部署或组合部署。典型目录组织如下:
- 各业务服务根目录下包含Dockerfile与k8s子目录(如bi-analysis、bi-api-jushuitan等)
- 部分服务提供docker-compose.yml用于本地开发联调(如bi-chat)
章节来源
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-api-jushuitan/Dockerfile#L1-L53
- file://bi-api-leke/Dockerfile#L1-L53
- file://bi-basic/Dockerfile#L1-L53
- file://bi-chat/Dockerfile#L1-L38
- file://bi-cron/Dockerfile#L1-L44
核心组件
- Docker镜像构建:统一基于多阶段构建,第一阶段拉取私有依赖并编译二进制,第二阶段仅复制运行时依赖与二进制,确保镜像最小化与安全(凭证不进入最终镜像)。
- Kubernetes部署:通过Deployment控制副本与滚动升级,Service暴露HTTP/gRPC端口;开发环境使用NodePort便于本地访问。
- 配置与密钥:通过ConfigMap注入环境变量,通过Secret注入认证凭据;镜像拉取使用专用pull secret。
- 辅助工具:部分服务提供docker-compose.yml以支持本地联调。
章节来源
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
- file://bi-chat/docker-compose.yml
架构总览
下图展示容器化部署的整体交互:客户端/网关通过Service访问Pod,Pod内进程监听HTTP/gRPC端口;配置与密钥通过Kubernetes注入。
图表来源
章节来源
- file://bi-analysis/k8s/service.yaml#L1-L20
- file://bi-analysis/k8s/deployment.yaml#L1-L54
详细组件分析
bi-analysis 组件
- 镜像构建
- 多阶段构建:第一阶段使用golang基础镜像,配置国内代理与私有仓库访问,编译生成server二进制;第二阶段仅复制二进制与配置,不携带凭证。
- 端口暴露:HTTP 10002、gRPC 20002。
- Kubernetes部署
- Deployment:设置镜像拉取密钥、环境变量(从ConfigMap与Secret注入)、CPU/内存资源限制与请求。
- Service:NodePort类型,映射HTTP与gRPC端口到宿主机。
- 部署示例
- 使用Helm或kubectl apply分别部署ConfigMap/Secret与Service/Deployment;确认Service NodePort可达。
- 如需内网访问,可改为ClusterIP并配合Ingress或API网关。
图表来源
章节来源
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
bi-api-jushuitan 组件
- 镜像构建:与bi-analysis一致的多阶段构建策略,端口暴露8000/9000。
- 部署要点:同上,注意端口一致性与ConfigMap/Secret注入。
章节来源
- file://bi-api-jushuitan/Dockerfile#L1-L53
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
bi-api-leke 组件
- 镜像构建:同上,端口暴露8000/9000。
- 部署要点:同上。
章节来源
- file://bi-api-leke/Dockerfile#L1-L53
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
bi-basic 组件
- 镜像构建:多阶段构建,端口暴露10086。
- 部署要点:同上。
章节来源
- file://bi-basic/Dockerfile#L1-L53
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
bi-chat 组件
- 镜像构建:Python多阶段构建,安装依赖后复制应用代码,端口8000。
- 本地联调:提供docker-compose.yml,便于本地快速启动与调试。
- 部署建议:可复用上述Kubernetes模板,或按需调整端口与资源。
章节来源
- file://bi-chat/Dockerfile#L1-L38
- file://bi-chat/docker-compose.yml
bi-cron 组件
- 镜像构建:多阶段构建,入口为cron二进制。
- 部署建议:使用CronJob而非Deployment,或作为Sidecar/InitContainer集成至其他工作负载。
章节来源
- file://bi-cron/Dockerfile#L1-L44
bi-intra(API网关与监控生态)
- Helm Charts:提供apisix、apisix-dashboard、grafana、kafka、nacos等Chart模板,可用于统一部署网关与周边系统。
- 示例:apisix-config-cm.yml展示了如何通过ConfigMap注入网关配置。
章节来源
- file://bi-intra/charts/apisix/templates/apisix-config-cm.yml
依赖分析
- 构建依赖:所有Go服务共享相同的多阶段构建模式,减少重复维护成本。
- 运行依赖:各服务通过ConfigMap/Secret注入配置与密钥,避免硬编码;通过imagePullSecrets拉取私有镜像仓库。
- 网络依赖:Service负责端口暴露与流量转发;生产环境建议结合Ingress/Nginx/Envoy等实现更精细的路由与安全策略。
图表来源
章节来源
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
性能考虑
- 镜像体积:多阶段构建仅保留运行时产物,显著降低镜像大小与攻击面。
- 启动时间:精简基础镜像与静态二进制,缩短冷启动时间。
- 资源配额:为不同服务设置合理的requests/limits,避免资源争抢。
- 端口规划:统一端口命名与范围,便于防火墙与网关策略配置。
故障排查指南
- 镜像拉取失败
- 检查imagePullSecrets是否正确创建与引用。
- 确认私有仓库凭证有效且网络可达。
- 容器启动失败
- 查看容器日志,确认端口与配置文件路径一致。
- 核对ConfigMap/Secret键值是否存在且拼写正确。
- 端口不可达
- 开发环境确认NodePort范围与映射;生产环境使用ClusterIP+Ingress。
- 升级回滚
- Deployment默认滚动更新策略,若异常可回滚到上一版本。
章节来源
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
结论
通过标准化的多阶段构建与Kubernetes原生资源编排,BI分析平台实现了可复用、可扩展、可运维的容器化部署方案。结合Helm Charts与网关生态,可在不同环境中快速落地,并通过资源限制与高级调度策略保障稳定性与安全性。
附录
Docker镜像构建最佳实践
- 凭证隔离:仅在builder阶段配置.git credentials,最终镜像不包含凭证。
- 代理与网络:配置国内代理与可信镜像源,提升构建速度与成功率。
- 编译优化:开启trimpath与链接器优化,减小二进制体积。
- 基础镜像:优先选择精简的基础镜像,减少依赖与漏洞面。
章节来源
- file://bi-analysis/Dockerfile#L1-L53
- file://bi-api-jushuitan/Dockerfile#L1-L53
- file://bi-api-leke/Dockerfile#L1-L53
- file://bi-basic/Dockerfile#L1-L53
- file://bi-chat/Dockerfile#L1-L38
- file://bi-cron/Dockerfile#L1-L44
Kubernetes资源配置清单
- ConfigMap:注入非敏感配置(如部署环境标识)。
- Secret:注入敏感信息(如Nacos用户名/密码)。
- Deployment:定义副本数、滚动更新策略、资源限制与环境变量。
- Service:暴露HTTP/gRPC端口,开发环境使用NodePort,生产环境建议ClusterIP+Ingress。
章节来源
- file://bi-analysis/k8s/deployment.yaml#L1-L54
- file://bi-analysis/k8s/service.yaml#L1-L20
服务发现与负载均衡
- 服务发现:通过Service的selector与label实现自动发现。
- 负载均衡:Kubernetes内置Round-Robin;生产环境可结合Ingress控制器实现更细粒度的路由与TLS终止。
章节来源
- file://bi-analysis/k8s/service.yaml#L1-L20
Helm Charts使用指南
- Chart结构:参考apisix等Chart模板,将配置抽象为values.yaml。
- 自定义values.yaml:集中管理镜像版本、副本数、资源配额、Ingress域名等。
- 依赖管理:通过Chart.yaml声明依赖,统一版本与兼容性。
章节来源
- file://bi-intra/charts/apisix/templates/apisix-config-cm.yml
发布策略
- 滚动更新:Deployment默认策略,建议设置maxUnavailable与maxSurge以平衡可用性与速度。
- 蓝绿发布:准备两套完全相同的Deployment与Service,切换selector实现无缝切换。
- 金丝雀发布:通过多副本与探针策略,逐步扩大新版本流量比例。
章节来源
- file://bi-analysis/k8s/deployment.yaml#L1-L54
高级部署配置
- 资源限制:requests/limits明确CPU与内存边界,防止资源抢占。
- Pod亲和性:根据业务特性设置节点/拓扑亲和,提升性能与可用性。
- 污点容忍:允许关键任务在特定节点容忍污点运行。
章节来源
- file://bi-analysis/k8s/deployment.yaml#L47-L53