# K8s 部署说明 > **状态**:已迁移到 Helm Chart 管理。本目录保留 `namespace.yaml` 作为基础资源,其余资源通过 `helm/` 下的 chart 部署。 ## 目录结构 ``` infra/k8s/ ├─ namespace.yaml # 基础命名空间(4 个:system/services/monitoring/ingress) └─ helm/ # Helm Chart 仓库 ├─ edu-platform/ # 平台级 chart(namespace/configmap/secret/ingress/hpa) │ ├─ Chart.yaml │ ├─ values.yaml # 全局默认值 │ ├─ values-dev.yaml # 开发环境覆盖 │ ├─ values-staging.yaml # 预发布环境覆盖 │ ├─ values-prod.yaml # 生产环境覆盖 │ └─ templates/ │ ├─ _helpers.tpl │ ├─ namespace.yaml │ ├─ configmap.yaml │ ├─ secret.yaml # 骨架;生产请用 External Secrets Operator │ ├─ ingress.yaml │ └─ hpa.yaml # 全局 HPA 示例(默认不渲染) ├─ api-gateway/ # 服务级 chart(完整迁移自原 manifest) │ ├─ Chart.yaml │ ├─ values.yaml │ └─ templates/ │ ├─ _helpers.tpl │ ├─ deployment.yaml │ ├─ service.yaml │ ├─ configmap.yaml │ └─ hpa.yaml ├─ iam/ # 业务服务 chart 桩(P2) ├─ core-edu/ # 业务服务 chart 桩(P3) ├─ content/ # 业务服务 chart 桩(P4) ├─ msg/ # 业务服务 chart 桩(P5) ├─ data-ana/ # 业务服务 chart 桩(P4) └─ ai/ # 业务服务 chart 桩(P5) ``` ## 命名空间规划 | Namespace | 用途 | | ---------------- | ---------------------------------------------------------- | | `edu-system` | 系统组件(数据库代理、配置等) | | `edu-services` | 业务微服务(api-gateway / iam / core-edu / content / msg) | | `edu-monitoring` | 监控栈(Prometheus / Grafana / Alertmanager) | | `edu-ingress` | 入口控制器(NGINX Ingress / cert-manager) | ## 部署方式 ### 1. 安装平台级 chart(命名空间 / 全局 ConfigMap / Secret / Ingress) ```bash # 开发环境 helm install edu-platform ./helm/edu-platform -f ./helm/edu-platform/values-dev.yaml # 生产环境 helm install edu-platform ./helm/edu-platform -f ./helm/edu-platform/values-prod.yaml \ --set secret.data.MYSQL_PASSWORD= \ --set secret.data.JWT_SECRET= \ --set secret.data.REDIS_PASSWORD= ``` ### 2. 安装服务级 chart ```bash # api-gateway helm install api-gateway ./helm/api-gateway # 其他业务服务(iam / core-edu / content / msg / data-ana / ai) helm install iam ./helm/iam helm install core-edu ./helm/core-edu # ... ``` ### 3. 应用基础命名空间(如未通过 helm 安装 edu-platform) ```bash kubectl apply -f namespace.yaml ``` ## 验证 ```bash # lint 所有 chart helm lint helm/edu-platform helm/api-gateway helm/iam helm/core-edu helm/content helm/msg helm/data-ana helm/ai # 渲染模板(不实际部署) helm template edu-platform ./helm/edu-platform helm template api-gateway ./helm/api-gateway ``` ## 环境差异 | 环境 | values 文件 | 副本数 | HPA | TLS | | ------- | ------------------- | ------ | ---- | ---- | | dev | values-dev.yaml | 1 | 关闭 | 关闭 | | staging | values-staging.yaml | 2 | 2-5 | 开启 | | prod | values-prod.yaml | 3 | 3-20 | 开启 | ## 敏感配置 ⚠️ **生产环境禁止在 values.yaml 中硬编码密钥**。 推荐方案: 1. 使用 [External Secrets Operator](https://external-secrets.io/) 对接 Vault / KMS / 云 KMS 2. 通过 `--set secret.data.=` 临时注入 3. 通过 ArgoCD / Flux GitOps + Sealed Secrets ## 后续路线 - [ ] 接入 External Secrets Operator - [ ] ArgoCD / Flux GitOps 部署 - [ ] 各服务 chart 补充 configmap.yaml / hpa.yaml 模板(当前桩仅含 deployment/service) - [ ] 服务级 values-dev/staging/prod 覆盖文件 - [ ] CI/CD 集成(helm chart 推送到 OCI registry)