8.8 KiB
8.8 KiB
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 - 立即修复(影响业务)
- ljwx-project/pcc-backend - 数据库连接失败
- ljwx-project/pcc-frontend - 端口冲突
- ljwx-stock/claude-stock-backend - backend 容器频繁崩溃
P1 - 建议修复(提升稳定性)
- cert-manager-webhook-dnspod - 检查配置或删除
- prometheus-adapter - 安装 Metrics Server 或删除
P2 - 可选清理(不影响核心功能)
- external-secrets - 删除或安装 CRD
P3 - 暂不处理(已稳定)
- stock-backend - 监控即可
- 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 级别的服务。