# Kubernetes Deployment Guide ## 部署模式选择 ### 模式 A:Deployment + APScheduler(推荐) **优势**: - 常驻 Pod,资源占用稳定 - HTTP 健康检查支持 - 可通过 API 手动触发任务 - 日志集中输出,易于查看 - 启动速度快 **部署步骤**: ```bash # 1. 创建命名空间 kubectl apply -f namespace.yaml # 2. 部署 PVC(持久化存储) kubectl apply -f pvc.yaml # 3. 部署 ConfigMap(公开配置) kubectl apply -f configmap.yaml # 4. 部署 Secret(敏感信息) # 注意:先修改 secret.yaml 中的实际值 kubectl apply -f secret.yaml # 5. 部署 Deployment 和 Service kubectl apply -f deployment.yaml # 6. (可选)部署网络策略 kubectl apply -f network-policy.yaml # 7. 验证部署 kubectl get all -n ad-automation kubectl get pvc -n ad-automation # 8. 查看日志 kubectl logs -f -n ad-automation deployment/auto-put-ad-mini # 9. 端口转发(本地测试) kubectl port-forward -n ad-automation svc/auto-put-ad-mini 8080:8080 # 10. 测试健康检查 curl http://localhost:8080/health | jq . # 11. 手动触发任务 curl -X POST http://localhost:8080/trigger | jq . ``` ### 模式 B:CronJob(传统方式) **优势**: - Kubernetes 原生调度 - 任务隔离性好 - 故障自动重试 **部署步骤**: ```bash # 1-4. 同上 # 5. 部署 CronJob(替代 Deployment) kubectl apply -f cronjob.yaml # 6. 验证 kubectl get cronjob -n ad-automation kubectl get jobs -n ad-automation # 7. 手动触发测试 kubectl create job --from=cronjob/auto-put-ad-mini manual-test-1 -n ad-automation # 8. 查看日志 kubectl logs -n ad-automation job/manual-test-1 ``` ## 配置修改 ### 修改定时调度 **Deployment 模式**: ```bash kubectl patch configmap ad-config -n ad-automation \ --patch '{"data":{"CRON_SCHEDULE":"0 3 * * *"}}' # 改为凌晨3点 kubectl rollout restart deployment/auto-put-ad-mini -n ad-automation ``` **CronJob 模式**: ```bash kubectl edit cronjob auto-put-ad-mini -n ad-automation # 修改 spec.schedule 字段 ``` ### 启用自动执行 ```bash # 测试通过后,启用执行开关 kubectl patch configmap ad-config -n ad-automation \ --patch '{"data":{"EXECUTION_ENABLED":"true"}}' kubectl rollout restart deployment/auto-put-ad-mini -n ad-automation ``` ### 修改白名单账户 ```bash # 方式1:通过 Secret(推荐) kubectl patch secret ad-secrets -n ad-automation \ --patch '{"stringData":{"WHITELIST_ACCOUNTS":"80769799,71305011,12345678"}}' kubectl rollout restart deployment/auto-put-ad-mini -n ad-automation # 方式2:修改 whitelist.json 并重新构建镜像 ``` ## 监控和故障排查 ### 查看 Pod 状态 ```bash kubectl get pods -n ad-automation kubectl describe pod -n ad-automation ``` ### 查看日志 ```bash # 实时日志 kubectl logs -f -n ad-automation deployment/auto-put-ad-mini # 最近 100 行日志 kubectl logs -n ad-automation deployment/auto-put-ad-mini --tail=100 # CronJob 模式查看特定 Job 日志 kubectl logs -n ad-automation job/ ``` ### 检查配置 ```bash # 查看 ConfigMap kubectl get configmap ad-config -n ad-automation -o yaml # 查看 Secret(base64 编码) kubectl get secret ad-secrets -n ad-automation -o yaml # 解码 Secret 值 kubectl get secret ad-secrets -n ad-automation -o jsonpath='{.data.WHITELIST_ACCOUNTS}' | base64 -d ``` ### 访问输出文件 ```bash # 进入 Pod 查看输出 POD_NAME=$(kubectl get pods -n ad-automation -l app=auto-put-ad-mini -o jsonpath='{.items[0].metadata.name}') kubectl exec -it -n ad-automation $POD_NAME -- bash # 在 Pod 内查看输出 ls -lh /app/outputs/reports/ cat /app/outputs/reports/llm_decisions_*.csv | head # 或直接执行命令 kubectl exec -n ad-automation $POD_NAME -- ls -lh /app/outputs/reports/ ``` ## 回滚 ### Deployment 模式 ```bash # 查看历史版本 kubectl rollout history deployment/auto-put-ad-mini -n ad-automation # 回滚到上一个版本 kubectl rollout undo deployment/auto-put-ad-mini -n ad-automation # 回滚到指定版本 kubectl rollout undo deployment/auto-put-ad-mini --to-revision=2 -n ad-automation ``` ### CronJob 模式 ```bash # 暂停 CronJob kubectl patch cronjob auto-put-ad-mini -n ad-automation -p '{"spec":{"suspend":true}}' # 删除失败的 Job kubectl delete job -l app=auto-put-ad-mini -n ad-automation # 更新镜像 kubectl set image cronjob/auto-put-ad-mini \ decision-engine=your-registry/auto-put-ad-mini:v0.9.0 \ -n ad-automation # 恢复 CronJob kubectl patch cronjob auto-put-ad-mini -n ad-automation -p '{"spec":{"suspend":false}}' ``` ## 清理资源 ```bash # 删除所有资源 kubectl delete -f deployment.yaml kubectl delete -f cronjob.yaml kubectl delete -f pvc.yaml kubectl delete -f configmap.yaml kubectl delete -f secret.yaml kubectl delete -f network-policy.yaml # 或删除整个命名空间(慎用) kubectl delete namespace ad-automation ``` ## 安全建议 1. **Secret 管理**: - 不要将真实 Secret 提交到 Git - 使用 Kubernetes External Secrets 或 Sealed Secrets - 定期轮换敏感凭据 2. **网络隔离**: - 启用 NetworkPolicy - 仅允许必要的出站连接 - 限制 Pod 间通信 3. **资源限制**: - 合理设置 CPU 和内存 limits - 使用 LimitRange 和 ResourceQuota - 监控资源使用情况 4. **最小权限**: - 不使用 root 用户运行 - 禁用特权容器 - 使用 readOnlyRootFilesystem(如可行)