定位常用命令.md 4.0 KB

title: 服务可用性定位问题常用命令 author: Gamehu tags:

  • LMT categories:
  • 工作 date: 2024-06-15 20:07:00 ---
    离职系列 第五篇
    离职系列,想想这几年在公司的成长,在这做个记录。上一篇{% post_link 现场故障定位 %},主要讲的方法论,这篇主要对服务可用性的几个场景总结下相应的命令。

以下命令主要针对现场经常出现的安装失败、升级失败、补丁失败、服务不断重启、服务不可用几个场景:

  1. 安装失败,通常就是现场环境问题,比如服务器的磁盘性能不达标、网络通信问题、服务器DNS配置错误、集群IP段不可用
  2. 升级失败,通常和服务器的资源紧张有关(内存、磁盘、CPU等)
  3. 服务不断重启,通常是基础组件问题如redis异常、应用pod自身程序的bug如OOM、k8s组件问题如etcd重启
  4. 服务不可用,通常就是集群出了问题,比如磁盘满了导致镜像丢失

命令

  1. 确认环境信息

    • 环境信息

      # 操作系统版本
      cat /etc/redhat-release  # CentOS版本
      cat /etc/openEuler-release  # 欧拉版本
      uname -r  # 内核版本
      cat /proc/version  # 内核编译信息
      hostnamectl  # 查看完整的系统信息
      
      # 系统基础信息
      df -h               # 磁盘空间
      free -h             # 内存使用
      top                 # CPU和进程状态
      netstat -ant        # 网络连接
      uptime              # 系统负载
      iostat -x 1 10      # 磁盘状态
      
      # 进程分析
      ps -ef | grep 进程名
      pstree -p 进程ID
      lsof -p 进程ID
      
      # 分区及挂载
      lsblk  # 查看块设备
      df -Th  # 查看文件系统类型和空间
      mount | grep -E "^/dev"  # 查看挂载参数
      
      # 磁盘空间
      du -sh /* | sort -hr  # 大文件目录排序
      # 时间同步状态
      chronyc sources -v
      
    • K8s集群状态

      # K8s集群状态
      systemctl status kubelet  # kubelet是否正常
      systemctl status docker # docker是否正常
      systemctl status NetworkManager # 网络连接工具是否正常
      kubectl cluster-info #查看集群信息
      kubectl get nodes   # kubelet集群节点
      kubectl get po -A   # 查看所以pod状态
      kubectl get po -A -owide   # 查看所以pod的ip和所在的node
      kubectl describe node <node-name>
      kubectl get events -n <namespace>  #Kubernetes 事件日志
      journalctl -u kubelet -f  # 日志查看
      cat /var/log/messages | grep xx  # 日志查看 
              
      # 应用Pod状态
      kubectl get pods -n <namespace> -o wide
      ping pod_ip # 判断容器之间的联通性
      kubectl describe <pod-name> -n <namespace>
      kubectl exec -it <pod-name> -n <namespace> /bin/sh  # 进入容器内部
      kubectl logs <pod-name> -n <namespace> 
              
      # 集群资源状态
      kubectl top nodes
      kubectl top pods -n <namespace>
      
    • 客户网络环境限制(可用端口、防火墙策略)

      # 网络组件
      ip link show
      iptables -L
      
      # DNS配置
      cat /etc/resolv.conf
      # 网络分析 
      curl url  # 应用连通性
      fping -c xx -p xx 目标IP或域名  # 基础连通性
      ping <目标IP>    # 基础连通性
      telnet <IP> <端口>    # 端口连通性
      traceroute    # 路由跟踪
      tcpdump -i any port <端口> -w dump.pcap    # 抓包分析
      

    参考

    https://jimmysong.io/kubernetes-hndbaook/guide/using-kubectl.html https://kubernetes.io/zh-cn/docs/tasks/debug/_print/ https://cheat.sh/ https://kubernetes.io/docs/reference/kubectl/cheatsheet/ https://kubernetes.io/zh/docs/reference/kubectl/ https://docs.docker.com/engine/reference/run/