Files
Edu/infra/k8s/README.md
SpecialX d831915f06 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 断言)
2026-07-08 12:50:56 +08:00

119 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# K8s 部署说明
> **状态**:已迁移到 Helm Chart 管理。本目录保留 `namespace.yaml` 作为基础资源,其余资源通过 `helm/` 下的 chart 部署。
## 目录结构
```
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 |
## 部署方式
### 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
```
## 验证
```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.<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