服务可用性定位问题常用命令
离职系列
第五篇
离职系列,想想这几年在公司的成长,在这做个记录。上一篇现场故障定位指南,主要讲的方法论,这篇主要对服务可用性的几个场景总结下相应的命令。
以下命令主要针对现场经常出现的安装失败、升级失败、补丁失败、服务不断重启、服务不可用几个场景:
- 安装失败,通常就是现场环境问题,比如服务器的磁盘性能不达标、网络通信问题、服务器DNS配置错误、集群IP段不可用
- 升级失败,通常和服务器的资源紧张有关(内存、磁盘、CPU等)
- 服务不断重启,通常是基础组件问题如redis异常、应用pod自身程序的bug如OOM、k8s组件问题如etcd重启
- 服务不可用,通常就是集群出了问题,比如磁盘满了导致镜像丢失
命令
- 确认环境信息
- 环境信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29# 操作系统版本
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集群状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 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>
- 环境信息
- 客户网络环境限制(可用端口、防火墙策略)
1
2
3
4
5
6
7
8
9
10
11
12
13# 网络组件
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/