Builder 648d1e1488 Add Grafana dashboards, HPA configs, and Prometheus alert rules for Shop Recycle monitoring 2 mēneši atpakaļ
..
templates 648d1e1488 Add Grafana dashboards, HPA configs, and Prometheus alert rules for Shop Recycle monitoring 2 mēneši atpakaļ
Chart.yaml 184746ccb8 gather all stuff 2 mēneši atpakaļ
README.md 184746ccb8 gather all stuff 2 mēneši atpakaļ
values-dev.yaml 184746ccb8 gather all stuff 2 mēneši atpakaļ
values-prod.yaml 184746ccb8 gather all stuff 2 mēneši atpakaļ
values-staging.yaml 184746ccb8 gather all stuff 2 mēneši atpakaļ
values-test.yaml 184746ccb8 gather all stuff 2 mēneši atpakaļ
values.yaml 648d1e1488 Add Grafana dashboards, HPA configs, and Prometheus alert rules for Shop Recycle monitoring 2 mēneši atpakaļ
values.yaml.bak 0f23321a8a fix: Fix Spring Cloud compatibility and Eureka client issues 2 mēneši atpakaļ

README.md

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环境

# 验证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环境

helm install shop-recycle . \
  -f values.yaml \
  -f values-test.yaml \
  --set image.tag=1.0.0-002-def456 \
  -n test \
  --create-namespace

部署到STAGING环境

helm install shop-recycle . \
  -f values.yaml \
  -f values-staging.yaml \
  --set image.tag=1.0.0-release \
  -n staging \
  --create-namespace

部署到PROD环境

helm install shop-recycle . \
  -f values.yaml \
  -f values-prod.yaml \
  --set image.tag=v1.0.0 \
  -n prod \
  --create-namespace

升级部署

# 更新镜像版本
helm upgrade shop-recycle . \
  -f values.yaml \
  -f values-${ENVIRONMENT}.yaml \
  --set image.tag=<new-tag>

# 使用原子更新(失败时自动回滚)
helm upgrade shop-recycle . \
  -f values.yaml \
  -f values-${ENVIRONMENT}.yaml \
  --set image.tag=<new-tag> \
  --atomic \
  --timeout 10m

回滚部署

# 查看发布历史
helm history shop-recycle -n dev

# 回滚到上一个版本
helm rollback shop-recycle -n dev

# 回滚到指定版本
helm rollback shop-recycle 3 -n dev

卸载部署

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

日志查询

# 查看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:

# 获取Ingress信息
kubectl get ingress -n dev

# 通过域名访问(需要配置DNS或hosts文件)
curl http://dev-gateway.local

ClusterIP访问

# 端口转发
kubectl port-forward svc/shop-recycle-gateway 8080:8080 -n dev

# 通过localhost访问
curl http://localhost:8080

故障排查

Pod未启动

# 检查Pod状态
kubectl describe pod <pod-name> -n dev

# 查看Pod日志
kubectl logs <pod-name> -n dev

# 检查事件
kubectl get events -n dev --sort-by='.lastTimestamp'

健康检查失败

# 进入Pod检查服务
kubectl exec -it <pod-name> -n dev -- sh

# 在Pod内测试健康端点
curl http://localhost:8080/health

镜像拉取失败

# 检查镜像拉取策略
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 <namespace> -l app=shop-recycle
  2. 检查Pod状态:kubectl get pods -n <namespace>
  3. 查看Helm值:helm get values shop-recycle -n <namespace>