开发者社区> 店家小二> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 引言 Rancher能够支持Kubernetes,可以快速几乎无障碍的拉起一套K8s环境,这对刚入门K8s的小白来说简直是一大利器。当然由于系统特性五花八门,系统内置软件也相互影响,所以有时候伙伴们会碰到比较难缠的问题。
+关注继续查看

引言

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

问题现象

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

4eb6b7903b520c5789bd10f61e9c88ac301bba46

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

c036cdcb4603e002cca15d16c3dddffb6e044743

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

排查分析

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

7390a30c5fc7c03ced90db2ba960c52205757d82

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

既然dig没有问题,ping有问题,那么我们就直接采取使用strace(strace ping rancher-metadata -c 1)来调试,这样可以打印系统内部调用的情况,可以更深层次找到问题根源:

0a5dfb9f1d725cf1fa70ddafceb77d834733f785

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

73b268a647424ae02ae8a67bfd9cf1660eedb038

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

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

e68c0b245335d9caecaa2b15eacc0b9e1d63cd85

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

2332892f8b6c01666c15b79b21fbd3a7b16bbe23

总结

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

本文转自SegmentFault-Kubelet无法访问rancher-metadata问题分析

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
kubernetes 【网络组件】coredns【1】配置使用详解
kubernetes 【网络组件】coredns【1】配置使用详解
0 0
使用describe命令进行Kubernetes pod错误排查
使用describe命令进行Kubernetes pod错误排查
0 0
k8s通过deployment创建pod失败排查
deployment创建pod失败,通过describe deployment ${DEPLOY_NAME} 没能看到具体原因。最终在“edit deployment ${DEPLOY_NAME}”中看到错误原因。
0 0
Kubernetes pod oom 问题 排查记录
### 背景 近期维护的 Kubernetes 组件 pod 在某些集群上经常遇到 oom 问题。 导致 container 频繁重启. 该组件在集群中的主要作用是根据 pvc & sc 的配置 动态创建 pv。由于 oom 会导致 container 自动重启,而 pending 状态的 pvc 会自动重试。所以在功能上并没有给用户的集群造成特别大的影响。只是每次 oom 的时候集群内都有
0 0
在 Kubernetes 集群中通过 dns-admission-controller 来调整 Pod dns 配置
本文介绍 dns-admission-controller 组件,通过 mutating webhook 机制能够在集群级别自动调整 pod 的 dns 配置,灵活性强、侵入性低。
0 0
Kubelet无法访问rancher-metadata问题分析
引言 Rancher能够支持Kubernetes,可以快速几乎无障碍的拉起一套K8s环境,这对刚入门K8s的小白来说简直是一大利器。当然由于系统特性五花八门,系统内置软件也相互影响,所以有时候伙伴们会碰到比较难缠的问题。
809 0
kubernetes1.8与1.9.2安装指南,离线安装,内网安装, 使用外部etcd集群,coredns替换方法
使用kubeadm部署k8s集群 三步装集群:离线包地址1.8.1 离线安装包1.9.2 注意1.9.2安装方式见商品页面,与1.8.1有点差别,做一些配置和脚本的优化 基础环境 关闭swap swapoff -a 再把/etc/fstab文件中带有swap的行删了,没有就无视 装这两工具如果没装.
1475 0
深入分析Kubernetes Critical Pod(四)
本文分析了DeamonSetController及PriorityClass Validate时,对CriticalPod的所做的特殊处理。
1405 0
深入分析Kubernetes Critical Pod(三)
本文介绍了Kubelet在Predicate Admit准入检查时对CriticalPod的资源抢占的原理,以及Priority Admission Controller对CriticalPod的PriorityClassName特殊处理。
2082 0
深入分析Kubernetes Critical Pod(二)
[深入分析Kubernetes Critical Pod(一)](https://yq.aliyun.com/articles/603541)介绍了Scheduler对Critical Pod的处理逻辑,下面我们再看下Kubelet Eviction Manager对Critical Pod的处理逻辑是怎样的,以便我们了解Kubelet Evict Pod时对Critical Pod是否有保护措施,如果有,又是如何保护的。
1378 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
大规模场景下KubernetesService 负载均衡性能
立即下载
Kubernetes Helm
立即下载
我的Docker-Docker插件机制详解
立即下载