feat(infra): k8s Helm Chart 演化与备份脚本测试

- 新增 edu-platform 平台级 chart(namespace/configmap/secret/ingress/hpa)
- 新增 api-gateway 服务级 chart(完整迁移自原 manifest)
- 新增 6 个业务服务 chart 桩(iam/core-edu/content/msg/data-ana/ai)
- 删除原 api-gateway-deployment.yaml(已迁移至 helm chart)
- 更新 infra/k8s/README.md 为 Helm Chart 管理说明
- 新增 backup-mysql.sh dry-run 测试脚本(17 断言)
This commit is contained in:
SpecialX
2026-07-08 12:50:56 +08:00
parent 9b33303195
commit d831915f06
51 changed files with 2111 additions and 165 deletions

View File

@@ -1,55 +1,118 @@
# K8s 部署说明(骨架)
# K8s 部署说明
> **说明**本目录为 K8s 部署**骨架**,仅提供最小可用 manifest**生产环境请使用 Helm Chart**
> **状态**已迁移到 Helm Chart 管理。本目录保留 `namespace.yaml` 作为基础资源,其余资源通过 `helm/` 下的 chart 部署
## 适用范围
## 目录结构
- 开发 / Staging 环境快速拉起
- 验证服务在 K8s 上的基本可用性
- 作为后续 Helm 化的过渡参考
## Manifest 类别
| 文件 | 类别 | 用途 |
|------|------|------|
| `namespace.yaml` | namespace | 划分 4 个命名空间system / services / monitoring / ingress |
| `configmap-*.yaml` | configmap | 非敏感配置(服务端口、特性开关等) |
| `secret-*.yaml` | secret | 敏感配置(密钥、连接串),生产用 External Secrets |
| `*-deployment.yaml` | deployment | 服务无状态部署,含探针 / 资源 / 副本数 |
| `*-service.yaml` | service | ClusterIP 服务发现 |
| `ingress.yaml` | ingress | 对外入口TLS 终结 + 路由 |
| `*-hpa.yaml` | hpa | 水平自动扩缩容 |
```
infra/k8s/
├─ namespace.yaml # 基础命名空间4 个system/services/monitoring/ingress
└─ helm/ # Helm Chart 仓库
├─ edu-platform/ # 平台级 chartnamespace/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 |
| 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=<base64> \
--set secret.data.JWT_SECRET=<base64> \
--set secret.data.REDIS_PASSWORD=<base64>
```
### 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
kubectl apply -f configmap-*.yaml
kubectl apply -f secret-*.yaml # 生产请改用 External Secrets
kubectl apply -f *-deployment.yaml
kubectl apply -f *-service.yaml
kubectl apply -f ingress.yaml
kubectl apply -f *-hpa.yaml
```
## Helm 化路线(后续)
## 验证
1. 将骨架迁移为 Helm Chart`charts/edu-platform/`
2. 每个微服务一个子 Chart统一通过 umbrella chart 编排
3. 环境差异通过 values-<env>.yaml 管理
4. 敏感配置接入 External Secrets Operator对接 Vault / KMS
5. CI/CD 通过 ArgoCD / Flux 做 GitOps 部署
```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
```
- `namespace.yaml`4 个命名空间定义
- `api-gateway-deployment.yaml`api-gateway Deployment + Service 骨架
## 环境差异
| 环境 | 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.<KEY>=<base64>` 临时注入
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