kubernetes由于网络问题引起的pod创建失败

发布于 2019-05-15  9 次阅读


前言

今天内网k8s测试环境需要部署corendns服务,默认coredns的yaml配置文件replicas是2个,我们有两个node节点,按道理讲这两个coredns服务会被平分到两个node节点上。但是查看后只有一个node节点部署成功。于是通过日志开始排查问题,最终发现是由于该node机器再做初始化的时候没有添加dns 解析,导致不能上网,拉取镜像失败,间接导致coredns创建失败。虽然解决后感觉问题很低端,但是排查问题的思路是值得记录的,相信从事多年的运维工作者会深有体会,任何一个困难的问题,当你挖的足够深入,你会发现它其实就是由一个小问题引起的。可能是参数配置不当,可能是网络存储等底层问题,这就需要你剥丝抽茧,根据日志和报错信息逐步排查问题的根源。

排查过程

首先通过kubectl get pod -n=kube-system -o wide 查看Pod的状态。发现问题出现再192.168.137.14机器上。也就是node-1节点。

由于node节点上容器的创建,挂载,等一系列操作是kubelet管理的,于是查看了node-1节点的kubelet日志,输出如下

日志信息提示不能pull镜像,那么简单我们直接手动在node-1节点去pull镜像看是否出现问题,结果报错如下

我第一印象认为它找的仓库不对,于是查看了daemon.json发现真的不存在,于是创建了该文件并声明了国内仓库。重启docker服务并查看日志无报错。于是再次pull结果还是不能拉取镜像。难道没生效?但是仔细想想不太可能。没什么别的可配置了。那只有一个原因,不是这个问题。搜了这个报错后。可能的原因如下所示:

  1. dns 问题。
  2. 网络问题,是否可以上网?

于是打算重新设置dns结果发现本机dns没有配置。并且无法ping www.qq.com  (因为这台机器是虚拟机,之前重启过,配置的dns仅仅是在/etc/resolv.conf下,重启后dns配置清空了。一般推荐写到网卡里,或者配置在/etc/resolvconf/ resolv.conf.d/base 文件下然后通过resolvconf -u生效)

添加dns后再次查看Pod发现已经成功。

 

 


一个幽默,喜欢动漫,音乐,爱小动物,逐渐成为二次元肥宅的LINUX运维工程师,我会用心写博客,刚开始写的不太好。但是我会不断进步的!。就像我的博客下面写的。我宁愿做错,也不愿什么都不做 ps:好像是伊泽瑞尔说的,看来你游戏没少玩啊 23333333333333