Files
ljwx-k8s/CLUSTER-ISSUES-SUMMARY.md
2026-02-20 22:50:45 +08:00

8.8 KiB
Raw Permalink Blame History

Kubernetes 集群问题总结报告

生成时间: 2026-01-04 集群: OrbStack Kubernetes v1.33.5


✅ 已完成修复

1. 删除重复部署 ✅

  • 问题: infra namespace 中存在重复的 loki 和 tempo StatefulSet
  • 操作: 已删除 statefulset/loki, statefulset/tempo, service/loki, service/tempo
  • 验证:
    • ✅ logging/loki-0 正常运行(17天)
    • ✅ tracing/tempo-0 正常运行(17天)
    • ✅ infra namespace 中已无 loki/tempo 资源

⚠️ CrashLoopBackOff 问题分析(4个应用)

1. external-secrets-system/external-secrets

状态: CrashLoopBackOff 重启次数: 820+ 问题根因: CRD 缺失

错误信息: "no matches for kind \"ExternalSecret\" in version \"external-secrets.io/v1beta1\""

原因分析:

  • External Secrets Operator 的 CRD 未正确安装
  • 可能在安装时缺少 CRD 部署步骤

是否需要修复:

  • ❌ 不建议修复(如果不使用 External Secrets)
  • ✅ 建议删除:kubectl delete deployment -n external-secrets-system external-secrets
  • 或重新安装 CRD:
    kubectl apply -f https://raw.githubusercontent.com/external-secrets/external-secrets/main/deploy/crds/bundle.yaml
    

2. ljwx-project/pcc-project-control-center-backend

状态: CrashLoopBackOff 重启次数: 1956+ 问题根因: 数据库连接失败

错误信息: java.net.ConnectException: Connection refused
原因: Flyway 数据库迁移失败,无法连接到 PostgreSQL

原因分析:

  • PostgreSQL 服务不可用或网络不通
  • 数据库连接配置错误(host/port/credentials)
  • 数据库 Pod 可能未启动或崩溃

是否需要修复:

  • ✅ 需要修复(业务应用)
  • 检查步骤:
    # 1. 检查 PostgreSQL Pod 状态
    kubectl get pods -n ljwx-project -l app.kubernetes.io/name=postgresql
    
    # 2. 检查数据库连接配置
    kubectl get deployment -n ljwx-project pcc-project-control-center-backend -o yaml | grep -A 5 DATABASE
    
    # 3. 测试数据库连接
    kubectl exec -n ljwx-project pcc-postgresql-0 -- psql -U postgres -c "SELECT 1"
    

3. ljwx-project/pcc-project-control-center-frontend

状态: CrashLoopBackOff 重启次数: 1963+ 问题根因: 端口冲突

错误信息: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use)

原因分析:

  • Pod 中有多个容器试图绑定 80 端口
  • 查看 Pod 配置发现有 2 个容器:frontend 和 pcc-project-control-center-frontend
  • 两个容器可能都配置了监听 80 端口

是否需要修复:

  • ✅ 需要修复(业务应用)
  • 解决方案:修改 Deployment 配置,确保只有一个容器或使用不同端口
    # 查看 Deployment 配置
    kubectl get deployment -n ljwx-project pcc-project-control-center-frontend -o yaml
    
    # 可能需要修改其中一个容器的端口配置
    

4. observability/prometheus-adapter

状态: CrashLoopBackOff 重启次数: 141+ 问题根因: 性能/超时问题

错误信息:
- "http: Handler timeout"
- "unable to fetch CPU metrics for pod"

原因分析:

  • Prometheus Adapter 在获取 Pod 指标时超时
  • 可能是 Metrics Server 未安装或配置问题
  • 也可能是 Prometheus 数据源配置错误

是否需要修复:

  • ⚠️ 可选修复(如果使用 HPA 自定义指标)
  • 建议先安装 Metrics Server:
    kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    kubectl patch deployment metrics-server -n kube-system --type='json' \
      -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-insecure-tls"}]'
    
  • 如果不使用自定义 HPA,可以删除:
    kubectl delete deployment -n observability prometheus-adapter
    

📊 高重启次数 Pods(8个)

P0 - 需要关注

1. cert-manager-webhook-dnspod (2526 次重启)

命名空间: cert-manager 年龄: 14天 最近重启: 4分钟前 状态: Running

分析:

  • 平均每小时重启约 7.5 次
  • 虽然当前运行,但重启频率极高
  • 可能是 DNSPod webhook 配置问题或 API 限流

是否需要修复:

  • ⚠️ 建议检查(如果使用 DNSPod DNS 验证)
  • 如果不使用 DNSPod,可以删除:
    kubectl delete deployment -n cert-manager cert-manager-webhook-dnspod
    
  • 如果使用,检查日志:
    kubectl logs -n cert-manager deployment/cert-manager-webhook-dnspod --tail=50
    

