應(yīng)用程序故障排查(kubectl)

應(yīng)用程序故障排查(kubectl)

常見問(wèn)題

故障診斷

--- 排查Pods的故障

  • Pod始終處于Pending狀態(tài)

  • Pod始終處于Waiting狀態(tài)

  • Pod一直崩潰或運(yùn)行不正常

--- 排查Replication Controllers的故障

--- 排查Services的故障

  • 服務(wù)沒(méi)有端點(diǎn)信息

故障診斷

故障排查的第一步是對(duì)故障進(jìn)行分類拙吉。一般來(lái)說(shuō),應(yīng)用程序的故障可以分為下面幾個(gè)方面:

  • Pods的故障
  • ReplicationControllers的故障
  • Services的故障

插入一些比較常用的命令:

Kubectl get nodes:獲取所有kubenetes的節(jié)點(diǎn)
Kubectl get namespace:獲取所有
kubectl –n testnm get svc:獲取namesapce為testnm下所有的service
Kubectl –n testnm get pods –o wide: 獲取namesapce為testnm下的所有的pod,并可現(xiàn)實(shí)pod實(shí)例化在哪個(gè)kubectl的節(jié)點(diǎn)上
Kubectl –n testnm get pods:獲取namesapce為testnm下的所有的pod
Kubectl –n testnm logs [podName]:查看pod的日志
Kubectl –n testnm logs –f [podName]:實(shí)時(shí)查看pod的日志
Kubectl –n testnm describe pod [podName]:查看pod的狀態(tài)
kubectl -n testnm exec -it [podName] /bin/bash:進(jìn)入到指定的容器內(nèi)

排查Pods的故障

檢查Pod的問(wèn)題首先應(yīng)該了解Pod所處的狀況禀晓。下面這個(gè)命令能夠獲得Pod當(dāng)前的狀態(tài)和近期的事件列表:
$ kubectl describe pods ${POD_NAME}

確認(rèn)清楚在Pod以及其中每一個(gè)容器的狀態(tài)滚躯,是否都處于Runing轮蜕?通過(guò)觀察容器的已運(yùn)行時(shí)間判斷它是否剛剛才重新啟動(dòng)過(guò)?

根據(jù)不同的運(yùn)行狀態(tài),用戶應(yīng)該采取不同的調(diào)查措施削解。

注解:

  Name:容器的名稱

  Ready:1/1    前1為可用的有多少個(gè)营勤,后1為總共多少個(gè)

  Status:運(yùn)行狀態(tài)(pending灵嫌,waiting,running…)

  Restarts:重啟的次數(shù)

  Age:?jiǎn)?dòng)的總時(shí)間

  Ip:容器的ip地址

  Node:容器在kubenetes的哪個(gè)節(jié)點(diǎn)上啟動(dòng)
  • Pod始終處于Pending狀態(tài)

如果Pod保持在Pending的狀態(tài)葛作,這意味著它無(wú)法被正常的調(diào)度到一個(gè)節(jié)點(diǎn)上寿羞。通常來(lái)說(shuō),這是由于某種系統(tǒng)資源無(wú)法滿足Pod運(yùn)行的需求赂蠢。觀察剛才kubectl describe命令的輸出內(nèi)容绪穆,其中應(yīng)該包括了能夠判斷錯(cuò)誤原因的消息。常見的原因有以下這些:

系統(tǒng)沒(méi)有足夠的資源:你也許已經(jīng)用盡了集群中所有的CPU或內(nèi)存資源虱岂。對(duì)于這種情況玖院,你需要清理一些不在需要的Pod,調(diào)整它們所需的資源量第岖,或者向集群中增加新的節(jié)點(diǎn)难菌。在計(jì)算資源文檔有更詳細(xì)的說(shuō)明。

用戶指定了hostPort:通過(guò)hostPort用戶能夠?qū)⒎?wù)暴露到指定的主機(jī)端口上蔑滓,但這樣會(huì)限制Pod能夠被調(diào)度運(yùn)行的節(jié)點(diǎn)郊酒。在大多數(shù)情況下,hostPort配置都是沒(méi)有必要的键袱,用戶應(yīng)該采用Service的方式暴露其對(duì)外的服務(wù)燎窘。如果用戶確實(shí)必須使用hostPort的功能,那么此Pod最多只能部署到和集群節(jié)點(diǎn)相同的數(shù)目

  • Pod始終處于Waiting狀態(tài)

Pod處在Waiting的狀態(tài)杠纵,說(shuō)明它已經(jīng)被調(diào)度分配到了一個(gè)工作節(jié)點(diǎn)荠耽,然而它無(wú)法在那個(gè)節(jié)點(diǎn)上運(yùn)行。同樣的比藻,在剛才kubectl describe命令的輸出內(nèi)容中铝量,應(yīng)該包含有更詳細(xì)的錯(cuò)誤信息。最經(jīng)常導(dǎo)致Pod始終Waiting的原因是無(wú)法下載所需的鏡像(譯者注:由于國(guó)內(nèi)特殊的網(wǎng)絡(luò)環(huán)境银亲,這類問(wèn)題出現(xiàn)得特別普遍)慢叨。用戶可以從下面三個(gè)方面進(jìn)行排查:

請(qǐng)確保正確書寫了鏡像的名稱

請(qǐng)檢查所需鏡像是否已經(jīng)推送到了倉(cāng)庫(kù)中

