Kubernetes教程FG082-Kubernetes故障排查与调试实战解析
目录大纲
Part01-基础概念与理论知识
1.1 故障排查基础
Kubernetes故障排查涉及多个方面,包括:
- Pod故障:Pod无法启动、运行中崩溃等
- 节点故障:节点不可用、资源不足等
- 网络故障:网络不通、服务访问失败等
- 存储故障:存储卷挂载失败、数据丢失等
- 控制平面故障:API服务器、etcd等组件故障
- 调度故障:Pod调度失败、调度延迟等
1.2 故障排查工具
- kubectl:Kubernetes命令行工具
- logs:查看Pod日志
- describe:查看资源详细信息
- exec:进入Pod执行命令
- port-forward:端口转发
- proxy:API服务器代理
- events:查看集群事件
- top:查看资源使用情况
1.3 故障排查流程
,风哥提示:。
- 识别问题:确定故障的现象和范围
- 收集信息:使用kubectl等工具收集相关信息
- 分析问题:根据收集的信息分析故障原因
- 验证假设:通过测试验证故障原因
- 解决问题:实施解决方案
- 验证解决方案:确认故障已解决
- 记录总结:记录故障原因和解决方案
Part02-生产环境规划与建议
2.1 故障预防
在生产环境中,预防故障比排查故障更重要,风哥提示:。
- 监控系统:部署Prometheus和Grafana监控集群
- 告警系统:配置合理的告警规则
- 备份策略:定期备份etcd和应用数据
- 高可用设计:部署多副本应用和控制平面
- 资源管理:合理设置资源请求和限制
- 网络策略:配置安全的网络策略
- 版本管理:定期升级集群和应用
2.2 故障排查准备
为了快速排查故障,需要做好以下准备。。
- 文档化:记录集群配置和应用部署信息
- 工具准备:安装必要的故障排查工具
- 知识储备:了解Kubernetes架构和常见故障
- 应急方案:制定故障应急处理流程
- 演练:定期进行故障演练
2.3 常见故障类型
- 配置错误:YAML配置文件错误
- 资源不足:CPU、内存、存储等资源不足
- 网络问题:网络不通、DNS解析失败等
- 存储问题:存储卷挂载失败、权限问题等
- 镜像问题:镜像拉取失败、镜像损坏等
- 依赖问题:应用依赖服务不可用
- 安全问题:权限不足、安全策略限制等
,学习交流加群风哥微信: itpux-com。
Part03-生产环境项目实施方案
3.1 Pod故障排查
3.1.1 查看Pod状态
# 查看Pod状态 kubectl get pods # 查看Pod详细信息 kubectl describe pod <pod-name> # 查看Pod日志 kubectl logs <pod-name> # 查看Pod容器日志 kubectl logs <pod-name> -c <container-name> # 进入Pod执行命令 kubectl exec -it <pod-name> -- /bin/bash
3.2 节点故障排查
3.2.1 查看节点状态
# 查看节点状态 kubectl get nodes # 查看节点详细信息 kubectl describe node <node-name> # 查看节点资源使用情况 kubectl top node <node-name> # 查看节点上的Pod kubectl get pods -o wide --field-selector spec.nodeName=<node-name>
3.3 网络故障排查
3.3.1 网络连通性测试
# 测试Pod间网络连通性 kubectl exec -it <pod-name> -- ping <other-pod-ip> # 测试Pod到服务的连通性 kubectl exec -it <pod-name> -- curl <service-name>.<namespace>.svc.cluster.local # 测试节点间网络连通性 ssh <node-name> ping <other-node-ip> # 查看网络策略 kubectl get networkpolicies
3.4 存储故障排查
3.4.1 存储卷检查
,学习交流加群风哥QQ113257174。
# 查看PersistentVolume kubectl get pv # 查看PersistentVolumeClaim kubectl get pvc # 查看存储类 kubectl get storageclasses # 查看Pod存储卷挂载情况 kubectl describe pod <pod-name> | grep -A 10 Volumes
Part04-生产案例与实战讲解
4.1 实战案例:Pod无法启动
4.1.1 排查步骤
# 查看Pod状态 kubectl get pods # 查看Pod详细信息 kubectl describe pod fgedu-app-6548b8c8d9-7k2z7 # 查看Pod日志 kubectl logs fgedu-app-6548b8c8d9-7k2z7 # 查看事件 kubectl get events | grep fgedu-app
执行 →
NAME READY STATUS RESTARTS AGE fgedu-app-6548b8c8d9-7k2z7 0/1 ImagePullBackOff 0 5m Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 5m default-scheduler Successfully assigned default/fgedu-app-6548b8c8d9-7k2z7 to node1 Normal Pulling 5m kubelet Pulling image "nginx:latest1" Warning Failed 5m kubelet Failed to pull image "nginx:latest1": rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/library/nginx:latest1": failed to resolve reference "docker.io/library/nginx:latest1": pull access denied, repository does not exist or may require authorization Warning Failed 5m kubelet Error: ErrImagePull Normal BackOff 5m kubelet Back-off pulling image "nginx:latest1" Warning Failed 5m kubelet Error: ImagePullBackOff
4.1.2 解决方案
# 修正镜像名称 kubectl edit deployment fgedu-app # 查看更新后的Pod状态 kubectl get pods
,更多视频教程www.fgedu.net.cn。
执行 →
deployment.apps/fgedu-app edited NAME READY STATUS RESTARTS AGE fgedu-app-6548b8c8d9-7k2z7 1/1 Running 0 10m
4.2 实战案例:服务访问失败
4.2.1 排查步骤
# 查看服务状态 kubectl get services # 查看服务详细信息 kubectl describe service fgedu-service # 查看Endpoints kubectl get endpoints fgedu-service # 测试服务访问 kubectl run -it --rm --image=busybox:1.28 test-pod -- curl fgedu-service.default.svc.cluster.local:80
执行 →
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE fgedu-service ClusterIP 10.96.123.45 <none> 80/TCP 5m Name: fgedu-service Namespace: default Labels: <none> Annotations: <none> Selector: app=fgedu-app Type: ClusterIP IP: 10.96.123.45 Port: <unset> 80/TCP TargetPort: 8080/TCP Endpoints: <none> Session Affinity: None Events: <none> NAME ENDPOINTS AGE fgedu-service <none> 5m Error: Failed to connect to fgedu-service.default.svc.cluster.local port 80: Connection refused
4.2.2 解决方案
# 查看Pod标签 kubectl get pods --show-labels # 查看Deployment配置 kubectl get deployment fgedu-app -o yaml # 修正服务配置 kubectl edit service fgedu-service # 查看更新后的Endpoints,更多学习教程公众号风哥教程itpux_com。 kubectl get endpoints fgedu-service
执行 →
NAME READY STATUS RESTARTS AGE LABELS fgedu-app-6548b8c8d9-7k2z7 1/1 Running 0 15m app=fgedu-app,pod-template-hash=6548b8c8d9 # 发现Deployment的容器端口是80,而服务的TargetPort是8080 # 修正服务的TargetPort为80 NAME ENDPOINTS AGE fgedu-service 10.244.1.2:80,10.244.2.3:80 10m
4.3 实战案例:节点资源不足
4.3.1 排查步骤
# 查看节点状态 kubectl get nodes # 查看节点详细信息 kubectl describe node node1 # 查看节点资源使用情况 kubectl top node node1 # 查看节点上的Pod kubectl get pods -o wide --field-selector spec.nodeName=node1
执行 →
NAME STATUS ROLES AGE VERSION node1 Ready,SchedulingDisabled <none> 10d v1.27.0 node2 Ready <none> 10d v1.27.0 node3 Ready <none> 10d v1.27.0 # 节点node1的资源使用情况: # CPU Requests: 950m (95%) # CPU Limits: 2000m (200%) # Memory Requests: 1.5Gi (75%) # Memory Limits: 3Gi (150%) NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES fgedu-app-6548b8c8d9-7k2z7 1/1 Running 0 20m 10.244.1.2 node1 <none> <none> fgedu-db-5678b9c8d9-8x3y7 1/1 Running 0 15m 10.244.1.3 node1 <none> <none> fgedu-cache-7890b1c2d3-9z4w8 1/1 Running 0 10m 10.244.1.4 node1 <none> <none>
4.3.2 解决方案
# 扩容集群,添加新节点 # 或调整Pod的资源配置 kubectl edit deployment fgedu-cache # 查看更新后的Pod。 kubectl get pods -o wide
执行 →
deployment.apps/fgedu-cache edited,from K8S+DB视频:www.itpux.com。 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES fgedu-app-6548b8c8d9-7k2z7 1/1 Running 0 25m 10.244.1.2 node1 <none> <none> fgedu-db-5678b9c8d9-8x3y7 1/1 Running 0 20m 10.244.1.3 node1 <none> <none> fgedu-cache-7890b1c2d3-5a6b7 1/1 Running 0 5m 10.244.2.4 node2 <none> <none>
Part05-风哥经验总结与分享
5.1 故障排查最佳实践
- 保持冷静:遇到故障时保持冷静,有条理地进行排查
- 收集信息:全面收集相关信息,包括日志、事件、配置等
- 分析问题:根据收集的信息分析故障原因,不要盲目猜测
- 验证假设:通过测试验证故障原因,确保解决方案正确
- 记录过程:记录故障排查过程和解决方案,便于后续参考
- 持续学习:不断学习Kubernetes的新特性和故障排查技巧
- 预防为主:加强监控和预防措施,减少故障发生
- 团队协作:与团队成员协作排查故障,分享经验
5.2 常见故障解决方案
- Pod无法启动:检查镜像名称、配置文件、资源限制等
- 服务访问失败:检查服务配置、Endpoints、网络策略等
- 节点资源不足:扩容节点、调整资源配置、使用水平扩展
- 网络故障:检查网络插件、网络策略、DNS配置等
- 存储故障:检查存储卷配置、权限、存储类等
- 控制平面故障:检查API服务器、etcd、调度器等组件
5.3 风哥提示
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