2. claude-stock-backend (2162 次重启)

命名空间: ljwx-stock 年龄: 10天 最近重启: 6分钟前 状态: Running (1/2 容器就绪)

分析:

  • 平均每小时重启约 9 次
  • Pod 中有 2 个容器:backend (2162 次重启), frontend (2 次重启)
  • backend 容器不断崩溃,但 frontend 容器正常

是否需要修复:

  • ✅ 需要修复(业务应用)
  • 检查 backend 容器日志:
    kubectl logs -n ljwx-stock claude-stock-backend-7c9567ff69-ptvc5 -c backend --tail=50
    
  • 可能问题:
    • 数据库连接失败
    • 健康检查配置过于严格
    • 应用本身有 bug

P1 - 已稳定,但有历史重启

3-4. stock-backend (1154, 1194 次重启)

命名空间: stock 年龄: 17天 最近重启: 14小时前 状态: Running

分析:

  • 平均每小时重启约 2.8 次(前期)
  • 但最近 14 小时未重启,说明已经稳定
  • 可能是早期配置问题或数据库迁移导致

是否需要修复:

  • ❌ 暂不需要(已稳定运行 14 小时)
  • 建议监控,如再次频繁重启则排查

5. external-secrets (821 次重启)

已在 CrashLoopBackOff 部分分析


6. ingress-nginx-defaultbackend (223 次重启)

命名空间: infra 年龄: 17天 最近重启: 32分钟前 状态: Running

分析:

  • 平均每小时重启约 0.5 次
  • defaultbackend 是 fallback 服务,影响不大
  • 可能是健康检查或资源限制导致

是否需要修复:

  • ❌ 不需要(非关键服务,影响小)

7-8. pcc-project-control-center-frontend (1964 次重启)

已在 CrashLoopBackOff 部分分析


📋 修复优先级建议

P0 - 立即修复(影响业务)

  1. ljwx-project/pcc-backend - 数据库连接失败
  2. ljwx-project/pcc-frontend - 端口冲突
  3. ljwx-stock/claude-stock-backend - backend 容器频繁崩溃

P1 - 建议修复(提升稳定性)

  1. cert-manager-webhook-dnspod - 检查配置或删除
  2. prometheus-adapter - 安装 Metrics Server 或删除

P2 - 可选清理(不影响核心功能)

  1. external-secrets - 删除或安装 CRD

P3 - 暂不处理(已稳定)

  1. stock-backend - 监控即可
  2. ingress-nginx-defaultbackend - 非关键服务

🔧 快速修复命令

删除不需要的服务

# 如果不使用 External Secrets
kubectl delete namespace external-secrets-system

# 如果不使用 DNSPod DNS 验证
kubectl delete deployment -n cert-manager cert-manager-webhook-dnspod

# 如果不使用自定义 HPA
kubectl delete deployment -n observability prometheus-adapter

修复 pcc-backend

# 1. 检查 PostgreSQL 状态
kubectl get pods -n ljwx-project -l app.kubernetes.io/name=postgresql

# 2. 查看 backend 日志
kubectl logs -n ljwx-project pcc-project-control-center-backend-6df5ff97d6-97pxz -c pcc-project-control-center-backend --tail=50

# 3. 检查数据库连接配置
kubectl get secret -n ljwx-project | grep postgres
kubectl get configmap -n ljwx-project | grep postgres

修复 pcc-frontend

# 1. 查看 Deployment 配置
kubectl get deployment -n ljwx-project pcc-project-control-center-frontend -o yaml > /tmp/pcc-frontend.yaml

# 2. 编辑配置,修改容器端口冲突
# 查找两个容器的端口配置,确保不重复

# 3. 应用修改
kubectl apply -f /tmp/pcc-frontend.yaml

修复 claude-stock-backend

# 1. 查看 backend 容器日志
kubectl logs -n ljwx-stock claude-stock-backend-7c9567ff69-ptvc5 -c backend --tail=100

# 2. 检查健康检查配置
kubectl get deployment -n ljwx-stock claude-stock-backend -o yaml | grep -A 10 livenessProbe

# 3. 可能需要调整健康检查参数或修复应用代码

📊 总结

当前集群健康状态

  • ✅ 已修复: 重复部署问题(infra/loki, infra/tempo)
  • ⚠️ 需要修复: 3 个业务应用崩溃(ljwx-project, ljwx-stock)
  • ℹ️ 可选清理: 2-3 个非关键服务可删除或修复
  • ✅ 稳定运行: 大部分服务正常

修复后预期效果

  • 业务应用恢复正常
  • 减少不必要的资源消耗
  • 降低告警噪音
  • 提升集群整体稳定性

建议: 优先修复 P0 级别的业务应用,然后根据实际需求决定是否修复或删除 P1/P2 级别的服务。