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

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

引言

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

问题现象

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

%e5%9b%be1-1

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

%e5%9b%be2

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

排查分析

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

%e5%9b%be3

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

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

stracestrace ping rancher-metadata -c 1

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

%e5%9b%be4

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

%e5%9b%be5

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

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

%e5%9b%be6

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

%e5%9b%be7

总结

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

本文转自中文社区-Kubelet无法访问rancher-metadata问题分析

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 测试技术 Go
Kubernetes pod oom 问题 排查记录
### 背景 近期维护的 Kubernetes 组件 pod 在某些集群上经常遇到 oom 问题。 导致 container 频繁重启. 该组件在集群中的主要作用是根据 pvc & sc 的配置 动态创建 pv。由于 oom 会导致 container 自动重启,而 pending 状态的 pvc 会自动重试。所以在功能上并没有给用户的集群造成特别大的影响。只是每次 oom 的时候集群内都有
2393 0
Kubernetes pod oom 问题 排查记录
|
6月前
|
Kubernetes 应用服务中间件 Shell
为啥有的configMap要重启Pod才生效
在Kubernetes场景中,则使用configMap实现应用与配置分离。使用configMap的方式有多种,有的方式修改了configMap的配置,无需重启Pod即可生效,有的方式需要重启Pod才生效。看看你用的是哪一种吧。
为啥有的configMap要重启Pod才生效
|
3月前
|
Kubernetes 容器
Kubernetes—安装2022新版ingress-nginx步骤
Kubernetes—安装2022新版ingress-nginx步骤
98 0
|
5月前
|
Kubernetes 应用服务中间件 nginx
解释一下Kubernetes Minikube是什么,以及如何在本地运行一个Minikube集群
步骤1:准备环境 在开始之前,您需要确保本地环境已经具备以下几个关键的工具和组件:
173 1
|
6月前
|
Kubernetes Docker 容器
Kubernetes集群部署中安装Pods网络插件一直显示Pending状态解决
Kubernetes集群部署中安装Pods网络插件一直显示Pending状态解决
193 0
|
6月前
|
存储 Kubernetes 关系型数据库
【Kubernetes的Configmap、SecretMetric service及HPA、Wordpress应用Mysql主从PVPVCSCHPA】
【Kubernetes的Configmap、SecretMetric service及HPA、Wordpress应用Mysql主从PVPVCSCHPA】
|
11月前
|
Kubernetes 监控 应用服务中间件
【Error: ImagePullBackOff】Kubernetes中Nginx服务启动失败排查流程
【Error: ImagePullBackOff】Kubernetes中Nginx服务启动失败排查流程
183 0
|
Kubernetes NoSQL 网络安全
Kubernetes的 pod 重启策略、Pod状态、生命周期
Kubernetes的 pod 重启策略、Pod状态、生命周期
898 1
|
Kubernetes 网络协议 API
Kubernetes Kubelet 状态更新机制
Kubernetes Kubelet 状态更新机制
Kubernetes Kubelet 状态更新机制
|
域名解析 Kubernetes 监控
Kubernetes 日常故障解决
Kubernetes 日常故障解决
603 1