Kubelet无法访问rancher-metadata问题分析

引言

Rancher能够支持Kubernetes,可以快速几乎无障碍的拉起一套K8s环境,这对刚入门K8s的小白来说简直是一大利器。当然由于系统特性五花八门,系统内置软件也相互影响,所以有时候伙伴们会碰到比较难缠的问题。本文就分析一下关于kubelet无法访问rancher-metadata问题。

问题现象

使用Rancher部署K8s后,发现一切服务状态均正常,这时候打开K8s dashboard却无法访问,细心得查看会发现,dashboard服务并没有部署起来,这时下意识的行为是查看kubelet的日志,此时会发现一个异常:

你会发现kubelet容器内部一直无法访问rancher-metadata,查看rancher-k8s-package源码,kubelet服务启动之前需要通过访问rancher-metadata做一些初始化动作,由于访问不了,便一直处于sleep状态,也就是出现了上面提到的那些异常日志的现象:

同样,在github上也能看到类似的issue:https://github.com/rancher/rancher/issues/7160

排查分析

进入kubelet容器一探究竟,分别用ping和dig测试对rancher-metadata访问情况如下:

dig明显可以解析,但是ping无法解析,因此基本排除了容器内dns nameserver或者网络链路情况的问题。

既然dig没有问题,ping有问题,那么我们就直接采取使用

strace(strace ping rancher-metadata -c 1)

来调试,这样可以打印系统内部调用的情况,可以更深层次找到问题根源:

之前提到这个问题并不是必现的,所以我们找一个正常的环境,同样用strace调试,如下:

对这两张图,其实已经能够很明显的看出区别,有问题的kubelet在解析rancher-metadata之前,向nscd请求的解析结果,nscd返回了unkown host,所以就没有进行dns解析。而正常的kubelet节点并没有找到nscd.socket,而后直接请求dns进行解析rancher-metadata地址。

经过以上的分析,基本上断定问题出在nscd上,那么为什么同样版本的rancher-k8s,一个有nscd socket,而另一个却没有,仔细看一下kubelet的compose定义:

kubelet启动时候映射了主机目录/var/run,那么基本可以得知nscd来自于系统。检查一下有问题的kubelet节点的系统,果然会发现安装了nscd服务(服务名为unscd)。

用比较暴力的方案证明一下分析过程,直接删除nscd socket文件,这时候你会发现kubelet服务正常启动了,rancher-metadata也可以访问了。

回过头来思考一下原理,为什么ping/curl这种会先去nscd中寻找解析结果呢,而dig/nslookup则不受影响。ping/curl这种在解析地址前都会先读取/etc/nsswitch.conf,这是由于其底层均引用了glibc, 由nsswitch调度,最终指引ping/curl先去找nscd服务。nscd服务是一个name services cache服务,很多解析结果他会缓存,而我们知道这个nscd是运行在Host上的,Host上是不能直接访问rancher-metadata这个服务名,所以kubelet容器中就无法访问rancher-metadata。

其他解决方案

其实我们也未必要如此暴力删除nscd,nscd也有一些配置,我们可以修改一下以避免这种情况,可以disable hosts cache,这样nscd中便不会有相应内容的缓存,所以解析rancher-metadata并不会出现unknown host,而是继续向dns nameserver申请解析地址,这样也不会有问题。

总结

遇到问题不能慌,关键是要沉得住气,很多看似非常复杂的问题,其实往往都是一个小配置引发的血案。

时间: 2024-10-13 11:27:36

Kubelet无法访问rancher-metadata问题分析的相关文章

OpenStack Metadata Service分析

1.为什么Metadata Service OpenStack Metadata Service 提供 instance 的配置信息(这些信息被统称为 metadata).instance 启动时向 Metadata Service 请求并获得自己的 metadata,instance 的 cloud-init根据 metadata 完成个性化配置工作. 2.Metadata Service架构 nova-api-metadata nova-api-metadata是nova-api的子服务,它

tomcat 访问日志源码分析与应用

