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 kubectl get events -n #Kubernetes 事件日志 journalctl -u kubelet -f # 日志查看 cat /var/log/messages | grep xx # 日志查看 # 应用Pod状态 kubectl get pods -n -o wide ping pod_ip # 判断容器之间的联通性 kubectl describe -n kubectl exec -it -n /bin/sh # 进入容器内部 kubectl logs -n # 集群资源状态 kubectl top nodes kubectl top pods -n ``` - 客户网络环境限制(可用端口、防火墙策略) ``` # 网络组件 ip link show iptables -L # DNS配置 cat /etc/resolv.conf # 网络分析 curl url # 应用连通性 fping -c xx -p xx 目标IP或域名 # 基础连通性 ping <目标IP> # 基础连通性 telnet <端口> # 端口连通性 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/