# Shop Recycle Helm Chart 完整的Spring Cloud日志测试演示系统的Kubernetes Helm部署模板。 ## 功能 - ✅ **完全的Kubernetes部署** - 使用Helm进行声明式管理 - ✅ **多环境支持** - dev, test, staging, prod - ✅ **自动扩展** - 根据环境自动配置副本数和资源 - ✅ **高可用** - 包含Pod反亲和性和多副本部署 - ✅ **安全优先** - RBAC、NetworkPolicy、ServiceAccount - ✅ **可观测性** - 健康检查、Prometheus指标、日志聚合 ## 目录结构 ``` shop-recycle/ ├── Chart.yaml # Chart metadata ├── values.yaml # 默认全局配置 ├── values-dev.yaml # DEV环境配置 ├── values-test.yaml # TEST环境配置 ├── values-staging.yaml # STAGING环境配置 ├── values-prod.yaml # PROD环境配置 └── templates/ ├── _helpers.tpl # 模板辅助函数 ├── NOTES.txt # 部署后提示信息 ├── deployment-gateway.yaml # Gateway Deployment ├── deployment-order-service.yaml # OrderService Deployment ├── deployment-payment-service.yaml # PaymentService Deployment ├── service.yaml # 所有Services ├── configmap-gateway.yaml # Gateway ConfigMap ├── ingress.yaml # Ingress ├── rbac.yaml # ServiceAccount & ClusterRole └── networkpolicy.yaml # NetworkPolicy(可选) ``` ## 快速开始 ### 前置条件 - Kubernetes 1.19+ - Helm 3.0+ - kubectl配置指向目标集群 ### 部署到DEV环境 ```bash # 验证chart helm lint shop-recycle # 检查渲染后的模板 helm template shop-recycle . -f values-dev.yaml # 部署 helm install shop-recycle . \ -f values.yaml \ -f values-dev.yaml \ --set image.tag=1.0.0-001-abc123 \ -n dev \ --create-namespace # 查看部署状态 kubectl get pods -n dev ``` ### 部署到TEST环境 ```bash helm install shop-recycle . \ -f values.yaml \ -f values-test.yaml \ --set image.tag=1.0.0-002-def456 \ -n test \ --create-namespace ``` ### 部署到STAGING环境 ```bash helm install shop-recycle . \ -f values.yaml \ -f values-staging.yaml \ --set image.tag=1.0.0-release \ -n staging \ --create-namespace ``` ### 部署到PROD环境 ```bash helm install shop-recycle . \ -f values.yaml \ -f values-prod.yaml \ --set image.tag=v1.0.0 \ -n prod \ --create-namespace ``` ## 升级部署 ```bash # 更新镜像版本 helm upgrade shop-recycle . \ -f values.yaml \ -f values-${ENVIRONMENT}.yaml \ --set image.tag= # 使用原子更新(失败时自动回滚) helm upgrade shop-recycle . \ -f values.yaml \ -f values-${ENVIRONMENT}.yaml \ --set image.tag= \ --atomic \ --timeout 10m ``` ## 回滚部署 ```bash # 查看发布历史 helm history shop-recycle -n dev # 回滚到上一个版本 helm rollback shop-recycle -n dev # 回滚到指定版本 helm rollback shop-recycle 3 -n dev ``` ## 卸载部署 ```bash helm uninstall shop-recycle -n dev # 删除命名空间(可选) kubectl delete namespace dev ``` ## 配置说明 ### 全局配置 (values.yaml) | 参数 | 说明 | 默认值 | |------|------|--------| | `environment` | 环境标识 | dev | | `image.registry` | Docker仓库地址 | docker.io | | `image.namespace` | Docker命名空间 | shop-recycle | | `image.tag` | 镜像标签 | 由Pipeline注入 | | `replicaCount` | 副本数 | 2 | ### Gateway配置 | 参数 | 说明 | 默认值 | |------|------|--------| | `gateway.enabled` | 启用Gateway | true | | `gateway.replicaCount` | Gateway副本数 | 2 | | `gateway.javaOpts` | JVM参数 | -Xms256m -Xmx512m | | `gateway.resources` | 资源限制 | requests: 256Mi/250m, limits: 512Mi/500m | ### OrderService配置 | 参数 | 说明 | 默认值 | |------|------|--------| | `orderService.enabled` | 启用OrderService | true | | `orderService.replicaCount` | 副本数 | 2 | | `orderService.javaOpts` | JVM参数 | -Xms256m -Xmx512m | ### PaymentService配置 | 参数 | 说明 | 默认值 | |------|------|--------| | `paymentService.enabled` | 启用PaymentService | true | | `paymentService.replicaCount` | 副本数 | 2 | | `paymentService.javaOpts` | JVM参数 | -Xms256m -Xmx512m | ## 环境特定配置 ### DEV环境 - 副本数:1(节省资源) - 资源:最小化(128Mi内存,100m CPU) - 日志级别:DEBUG - Ingress:启用,使用自签名证书 ### TEST环境 - 副本数:2(基本高可用) - 资源:标准(256Mi内存,250m CPU) - 日志级别:INFO - Ingress:启用,使用自签名证书 ### STAGING环境 - 副本数:3(生产级别) - 资源:增加(512Mi内存,500m CPU) - 日志级别:WARN - Ingress:启用,使用Let's Encrypt - NetworkPolicy:启用 ### PROD环境 - 副本数:3(高可用) - 资源:最大化(1Gi内存,1000m CPU) - 日志级别:WARN - Ingress:启用,双域名支持 - NetworkPolicy:启用 - RBAC:启用 - 节点亲和性:使用专用节点池 - 污点容限:仅允许在生产节点运行 ## 监控与日志 ### 健康检查 每个服务都配置了: - **livenessProbe** - 检测容器是否仍在运行 - **readinessProbe** - 检测容器是否准备好接收流量 ### Prometheus指标 如果启用监控,Prometheus将抓取: ``` curl http://localhost:8080/actuator/prometheus ``` ### 日志查询 ```bash # 查看Gateway日志 kubectl logs -n dev -l app=shop-recycle-gateway --tail=100 -f # 查看OrderService日志 kubectl logs -n dev -l app=shop-recycle-order-service --tail=100 -f # 跨所有Pod查看日志 kubectl logs -n dev -l app.kubernetes.io/instance=shop-recycle --all-containers=true -f ``` ## 网络配置 ### Ingress访问 如果启用了Ingress: ```bash # 获取Ingress信息 kubectl get ingress -n dev # 通过域名访问(需要配置DNS或hosts文件) curl http://dev-gateway.local ``` ### ClusterIP访问 ```bash # 端口转发 kubectl port-forward svc/shop-recycle-gateway 8080:8080 -n dev # 通过localhost访问 curl http://localhost:8080 ``` ## 故障排查 ### Pod未启动 ```bash # 检查Pod状态 kubectl describe pod -n dev # 查看Pod日志 kubectl logs -n dev # 检查事件 kubectl get events -n dev --sort-by='.lastTimestamp' ``` ### 健康检查失败 ```bash # 进入Pod检查服务 kubectl exec -it -n dev -- sh # 在Pod内测试健康端点 curl http://localhost:8080/health ``` ### 镜像拉取失败 ```bash # 检查镜像拉取策略 kubectl get deployment shop-recycle-gateway -n dev -o yaml | grep image # 手动拉取镜像测试 docker pull docker.io/shop-recycle/gateway:tag ``` ## Jenkins Pipeline集成 Jenkins Pipeline会自动: 1. 编译项目 2. 构建Docker镜像 3. 推送到镜像仓库 4. 验证Helm Chart 5. 部署到Kubernetes 参考 `/Jenkinsfile` 了解详情。 ## 最佳实践 1. **版本管理** - 使用语义化版本号(1.0.0) 2. **资源限制** - 始终设置requests和limits 3. **健康检查** - 配置合理的超时和失败阈值 4. **日志级别** - 生产环境使用WARN,开发环境使用DEBUG 5. **副本数** - 生产环境最少2个副本,建议3个以上 6. **网络策略** - 生产环境启用NetworkPolicy 7. **备份** - 定期备份Helm releases ## 支持 遇到问题? 1. 查看日志:`kubectl logs -n -l app=shop-recycle` 2. 检查Pod状态:`kubectl get pods -n ` 3. 查看Helm值:`helm get values shop-recycle -n `