tomcat 日志可以分为两类: 1.访问日志,记录访问的时间.来源.资料等相关信息(ServletRequest 可以获取的信息,都可以记录): 2.运行日志,记录tomcat 运行.异常.错误信息. tomcat 的日志记录常会被 log4j 或 slf4j 取代,不过这里不讨论另外日志组件,很纯粹地说一下tomcat 原生的访问日志.关于运行日志的分析,有机会再另写一篇.对于访问日志,tomcat 定义了以下接口: public interface AccessLog { // 记录访问日

位域结构体多线程访问出错的问题分析

位域结构体能节省一些内存空间,但是使用不当会产生race conditions,导致程序异常,下面简要分析错误产生的原因和解决方案. 首先定义一个简单的bit field结构体. +struct bit_filed { + unsigned a : 1; + unsigned b : 1; + unsigned c : 1; + unsigned d : 1; + unsigned e : 1; + unsigned f : 1; + unsigned g : 1; + unsigned h :

Django rest framework 限制访问频率(源码分析三)

基于 当用发出请求时 首先执行dispatch函数,当执行当第二部时: #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) 进入到initial方法: def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the method han

发现一波黒帽seo神操作,通过百度打开跳广告,其他方式访问正常。下面分析原理。

朋友网站被黑了,但是不是低级黑,虽然最后发现原理很简单,但是对于普通seo来说还是有些奇妙哦.而且不影响收录和排名,站长只管优化,黒帽偷偷得利! 情况是在百度打开收录的页面,打开后,会跳到别人的垃圾广告网站. 直接打开,或者在网站运营地区打开就是正常访问. 这波操作让当事人懵逼啊,只能靠客户反映. 我得知此事后初步判断是被植入了恶意代码加了判断. 在v站请教了大佬们后,得到了证实,还帮我找到了植入点,真是给力啊. 这是通过引入js来实现的. 下面我们来剖析下这技术简单但是微妙的操作吧. 当然这只

Rancher v1.2基础设施引擎整体架构分析

Rancher Labs官方于12月1日发布了其容器部署与管理平台Rancher的最新版本,Rancher v1.2.Rancher v1.2可以说是一个里程碑版本,只要体会其新版功能,会发现漫长的等待绝对是值得的. 从架构角度看,用两个字来概括就是"解耦",基础设施引擎的分离,agent节点的服务粒度更细: 从产品角度看,给了用户更多定制的空间,Rancher依然秉持着全部OpenSource的理念: 在开发语言上,之前遗留的通过shell脚本方式的粗糙实现也都基于Golang重写,

Java web 实现 之 Filter分析ip统计网站的访问次数

统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的. 用什么东西来装载统计的数据.Map<String,Integer> 整个网站只需要一个Map即可! Map什么时候创建(使用ServletContextListener,在服务器启动时完成创建,并只在到ServletContext中),Map保存到哪里!(Map保存到ServletContext中!!!) Map需要在Filter中用来保存数据 Map需要在页面使用,

Nginx 访问日志增长暴增出现尖刀的详细分析

前言:          Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问,怎么可能会有这么大的url访问量?以前只是安装使用nginx,还没有抽出时间仔细研究,这回需要彻底的去分析nginx日志了. 1,日志分类 主要2种,一种是错误日志,一种是访问日志,这些配置都在/usr/local/nginx/conf/nginx.conf里面,默认都是打开的,自己也可以选择关闭

Apache服务器访问过慢分析及解决

起因:线上的一台服务器,最近总是出现 访问 很慢的情况发生,点击一个链接要2秒钟以上才能打开,按照我们对于访问人数的估计,服务器应该不至于响应这么慢,从而需要针对这个问题进行分析,来解决网站访问过慢. 分析: 1.首先,在页面访问变慢情况发生时,使用 top 命令查看了服务器的负载情况,发现负载并不高,初步估计不是程序的问题. 2.然后,查看了线程中的 httpd 的数量, ps -aux | grep httpd | wc -l 发现,线程数已经达到了 apache 设置的最大值.由此断定是网