K8s排查故障常用方法
近日见闻
ICT 产品和解决方案总裁杨超斌出席即将在迪拜举行的移动宽带论坛!了解为什么移动网络正在拥抱 5.5G 技术的力量。– https://tinyurl.com/yckyyseu #HWMBBF #5GAdvanced
新的 Node.js v20(当前)现已推出 ,我看了官网为v20.7.0 – nodejs.org
Grafana 开源了一款 eBPF 采集器 Beyla ,eBPF 可以拿到服务收到的请求信息,比如QPS、延迟、成功率等,这些数据对于应用级监控至关重要,Grafana Beyla 就是为此而生的。 – SRETALK
9月14日 k8s更新了1.28.2版本,这更新速度杠杠的,你们还在用什么版本,停留在1.18-1.20的小伙伴举个手 –k8s
k8s故障排查常用方式
在Kubernetes中排查故障是一个常见但有时复杂的任务,因为它涉及到多个层次的组件和服务。以下是常用的方式和方法,可以帮排查Kubernetes中的故障:
查看Pod状态和事件:
- 使用
kubectl get pods
命令来获取Pod的状态。 - 使用
kubectl describe pod <pod-name>
命令查看Pod的详细信息,包括事件日志,以确定问题所在。
- 使用
查看Pod日志:
- 使用
kubectl logs <pod-name>
命令来查看Pod的日志,以查找应用程序级别的问题。
- 使用
查看节点状态:
- 使用
kubectl get nodes
命令来获取节点的状态。 - 使用
kubectl describe node <node-name>
命令查看节点的详细信息,包括节点事件和资源使用情况。
- 使用
查看服务和端口:
- 使用
kubectl get services
命令来获取服务的状态。 - 使用
kubectl describe service <service-name>
命令查看服务的详细信息,确保服务正常运行,并且端口映射正确。
- 使用
查看配置文件:
- 检查Pod和Deployment的YAML配置文件,确保它们正确配置。
- 查看ConfigMap和Secrets,确保配置信息正确。
监控和日志集成:
- 部署监控和日志集成工具,如Prometheus、Grafana、ELK等,以实时监控集群性能和应用程序日志,以便及时发现问题。
检查网络:
- 使用
kubectl get services
命令来验证服务的Cluster IP和端口是否正确。 - 使用
kubectl exec
命令进入容器内部,测试容器是否能够访问所需的服务和资源。
- 使用
排查资源限制:
- 检查Pod的资源请求和限制,确保资源分配合理。
- 使用
kubectl top pods
和kubectl top nodes
命令来查看资源使用情况。
监视事件:
- 使用
kubectl get events
命令来查看集群事件,以查找潜在的问题。 - 创建自定义的事件记录,以便更好地追踪问题。
- 使用
分布式应用程序调试:
- 对于分布式应用程序,使用分布式追踪工具如Jaeger或Zipkin来分析请求流程,查找瓶颈和问题。
日志分析:
- 使用工具如Fluentd、Filebeat或Logstash来收集、处理和分析应用程序日志。
Kubernetes组件排查:
- 如果问题似乎涉及Kubernetes控制平面组件(如kube-apiserver、kube-controller-manager、kube-scheduler等),检查它们的日志以获取更多信息。
应用程序监控和自动化报警:
- 设置应用程序级别的监控和自动化报警,以便在问题发生时及早获得通知并采取行动。
升级和维护:
- 确保Kubernetes集群和应用程序组件处于最新版本,因为某些故障可能已在较新的版本中修复。
查看存储:
- 使用kubectl get pv和kubectl get pvc命令检查持久卷(Persistent Volumes)和持久卷声明(Persistent Volume Claims)的状态。
- 查看容器是否正确地挂载了持久卷。
权限和RBAC:
- 检查Role-Based Access Control(RBAC)策略,确保Pod有足够的权限访问所需的资源。
- 使用kubectl auth can-i命令验证用户或服务帐户是否有特定操作的权限。
在排查故障时,重要的是有系统地方法来分析问题,从Pod级别到节点级别,甚至到集群级别。同时,建议使用自动化工具来监视和报警,在故障发生时快速采取措施,以减少影响。