1. Kubernetes集群运维的核心挑战
在生产环境中管理Kubernetes集群就像驾驶一艘远洋货轮——看似平稳航行时一切尽在掌控,但一旦遭遇风暴(故障),需要快速定位问题源头并采取正确措施。我管理过多个超过200个节点的Kubernetes生产集群,深刻体会到三大核心挑战:
- 故障排查的复杂性:当Pod频繁重启时,可能是内存泄漏、节点资源不足、调度策略冲突或网络插件异常导致的
- 资源调度的精准性:如何在不影响现有服务的情况下,为关键业务预留资源,同时提高整体资源利用率
- 高可用配置的完备性:控制平面组件etcd、kube-apiserver的HA配置稍有疏忽就会导致整个集群瘫痪
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 故障排查实战手册
2.1 诊断工具链配置
工欲善其事必先利其器,这是我的标准工具包配置:
bash复制# 必备诊断工具
kubectl get events --sort-by='.lastTimestamp' -A # 按时间排序查看集群事件
kubectl get pods -o wide --show-labels # 显示Pod分布和标签信息
kubectl describe node <node-name> # 查看节点详细状态
# 高级诊断组合
kubectl top pod --containers --use-protocol-buffers # 实时容器资源使用
kubectl debug -it <pod-name> --image=nicolaka/netshoot # 网络诊断工具
2.2 典型故障处理流程
这是我总结的故障排查决策树:
-
服务不可用
- 检查Endpoint是否正常:
kubectl get endpoints <service-name> - 验证Service到Pod的连通性:
kubectl run test-$RANDOM --rm -it --image=alpine -- sh -c "wget -qO- <service-ip>:<port>"
- 检查Endpoint是否正常:
-
Pod异常状态
- CrashLoopBackoff:查看日志
kubectl logs --previous <pod-name> - Pending状态:
kubectl describe pod <pod-name>看事件详情 - ImagePullBackoff:检查镜像仓库认证
kubectl get secret
- CrashLoopBackoff:查看日志
关键技巧:使用
--previous参数查看崩溃容器的前一次运行日志,80%的崩溃问题可以通过这个命令发现
2.3 网络问题专项排查
网络问题是最棘手的,这个检查清单能帮你快速定位:
bash复制# 检查CNI插件状态
kubectl get ds -n kube-system | grep cni
# 验证DNS解析
kubectl run dns-test --image=busybox:1.28 --restart=Never --rm -it -- nslookup kubernetes.default
# 检查网络策略
kubectl get networkpolicy -A
3. 资源调度高级策略
3.1 精细化资源管理
这是我在金融级应用中的资源配置模板:
yaml复制resources:
requests:
memory: "4Gi"
cpu: "2"
ephemeral-storage: "10Gi"
limits:
memory: "6Gi"
cpu: "4"
ephemeral-storage: "20Gi"
关键参数说明:
- CPU:1个Kubernetes CPU = 1个vCPU/超线程
- 内存:必须明确单位(Gi/Mi)
- 临时存储:经常被忽视但可能导致Pod被驱逐
3.2 调度器调优实战
通过调度器配置实现智能调度:
yaml复制apiVersion: kubescheduler.config.k8s.io/v1beta3
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
pluginConfig:
-
