Kubernetes 部署
前提条件
- Kubernetes 集群(1.24+)
- 已配置
kubectl - 可用的 StorageClass(默认:
standard) - Ingress 控制器(推荐 nginx-ingress)
- cert-manager(可选,用于 TLS)
快速部署
kubectl apply -k k8s/
资源清单
所有清单文件在 k8s/ 目录中,按功能组织:
k8s/
├── namespace.yaml # 命名空间: open-ace
├── configmap.yaml # ConfigMap + Secret
├── storage.yaml # PVC + ServiceAccount + RBAC
├── database.yaml # PostgreSQL + Redis StatefulSets
├── deployment.yaml # 应用 Deployment + HPA
├── service.yaml # Service + Ingress
├── policies.yaml # PDB + NetworkPolicy
└── kustomization.yaml # Kustomize 配置
命名空间
创建带有标准 Kubernetes 标签的 open-ace 命名空间。
Deployment
| 设置 | 值 |
|---|---|
| 副本数 | 3 |
| 镜像 | open-ace:latest |
| 容器端口 | 5001 |
| 更新策略 | RollingUpdate(maxSurge=1, maxUnavailable=0) |
| 安全上下文 | runAsNonRoot, runAsUser=1000 |
资源限制:
| 资源 | 请求 | 限制 |
|---|---|---|
| CPU | 100m | 500m |
| 内存 | 256Mi | 512Mi |
健康检查:
- 存活检查:HTTP GET
/health,initialDelay=10s,period=10s - 就绪检查:HTTP GET
/health,initialDelay=5s,period=5s
Pod 反亲和性: 优先分布在不同节点上。
HorizontalPodAutoscaler
| 设置 | 值 |
|---|---|
| 最小副本数 | 3 |
| 最大副本数 | 10 |
| CPU 目标 | 70% |
| 内存目标 | 80% |
| 扩容 | max(100%/15s, 2 pods/15s) |
| 缩容 | 10%/60s,稳定期 300s |
Service 与 Ingress
ClusterIP Service: 端口 80 → targetPort 5001
Ingress:
- 主机:
open-ace.example.com(需修改) - TLS 通过 cert-manager(
letsencrypt-prod) - Body 大小:50m
- 超时:300s read/send
PostgreSQL StatefulSet
| 设置 | 值 |
|---|---|
| 镜像 | postgres:15-alpine |
| 端口 | 5432 |
| 数据库 | openace |
| PVC | 10Gi, ReadWriteOnce |
| CPU | 100m-500m |
| 内存 | 256Mi-1Gi |
凭证来自 Secret open-ace-secrets(键:DB_USER、DB_PASSWORD)。
Redis StatefulSet
| 设置 | 值 |
|---|---|
| 镜像 | redis:7-alpine |
| 端口 | 6379 |
| 最大内存 | 256mb(allkeys-lru) |
| PVC | 5Gi, ReadWriteOnce |
| CPU | 50m-200m |
| 内存 | 128Mi-512Mi |
ConfigMap
应用配置键:FLASK_APP、FLASK_ENV、PYTHONUNBUFFERED、LOG_LEVEL、DB_HOST、DB_PORT、DB_NAME、REDIS_HOST、REDIS_PORT、ENABLE_SSO、ENABLE_MULTI_TENANT、ENABLE_AUDIT_LOG、ENABLE_CONTENT_FILTER、AUDIT_LOG_RETENTION_DAYS、DATA_RETENTION_DAYS
Secret
重要: 部署到生产环境前,请更改所有占位值。建议使用 sealed-secrets 或外部密钥管理工具。
键:SECRET_KEY、UPLOAD_AUTH_KEY、DB_USER、DB_PASSWORD、REDIS_PASSWORD
PersistentVolumeClaim
- 名称:
open-ace-data - 大小:10Gi
- 访问模式:ReadWriteOnce
- 挂载路径:
/app/data
RBAC
- ServiceAccount:
open-ace - Role:对 configmaps、secrets、pods 的 get/list/watch 权限
- RoleBinding:将角色绑定到
open-ace命名空间中的服务账户