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

319 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:
```bash
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 可能未启动或崩溃
**是否需要修复**:
- ✅ **需要修复**(业务应用)
- 检查步骤:
```bash
# 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 配置,确保只有一个容器或使用不同端口
```bash
# 查看 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:
```bash
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,可以删除:
```bash
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,可以删除:
```bash
kubectl delete deployment -n cert-manager cert-manager-webhook-dnspod
```
- 如果使用,检查日志:
```bash
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 容器日志:
```bash
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 - 建议修复(提升稳定性)
4. **cert-manager-webhook-dnspod** - 检查配置或删除
5. **prometheus-adapter** - 安装 Metrics Server 或删除
### P2 - 可选清理(不影响核心功能)
6. **external-secrets** - 删除或安装 CRD
### P3 - 暂不处理(已稳定)
7. **stock-backend** - 监控即可
8. **ingress-nginx-defaultbackend** - 非关键服务
---
## 🔧 快速修复命令
### 删除不需要的服务
```bash
# 如果不使用 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
```bash
# 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
```bash
# 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
```bash
# 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 级别的服务。