当前位置: 首页 > news >正文

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

引言


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


问题现象


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


wKiom1jFSlWgZxCGAAB5XvYrOxE638.jpg


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


wKiom1jFSmGyr4MpAAC8y_FBJ9c315.jpg


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


排查分析


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


wKioL1jFSnfhvDAUAADPvAhWqCw094.jpg


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


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

1
strace(strace ping rancher-metadata -c  1

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


wKioL1jFSo3wZlY7AAJIDlCGAp0268.jpg


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


wKioL1jFSsqQ0VuIAAF8tEVnPOg972.jpg


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


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


wKiom1jFStbCA67FAACR9F_10Is699.jpg


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申请解析地址,这样也不会有问题。


wKiom1jFSumBFJv2AAEtCA1MVrw846.jpg


总结


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


本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1905731


相关文章:

  • RIA Service 的 SOAP EndPoint
  • Servlet总结
  • js读取xml文档,并实现简单分页
  • linux 查找僵死进程,并杀死进程
  • 过滤并替换页面html输出
  • Goldengate实现在线数据迁移
  • 新浪就微博受病毒攻击事件致歉
  • 11g新特性:Note raised when explain plan for create index
  • 在asp.net中如何获取asp:DataList中子控件asp:RadioButtonList的值
  • Laputa在cnblogs
  • sk_buff封装和解封装网络数据包的过程详解
  • android 调用系统摄像头
  • _shared_pool_reserved_pct or shared_pool_reserved_size with ASMM
  • jQuery选择器详解[转]
  • linux 下安装tomcat
  • bootstrap创建登录注册页面
  • Docker下部署自己的LNMP工作环境
  • ES6语法详解(一)
  • JavaScript的使用你知道几种?(上)
  • JS变量作用域
  • 讲清楚之javascript作用域
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用jquery编写加法运算验证码
  • 判断客户端类型,Android,iOS,PC
  • 前端js -- this指向总结。
  • 如何设计一个微型分布式架构?
  • 软件开发学习的5大技巧,你知道吗?
  • 深度学习在携程攻略社区的应用
  • 使用common-codec进行md5加密
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 通过git安装npm私有模块
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • # Panda3d 碰撞检测系统介绍
  • #HarmonyOS:Web组件的使用
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)计算机毕业设计ssm电影分享网站
  • (六)Hibernate的二级缓存
  • (转)scrum常见工具列表
  • (转)Windows2003安全设置/维护
  • (转)创业家杂志:UCWEB天使第一步
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .Family_物联网
  • .jks文件(JAVA KeyStore)
  • .NET Core 2.1路线图
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net MySql
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NetCore 如何动态路由
  • .Net小白的大学四年,内含面经