319 lines
8.8 KiB
Markdown
319 lines
8.8 KiB
Markdown
# 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 级别的服务。
|