手工的在節(jié)點(diǎn)上運(yùn)行一次docker pull <鏡像名稱>檢測(cè)鏡像能否被正確的拉取下來(lái)

  • Pod一直崩潰或運(yùn)行不正常

首先,查看正在運(yùn)行容器的日志务蝠。

$ kubectl logs <Pod名稱> <Pod中的容器名稱>

如果容器之前已經(jīng)崩潰過(guò)拍谐,通過(guò)以下命令可以獲得容器前一次運(yùn)行的日志內(nèi)容。

$ kubectl logs --previous <Pod名稱> <Pod中的容器名稱>

此外,還可以使用exec命令在指定的容器中運(yùn)行任意的調(diào)試命令轩拨。

$ kubectl exec <Pod名稱> -c <Pod中的容器名稱> -- <任意命令> <命令參數(shù)列表...>

Kubectl –n testnm exec -it [podName] /bin/bash 這條命令可以進(jìn)入到pod容器中

排查Replication Controllers的故障

Replication Controllers的邏輯十分直白践瓷,它的作用只是創(chuàng)建新的Pod副本,僅僅可能出現(xiàn)的錯(cuò)誤便是它無(wú)法創(chuàng)建正確的Pod亡蓉,對(duì)于這種情況晕翠,應(yīng)該參考上面的『排查Pods的故障』部分進(jìn)行檢查。
也可以使用kubectl describe rc <控制器名稱>來(lái)顯示與指定Replication Controllers相關(guān)的事件信息砍濒。

排查Services的故障

Service為一系列后端Pod提供負(fù)載均衡的功能淋肾。有些十分常見的故障都可能導(dǎo)致Service無(wú)法正常工作,以下將提供對(duì)調(diào)試Service相關(guān)問(wèn)題的參考爸邢。

首先樊卓,檢查Service連接的服務(wù)提供端點(diǎn)(endpoint),對(duì)于任意一個(gè)Service對(duì)象杠河,apiserver都會(huì)為其創(chuàng)建一個(gè)端點(diǎn)資源(譯者注:即提供服務(wù)的IP地址和端口號(hào))碌尔。

這個(gè)命令可以查看到Service的端口資源:

$ kubectl get endpoints <Service名稱>
$ Kubectl –n testnm get pods –o wide
$ Kubectl –n testnm get endpoints [podName]

請(qǐng)檢查這個(gè)命令輸出端點(diǎn)信息中的端口號(hào)與實(shí)際容器提供服務(wù)的端口號(hào)是否一致。例如券敌,如果你的Service使用了三個(gè)Nginx容器的副本(replicas)七扰,這個(gè)命令應(yīng)該輸出三個(gè)不同的IP地址的端點(diǎn)信息。

  • 服務(wù)沒(méi)有端點(diǎn)信息

如果剛剛的命令顯示Service沒(méi)有端點(diǎn)信息陪白,請(qǐng)嘗試通過(guò)Service的選擇器找到具有相應(yīng)標(biāo)簽的所有Pod颈走。假設(shè)你的Service描述選擇器內(nèi)容如下:

Kubectl –n testnm describe svc [svcName]

公共應(yīng)用技術(shù)部-內(nèi)部 > kubectl 常見問(wèn)題排查方法 > image2019-1-23_9-48-5.png

可以使用以下命令找出相應(yīng)的Pod:

$ kubectl get pods --selector=name=nginx,type=frontend

找到了符合標(biāo)簽的Pod后,首先確認(rèn)這些被選中的Pod是正確咱士,有無(wú)錯(cuò)選立由、漏選的情況。

如果被選中的Pod沒(méi)有問(wèn)題序厉,則問(wèn)題很可能出在這些Pod暴露的端口沒(méi)有被正確的配置好锐膜。要是一個(gè)Service指定了containerPort,但被選中的Pod并沒(méi)有在配置中列出相應(yīng)的端口弛房,它們就不會(huì)出現(xiàn)在端點(diǎn)列表中道盏。

請(qǐng)確保所用Pod的containerPort與Service的containerPort配置信息是一致的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末文捶,一起剝皮案震驚了整個(gè)濱河市荷逞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粹排,老刑警劉巖种远,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顽耳,居然都是意外死亡坠敷,警方通過(guò)查閱死者的電腦和手機(jī)妙同,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膝迎,“玉大人粥帚,你說(shuō)我怎么就攤上這事∠薮危” “怎么了茎辐?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掂恕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)弛槐,這世上最難降的妖魔是什么懊亡? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮乎串,結(jié)果婚禮上店枣,老公的妹妹穿的比我還像新娘。我一直安慰自己叹誉,他們只是感情好鸯两,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著长豁,像睡著了一般钧唐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匠襟,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天钝侠,我揣著相機(jī)與錄音,去河邊找鬼酸舍。 笑死帅韧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啃勉。 我是一名探鬼主播忽舟,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淮阐!你這毒婦竟也來(lái)了叮阅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泣特,失蹤者是張志新(化名)和其女友劉穎帘饶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體群扶,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡及刻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年镀裤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缴饭。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暑劝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颗搂,到底是詐尸還是另有隱情担猛,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布丢氢,位于F島的核電站傅联,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疚察。R本人自食惡果不足惜蒸走,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望貌嫡。 院中可真熱鬧比驻,春花似錦、人聲如沸岛抄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夫椭。三九已至掸掸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹭秋,已是汗流浹背猾漫。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留感凤,地道東北人悯周。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陪竿,于是被迫代替她去往敵國(guó)和親禽翼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容