Kubernetes集群问题排查
查看系统Event事件
kubectl describe pod <PodName> --namespace=<NAMESPACE>
该命令可以显示Pod创建时的配置定义、状态等信息和最近的Event事件,事件信息可用于排错。例如当Pod状态为Pending,可通过查看Event事件确认原因,一般原因有几种:
- 没有可用的Node可调度
- 开启了资源配额管理并且当前Pod的目标节点上恰好没有可用的资源
- 正在下载镜像(镜像拉取耗时太久)或镜像下载失败
kubectl describe还可以查看其它k8s对象:NODE
,RC
,Service
,Namespace
,Secrets
。
Pod
kubectl describe pod <PodName> --namespace=<NAMESPACE>
NODE
kubectl describe node 192.168.1.20
RC
kubectl describe rc nginx-rc-1.17.0 --namespace=appblog
NAMESPACE
kubectl describe namespace appblog
Service
kubectl describe service nginx-service-1170 --namespace=appblog
查看容器日志
查看指定pod的日志
kubectl logs <pod_name> -n appblog
kubectl logs -f <pod_name> -n appblog #类似 tail -f 的方式查看
kubectl logs --tail 200 -f <pod_name> -n appblog #类似 tail -f 的方式查看
kubectl logs --tail 200 -f <pod_name> -n appblog |more #类似 tail -f 的方式查看
查看上一个pod的日志
kubectl logs -p <pod_name>
查看指定pod中指定容器的日志
kubectl logs <pod_name> -c <container_name>
kubectl logs --help
查看k8s服务日志
journalctl
在Linux系统上systemd系统来管理kubernetes服务,并且journal系统会接管服务程序的输出日志,可以通过systemctl status
或journalctl -u -f
来查看kubernetes服务的日志。
journalctl -u kube-scheduler
journalctl -xefu kubelet
journalctl -u kube-apiserver
journalctl -u kubelet |tail
journalctl -xe
docker logs
docker logs 容器id
日志文件
也可以通过指定日志存放目录来保存和查看日志
–logtostderr=false
: 不输出到stderr
–log-dir=/var/log/kubernetes
: 日志的存放目录
–alsologtostderr=false
: 设置为true表示日志输出到文件也输出到stderr
–v=0
: glog的日志级别
–vmodule=gfs*=2,test*=4
: glog基于模块的详细日志级别
常见问题
Pod状态一直为Pending
kubectl describe <pod_name> --namespace=<NAMESPACE>
- 正在下载镜像但拉取不下来(镜像拉取耗时太久)[一般都是该原因]
- 没有可用的Node可调度
- 开启了资源配额管理并且当前Pod的目标节点上恰好没有可用的资源
解决方法:
- 查看该POD所在宿主机与镜像仓库之间的网络是否有问题,可以手动拉取镜像
- 删除POD实例,让POD调度到别的宿主机上
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/23/kubernetes-cluster-troubleshooting/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论