K8s排查故障常用方法

近日见闻

  1. ICT 产品和解决方案总裁杨超斌出席即将在迪拜举行的移动宽带论坛!了解为什么移动网络正在拥抱 5.5G 技术的力量。– https://tinyurl.com/yckyyseu #HWMBBF #5GAdvanced

  2. 新的 Node.js v20(当前)现已推出 ,我看了官网为v20.7.0 – nodejs.org

  3. Grafana 开源了一款 eBPF 采集器 Beyla ,eBPF 可以拿到服务收到的请求信息,比如QPS、延迟、成功率等,这些数据对于应用级监控至关重要,Grafana Beyla 就是为此而生的。 – SRETALK

  4. 9月14日 k8s更新了1.28.2版本,这更新速度杠杠的,你们还在用什么版本,停留在1.18-1.20的小伙伴举个手 –k8s

k8s故障排查常用方式

在Kubernetes中排查故障是一个常见但有时复杂的任务,因为它涉及到多个层次的组件和服务。以下是常用的方式和方法,可以帮排查Kubernetes中的故障:

  1. 查看Pod状态和事件

    • 使用 kubectl get pods 命令来获取Pod的状态。
    • 使用 kubectl describe pod <pod-name> 命令查看Pod的详细信息,包括事件日志,以确定问题所在。
  2. 查看Pod日志

    • 使用 kubectl logs <pod-name> 命令来查看Pod的日志,以查找应用程序级别的问题。
  3. 查看节点状态

    • 使用 kubectl get nodes 命令来获取节点的状态。
    • 使用 kubectl describe node <node-name> 命令查看节点的详细信息,包括节点事件和资源使用情况。
  4. 查看服务和端口

    • 使用 kubectl get services 命令来获取服务的状态。
    • 使用 kubectl describe service <service-name> 命令查看服务的详细信息,确保服务正常运行,并且端口映射正确。
  5. 查看配置文件

    • 检查Pod和Deployment的YAML配置文件,确保它们正确配置。
    • 查看ConfigMap和Secrets,确保配置信息正确。
  6. 监控和日志集成

    • 部署监控和日志集成工具,如Prometheus、Grafana、ELK等,以实时监控集群性能和应用程序日志,以便及时发现问题。
  7. 检查网络

    • 使用 kubectl get services 命令来验证服务的Cluster IP和端口是否正确。
    • 使用 kubectl exec 命令进入容器内部,测试容器是否能够访问所需的服务和资源。
  8. 排查资源限制

    • 检查Pod的资源请求和限制,确保资源分配合理。
    • 使用 kubectl top podskubectl top nodes 命令来查看资源使用情况。
  9. 监视事件

    • 使用 kubectl get events 命令来查看集群事件,以查找潜在的问题。
    • 创建自定义的事件记录,以便更好地追踪问题。
  10. 分布式应用程序调试

    • 对于分布式应用程序,使用分布式追踪工具如Jaeger或Zipkin来分析请求流程,查找瓶颈和问题。
  11. 日志分析

    • 使用工具如Fluentd、Filebeat或Logstash来收集、处理和分析应用程序日志。
  12. Kubernetes组件排查

    • 如果问题似乎涉及Kubernetes控制平面组件(如kube-apiserver、kube-controller-manager、kube-scheduler等),检查它们的日志以获取更多信息。
  13. 应用程序监控和自动化报警

    • 设置应用程序级别的监控和自动化报警,以便在问题发生时及早获得通知并采取行动。
  14. 升级和维护

    • 确保Kubernetes集群和应用程序组件处于最新版本,因为某些故障可能已在较新的版本中修复。
  15. 查看存储

    • 使用kubectl get pv和kubectl get pvc命令检查持久卷(Persistent Volumes)和持久卷声明(Persistent Volume Claims)的状态。
    • 查看容器是否正确地挂载了持久卷。
  16. 权限和RBAC

    • 检查Role-Based Access Control(RBAC)策略,确保Pod有足够的权限访问所需的资源。
    • 使用kubectl auth can-i命令验证用户或服务帐户是否有特定操作的权限。

在排查故障时,重要的是有系统地方法来分析问题,从Pod级别到节点级别,甚至到集群级别。同时,建议使用自动化工具来监视和报警,在故障发生时快速采取措施,以减少影响。