Appearance
06. 排障与清理
这一页按“现象 → 原因 → 处理”组织,都是这套环境实际踩过的坑。
先按这个顺序排查
不要一上来改组件配置,按层往下走:
text
1. 节点:Ready?磁盘满?时间同步?
2. Pod:Pending / ImagePull / CrashLoop / OOM?
3. 网络:Service DNS?跨节点?端口?
4. 依赖:PG/S3/Kafka 通不通?
5. 应用:配置、权限、版本
6. 数据:表/分区/文件是否存在大多数“组件坏了”其实是上一层没准备好。
1. 节点与 K8s
| 现象 | 原因 | 处理 |
|---|---|---|
ImagePullBackOff | tag 不存在 / imagePullPolicy: Always / 镜像站不通 | kubectl describe pod 看事件;换固定 tag;确认 certs.d |
| node2/3 join 超时 | 安全组/内网不通 | 从 node1 nc -vz $NODE2 6443 |
| 节点 NotReady | CNI 没装好 | kubectl -n kube-system get pods;看 calico |
| Pod 跨节点不通 | Pod CIDR 与 Calico IPPool 不一致 | 确认 kubeadm --pod-network-cidr=10.244.0.0/16 |
| 磁盘压力驱逐 | 系统盘被镜像/日志写满 | 数据盘挂 /data;清理 /var/lib/containerd 旧目录 |
1.1 containerd 镜像配置不生效
检查:
bash
grep -n 'config_path' /etc/containerd/config.toml必须是:
toml
config_path = '/etc/containerd/certs.d'不能是冒号分隔的多个目录,也不能同时配 registry.mirrors。
2. 存储
| 现象 | 原因 | 处理 |
|---|---|---|
| PVC Pending | local-path 没装/没设默认 | kubectl get sc |
| S3 连接超时 | 用了公网 IP / path-style 没开 | 用集群内 Service,开 path-style-access |
| Iceberg 建表失败 | JDBC catalog 连不上 PG | 进 Pod psql 测 5432 |
No FileSystem for scheme s3 | 缺 S3A 实现 | 用 S3FileIO,或加 hadoop-aws |
3. Kafka / Flink
| 现象 | 原因 | 处理 |
|---|---|---|
| broker 起不来 | advertised.listeners 用了 0.0.0.0 | 用 Pod IP |
| controller quorum 失败 | CLUSTER_ID 不一致 | 三个 broker 用同一个 |
| topic ISR 不足 | 副本数大于 broker | topic --replication-factor 3,broker 必须 3 |
Flink TM 卡 DEPLOYING | blob 端口随机 | 固定 blob.server.port: 6124 并暴露 Service |
| CDC 不消费增量 | 没开 checkpoint | SQL 加 execution.checkpointing.interval |
| CDC 报 server-id 冲突 | 多个作业共用 server-id | 每个作业用不同区间 |
| Kafka sink 不支持 update/delete | 用了 kafka connector | 改 upsert-kafka + 主键 |
4. Doris
| 现象 | 原因 | 处理 |
|---|---|---|
BE Exit 0 / 不 Alive | CPU 无 AVX2 | `lscpu |
| BE 启动即退出 | 容器 nofile 太小 | containerd 配 LimitNOFILE=1048576 |
| FE 连接拒绝 | FE 还没 ready | kubectl logs doris-fe-0 |
| Stream Load 失败 | CSV 列数/分隔符不对 | 检查 column_separator、列顺序 |
| JDBC 写 1M 很慢 | 逐批 insert | 改 Stream Load |
5. Spark / Iceberg
| 现象 | 原因 | 处理 |
|---|---|---|
| executor exit 134 | Iceberg 向量化 reader 崩 | spark.sql.iceberg.vectorization.enabled=false |
| driver 找不到主类 | --class 或 jar 路径不对 | 检查 jar 内类名 |
| K8s driver Pending | ServiceAccount/RBAC 不足 | 绑定 edit;检查资源 |
| 写 S3 超时 | endpoint/凭证错 | 用集群内 S3 Service |
| SHS 看不到应用 | eventLog 目录不一致 | 提交和 SHS 用同一个 s3a:// 目录 |
| 事件日志写不进去 | S3A 配置缺失 | 加 fs.s3a.*,确认 bucket 存在 |
6. DolphinScheduler
| 现象 | 原因 | 处理 |
|---|---|---|
| master 起不来 | 元数据库没初始化 | 先跑 db-init,再重启 master/api |
| API 建工作流 10001 | 参数结构不对 | 用 UI 建;或直接写 DS 表(仅测试) |
| K8S 任务 NPE | t_ds_cluster 没注册 | 配 {"k8s":"<kubeconfig>"} |
| K8S 任务 Job 名非法 | 任务名有下划线 | 改成 RFC1123 |
| OOMKilled | minMemorySpace 单位是 Mi | 8192 才是 8Gi |
| 任务成功但 Flink 没作业 | SQL client 只负责提交 | 去 Flink UI 确认作业状态 |
7. 清理
测试环境用完直接销毁,不需要保留数据。手动清理顺序:
bash
# 1. 停 DS 工作流(如果还在跑)
# 2. 删 Helm release
helm -n harbor uninstall harbor
helm -n ds-cluster uninstall dolphinscheduler
helm -n doris uninstall doris-operator
helm -n storage uninstall seaweedfs
helm -n monitoring uninstall kube-prometheus-stack
# 3. 删 namespace(会删 PVC,确认不要数据)
kubectl delete namespace data storage harbor doris ds-cluster openmetadata monitoring --ignore-not-found
# 4. 云控制台释放三台实例删 namespace 会删 local-path 的 PV 数据,先确认没有要保留的内容。
8. 复用检查
重搭后按顺序验证:
bash
kubectl get nodes
kubectl get pods -A | grep -v Running
kubectl -n data get pvc
kubectl -n doris exec doris-fe-0 -- mysql -h127.0.0.1 -P9030 -uroot -e 'SHOW BACKENDS;'
kubectl -n ds-cluster get pods
curl -sS -o /dev/null -w '%{http_code}\n' http://$NODE1:30082/全部通过,再做端到端。