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 statusjournalctl -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全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Kubernetes集群问题排查
查看系统Event事件 kubectl describe pod <PodName> --namespace=<NAMESPACE> 该命令可以显示Pod创建时的配置定义、状态等信息和最近的Event事件……
<<上一篇
下一篇>>
文章目录
关闭
目 录