0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何快速查看Kubernetes Pod崩潰前的日志

馬哥Linux運(yùn)維 ? 來源:csdn ? 2023-07-06 09:25 ? 次閱讀

當(dāng)pod處于crash狀態(tài)的時(shí)候,容器不斷重啟,此時(shí)用kubelet logs可能出現(xiàn)一直捕捉不到日志。解決方法:

kubectl previous參數(shù)作用:If true, print the logs for the previous instance of the container in a pod if it exists.

單容器pod:

kubectllogspod-name--previous

多容器pod:

kubectllogspod-name--previous-ccontainer-name

比如:

NAMEREADYSTATUSRESTARTSAGE
nginx-7d8b49557c-c2lx92/2Running5

kubectllogsnginx-7d8b49557c-c2lx9--previous
Error:xxxxxxxxxxx

kubelet會(huì)保持pod的前幾個(gè)失敗的容器,這個(gè)是查看的前提條件。kubelet實(shí)現(xiàn)previous的原理:將pod的日志存放在/var/log/pods/podname,并且是鏈接文件,鏈接到docker的容器的日志文件,同時(shí)kubelet還會(huì)保留上一個(gè)容器,同時(shí)有一個(gè)鏈接文件鏈接到pod上一個(gè)崩潰的容器的日志文件,使用previous就是查看的這個(gè)文件

比如查看一個(gè)pod:

ubuntu@~$kubeletgetpod
NAMEREADYSTATUSRESTARTSAGE
busybox1/1Running239499d
nginx-deployment-6wlhd1/1Running079d
redis1/1Running049d

到pod所在node查看kubelet放的兩個(gè)日志文件:

ls/var/log/pods/default_busybox_f72ab71a-5b3b-4ecf-940d-28a5c3b30683/busybox
2393.log2394.log

數(shù)字的含義:2393證明是第 2393 次重啟后的日志,2394代表是第2394次重啟后的日志。

實(shí)際這兩個(gè)日志文件是鏈接文件,指向了docker的日志文件:

/busybox#stat2393.log
File:2393.log->/data/kubernetes/docker/containers/68a5b32c9fdb1ad011b32e6252f9cdb759f69d7850e6b7b8591cb4c2bf00bcca/68a5b32c9fdb1ad011b32e6252f9cdb759f69d7850e6b7b8591cb4c2bf00bcca-json.log
Size:173Blocks:8IOBlock:4096symboliclink
Device:fc02h/64514dInode:529958Links:1
Access:(0777/lrwxrwxrwx)Uid:(0/root)Gid:(0/root)
Access:2023-01-311303.751514283+0800
Modify:2023-01-311303.039526838+0800
Change:2023-01-311303.039526838+0800
Birth:-

/busybox#stat2394.log
File:2394.log->/data/kubernetes/docker/containers/2ed9ebf0585215602874b076783e12191dbb010116038b8eb4646273ebfe195c/2ed9ebf0585215602874b076783e12191dbb010116038b8eb4646273ebfe195c-json.log
Size:173Blocks:8IOBlock:4096symboliclink
Device:fc02h/64514dInode:529955Links:1
Access:(0777/lrwxrwxrwx)Uid:(0/root)Gid:(0/root)
Access:2023-01-311403.991106950+0800
Modify:2023-01-311403.183119308+0800
Change:2023-01-311403.183119308+0800
Birth:-

看到分別指向了這兩個(gè)容器的日志文件,一個(gè)是當(dāng)前pod里在跑的容器,一個(gè)是pod上次跑的容器,現(xiàn)在已經(jīng)退出了

dockerps-a
CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
2ed9ebf05852ff4a8eb070e1"sleep3600"24minutesagoUp24minutesk8s_busybox_busybox_default_f72ab71a-5b3b-4ecf-940d-28a5c3b30683_2394
68a5b32c9fdbff4a8eb070e1"sleep3600"AboutanhouragoExited(0)24minutesagok8s_busybox_busybox_default_f72ab71a-5b3b-4ecf-940d-28a5c3b30683_2393

使用logs的時(shí)候讀的是當(dāng)前容器那個(gè)文件,使用–previous的時(shí)候,讀的是上次退出的容器的日志文件,由于kubelet為pod保留了上次退出的容器。

