摘要:引言能夠支持,可以快速幾乎無障礙的拉起一套環境,這對剛入門的小白來說簡直是一大利器。本文就分析一下關于無法訪問問題。檢查一下有問題的節點的系統,果然會發現安裝了服務服務名為。
引言
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/ra...
排查分析進入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申請解析地址,這樣也不會有問題。
總結遇到問題不能慌,關鍵是要沉得住氣,很多看似非常復雜的問題,其實往往都是一個小配置引發的血案。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32559.html
摘要:引言能夠支持,可以快速幾乎無障礙的拉起一套環境,這對剛入門的小白來說簡直是一大利器。本文就分析一下關于無法訪問問題。檢查一下有問題的節點的系統,果然會發現安裝了服務服務名為。 引言 Rancher能夠支持Kubernetes,可以快速幾乎無障礙的拉起一套K8s環境,這對剛入門K8s的小白來說簡直是一大利器。當然由于系統特性五花八門,系統內置軟件也相互影響,所以有時候伙伴們會碰到比較難纏...
摘要:組件會給每個分配一個,則替代了的來實現服務發現,在的容器內部依然可以訪問服務來獲取元數據信息。的需要在中實現一個,目前只有,而則維護了自己的版本在其中提供了。 在Rancher 1.0版本開始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多編排引擎的支持,很多朋友就此產生了疑惑,諸如Cattle引擎和這幾個之間到底什么關系?每種引擎是如何支持的?自家的業務環境...
摘要:組件會給每個分配一個,則替代了的來實現服務發現,在的容器內部依然可以訪問服務來獲取元數據信息。的需要在中實現一個,目前只有,而則維護了自己的版本在其中提供了。 在Rancher 1.0版本開始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多編排引擎的支持,很多朋友就此產生了疑惑,諸如Cattle引擎和這幾個之間到底什么關系?每種引擎是如何支持的?自家的業務環境...
摘要:組件會給每個分配一個,則替代了的來實現服務發現,在的容器內部依然可以訪問服務來獲取元數據信息。的需要在中實現一個,目前只有,而則維護了自己的版本在其中提供了。 在Rancher 1.0版本開始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多編排引擎的支持,很多朋友就此產生了疑惑,諸如Cattle引擎和這幾個之間到底什么關系?每種引擎是如何支持的?自家的業務環境...
摘要:組件會給每個分配一個,則替代了的來實現服務發現,在的容器內部依然可以訪問服務來獲取元數據信息。的需要在中實現一個,目前只有,而則維護了自己的版本在其中提供了。 在Rancher 1.0版本開始,Rancher逐步增加了Kubernetes、Swarm、Mesos等多編排引擎的支持,很多朋友就此產生了疑惑,諸如Cattle引擎和這幾個之間到底什么關系?每種引擎是如何支持的?自家的業務環境...
閱讀 1459·2021-11-22 13:52
閱讀 1281·2021-09-29 09:34
閱讀 2690·2021-09-09 11:40
閱讀 3031·2019-08-30 15:54
閱讀 1255·2019-08-30 15:53
閱讀 971·2019-08-30 11:01
閱讀 1354·2019-08-29 17:22
閱讀 1943·2019-08-26 10:57