我們手動(dòng)編輯這兩個(gè)文件的內(nèi)容,看kubelet是否讀的是這兩個(gè)文件

/busybox#cat2393.log
{"log":"lastcrashlogs
","stream":"stderr","time":"2022-11-05T0827.31523845Z"}

/busybox#cat2394.log
{"log":"nowpodlog
","stream":"stderr","time":"2022-11-05T0827.31523845Z"}

ubuntu@10-234-32-51:~$klogsbusybox--previous
lastcrashlogs
ubuntu@10-234-32-51:~$klogsbusybox
nowpodlog

由于是鏈接文件,那么可能實(shí)際是從別的地方讀的,或者說直接讀容器目錄下的,由于鏈接文件我們改了后容器目錄下的日志文件也跟著改了,我們直接創(chuàng)建兩個(gè)文件來做驗(yàn)證:

ubuntu@10-234-32-51:~$kgetpod
NAMEREADYSTATUSRESTARTSAGE
busybox1/1Running239599d
nginx-deployment-6wlhd1/1Running079d
redis1/1Running049d

/busybox#ls
2394.log2395.log

/busybox#rm2394.log2395.log

我們刪除,然后自己創(chuàng)建,這時(shí)是regular file,而不是鏈接文件了:
/busybox#ls
2394.log2395.log

/busybox#stat2394.log
File:2394.log
Size:100Blocks:8IOBlock:4096regularfile
Device:fc02h/64514dInode:529965Links:1
Access:(0640/-rw-r-----)Uid:(0/root)Gid:(0/root)
Access:2023-01-311511.307170422+0800
Modify:2023-01-311507.711225229+0800
Change:2023-01-311507.711225229+0800
Birth:-

/busybox#stat2395.log
File:2395.log
Size:86Blocks:8IOBlock:4096regularfile
Device:fc02h/64514dInode:529967Links:1
Access:(0640/-rw-r-----)Uid:(0/root)Gid:(0/root)
Access:2023-01-311517.539989934+0800
Modify:2023-01-311514.348038586+0800
Change:2023-01-311514.352038525+0800
Birth:-

/busybox#cat2394.log
{"log":"previouslogscreatebymyself
","stream":"stderr","time":"2022-11-05T0827.31523845Z"}
/busybox#cat2395.log
{"log":"createbymyself
","stream":"stderr","time":"2022-11-05T0827.31523845Z"}

ubuntu@10-234-32-51:~$klogsbusybox
createbymyself
ubuntu@10-234-32-51:~$klogsbusybox--previous
previouslogscreatebymyself

得出結(jié)論:kubelet讀的是/var/log/pods/下的日志文件,–previous讀的也是/var/log/pods/下的日志文件,且專門有個(gè)鏈接文件來指向上一個(gè)退出容器的日志文件,以此來獲取容器崩潰前的日志。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • POD
    POD
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    6025

原文標(biāo)題:如何快速查看 Kubernetes Pod 崩潰前的日志

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    阿里云容器Kubernetes監(jiān)控(二) - 使用Grafana展現(xiàn)Pod監(jiān)控?cái)?shù)據(jù)

    kubernetes中承擔(dān)的責(zé)任遠(yuǎn)不止監(jiān)控?cái)?shù)據(jù)的采集,還包括控制臺的監(jiān)控接口、HPA的POD彈性伸縮等都依賴于Heapster的功能。簡介在kubernetes的監(jiān)控方案中
    發(fā)表于 05-10 15:28

    再次升級!阿里云Kubernetes日志解決方案

    服務(wù)器,獲取新的或已更新的配置并進(jìn)行熱加載。Logtail根據(jù)配置信息采集各個(gè)容器(POD)上的標(biāo)準(zhǔn)輸出或日志文件。最終Logtail將處理、聚合好的數(shù)據(jù)發(fā)送到日志服務(wù)。部署方法阿里云Kube
    發(fā)表于 05-28 19:08

    從零開始入門 K8s| 詳解 Pod 及容器設(shè)計(jì)模式

    一、為什么需要 Pod容器的基本概念我們知道 PodKubernetes 項(xiàng)目里面一個(gè)非常重要的概念,也是非常重要的一個(gè)原子調(diào)度單位,但是為什么我們會(huì)需要這樣一個(gè)概念呢?在使用容器
    發(fā)表于 09-20 15:12

    崩潰日志快速解析方法

    iOS快速解析崩潰日志
    發(fā)表于 10-09 14:13

    Pod資源配置

    Kubernetes進(jìn)階實(shí)戰(zhàn)》第四章《管理Pod資源對象》
    發(fā)表于 10-22 14:39

    Kubernetes平臺中的日志收集方案

    十、Kubernetes平臺中日志收集
    發(fā)表于 11-04 09:19

    如何多點(diǎn)出發(fā)快速查看網(wǎng)絡(luò)狀態(tài)

    如何多點(diǎn)出發(fā)快速查看網(wǎng)絡(luò)狀態(tài)     無論什么類型的網(wǎng)絡(luò),運(yùn)行時(shí)間長了,總有發(fā)生故障的時(shí)候;遇到網(wǎng)絡(luò)故障時(shí),想辦法在最短時(shí)間內(nèi)將
    發(fā)表于 04-14 14:02 ?2339次閱讀

    【工程師小貼士總匯】快速查看每個(gè)工程師都會(huì)碰上的困難

    【工程師小貼士總匯】快速查看每個(gè)工程師都會(huì)碰上的困難
    的頭像 發(fā)表于 07-12 16:17 ?2337次閱讀

    教你不用三方APP快速查看iPhone/iPad電池循環(huán)數(shù)

    不下三方APP:教你快速查看iPhone/iPad電池循環(huán)數(shù),iphone,電池,ipad,app,電池容量,ios
    發(fā)表于 02-04 14:03 ?1.3w次閱讀

    深入研究Kubernetes調(diào)度

    “本文從 Pod 和節(jié)點(diǎn)的配置開始,介紹了 Kubernetes Scheduler 框架、擴(kuò)展點(diǎn)、API 以及可能發(fā)生的與資源相關(guān)的瓶頸,并展示了性能調(diào)整設(shè)置,涵蓋了 Kubernetes 中調(diào)度
    的頭像 發(fā)表于 08-23 10:39 ?1411次閱讀

    Kubernetes組件pod核心原理

    1. 核心組件原理 —— pod 核心原理 1.1 pod 是什么 pod 也可以理解是一個(gè)容器,裝的是 docker 創(chuàng)建的容器,也就是用來封裝容器的一個(gè)容器; pod 是一個(gè)虛擬化
    的頭像 發(fā)表于 09-02 09:27 ?1828次閱讀

    Kubernetes中的Pod簡易理解

    PodKubernetes中非常重要的概念,也是Kubernetes管理的基本單位。正如其名,Pod像一個(gè)豌豆莢,可以容納多個(gè)container,擁有相同的IP地址。
    的頭像 發(fā)表于 02-15 10:44 ?1279次閱讀

    Kubernetes Pod如何獨(dú)立工作

    在學(xué)習(xí) Kubernetes 網(wǎng)絡(luò)模型的過程中,了解各種網(wǎng)絡(luò)組件的作用以及如何交互非常重要。本文就介紹了各種網(wǎng)絡(luò)組件在 Kubernetes 集群中是如何交互的,以及如何幫助每個(gè) Pod 都能獲取 IP 地址。
    的頭像 發(fā)表于 05-16 14:29 ?625次閱讀
    <b class='flag-5'>Kubernetes</b> <b class='flag-5'>Pod</b>如何獨(dú)立工作

    Kubernetes Pod如何獲取IP地址呢?

    Kubernetes 網(wǎng)絡(luò)模型的核心要求之一是每個(gè) Pod 都擁有自己的 IP 地址并可以使用該 IP 地址進(jìn)行通信。很多人剛開始使用 Kubernetes 時(shí),還不清楚如何為每個(gè) Pod
    的頭像 發(fā)表于 07-21 10:00 ?798次閱讀
    <b class='flag-5'>Kubernetes</b> <b class='flag-5'>Pod</b>如何獲取IP地址呢?

    redis容器內(nèi)怎么查看redis日志

    redis是一款流行的開源內(nèi)存數(shù)據(jù)庫,常用于緩存、消息隊(duì)列、任務(wù)管理等場景。在使用redis時(shí),了解如何查看redis日志對于排查問題、監(jiān)控性能和分析應(yīng)用程序行為非常重要。在本文中,我們將介紹在
    的頭像 發(fā)表于 12-05 10:10 ?3668次閱讀