那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

馬哥Linux運維 ? 來源:csdn ? 2023-07-06 09:25 ? 次閱讀

當pod處于crash狀態的時候,容器不斷重啟,此時用kubelet logs可能出現一直捕捉不到日志。解決方法:

kubectl previous參數作用: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會保持pod的前幾個失敗的容器,這個是查看的前提條件。kubelet實現previous的原理:將pod的日志存放在/var/log/pods/podname,并且是鏈接文件,鏈接到docker的容器的日志文件,同時kubelet還會保留上一個容器,同時有一個鏈接文件鏈接到pod上一個崩潰的容器的日志文件,使用previous就是查看的這個文件

比如查看一個pod:

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

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

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

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

實際這兩個日志文件是鏈接文件,指向了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:-

看到分別指向了這兩個容器的日志文件,一個是當前pod里在跑的容器,一個是pod上次跑的容器,現在已經退出了

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的時候讀的是當前容器那個文件,使用–previous的時候,讀的是上次退出的容器的日志文件,由于kubelet為pod保留了上次退出的容器。

我們手動編輯這兩個文件的內容,看kubelet是否讀的是這兩個文件

/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

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

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

/busybox#ls
2394.log2395.log

/busybox#rm2394.log2395.log

我們刪除,然后自己創建,這時是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

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





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • POD
    POD
    +關注

    關注

    0

    文章

    18

    瀏覽量

    6050

原文標題:如何快速查看 Kubernetes Pod 崩潰前的日志

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    阿里云容器Kubernetes監控(二) - 使用Grafana展現Pod監控數據

    kubernetes中承擔的責任遠不止監控數據的采集,還包括控制臺的監控接口、HPA的POD彈性伸縮等都依賴于Heapster的功能。簡介在kubernetes的監控方案中
    發表于 05-10 15:28

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

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

    從零開始入門 K8s| 詳解 Pod 及容器設計模式

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

    崩潰日志快速解析方法

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

    Pod資源配置

    Kubernetes進階實戰》第四章《管理Pod資源對象》
    發表于 10-22 14:39

    Kubernetes平臺中的日志收集方案

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

    如何多點出發快速查看網絡狀態

    如何多點出發快速查看網絡狀態     無論什么類型的網絡,運行時間長了,總有發生故障的時候;遇到網絡故障時,想辦法在最短時間內將
    發表于 04-14 14:02 ?2354次閱讀

    【工程師小貼士總匯】快速查看每個工程師都會碰上的困難

    【工程師小貼士總匯】快速查看每個工程師都會碰上的困難
    的頭像 發表于 07-12 16:17 ?2377次閱讀

    教你不用三方APP快速查看iPhone/iPad電池循環數

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

    深入研究Kubernetes調度

    “本文從 Pod 和節點的配置開始,介紹了 Kubernetes Scheduler 框架、擴展點、API 以及可能發生的與資源相關的瓶頸,并展示了性能調整設置,涵蓋了 Kubernetes 中調度
    的頭像 發表于 08-23 10:39 ?1449次閱讀

    Kubernetes組件pod核心原理

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

    Kubernetes中的Pod簡易理解

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

    Kubernetes Pod如何獨立工作

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

    Kubernetes Pod如何獲取IP地址呢?

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

    redis容器內怎么查看redis日志

    redis是一款流行的開源內存數據庫,常用于緩存、消息隊列、任務管理等場景。在使用redis時,了解如何查看redis日志對于排查問題、監控性能和分析應用程序行為非常重要。在本文中,我們將介紹在
    的頭像 發表于 12-05 10:10 ?3847次閱讀
    百家乐官网庄闲的几率| 百家乐稳赚秘籍| 太阳城网络博彩| 马牌百家乐娱乐城| 宿州市| 免费百家乐计划工具| 做生意适合摆放龙龟吗| 百家乐官网八卦投注法| 博彩e族777| 去澳门百家乐的玩法技巧和规则| 国际娱百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城演唱会| 天地人百家乐现金网| 百家乐官网筹码方形筹码| 六合彩特码开奖结果| 真人百家乐最高赌注| 澳门百家乐文章| 24山 分金 水口 论 吉凶| 现场百家乐官网玩法| 百家乐官网的关键技巧| 最新娱乐城送彩金| 威尼斯人娱乐城信誉最好| 百家乐游戏研发| 真人百家乐官网体验金| 百家乐官网游戏网上投注| 优博百家乐官网现金网平台| 福泉市| 香港六合彩85期开奖结果| 威尼斯人娱乐城会员注册| 澳门百家乐网上赌博| 鲨鱼百家乐游戏平台| 注册百家乐送彩金 | 视频百家乐官网是真是假| 百家乐官网怎样捉住长开| 百家乐官网风云论坛| 百家乐官网出千技巧| 南陵县| 百家乐官网五局八星| 百家乐官网冯氏坐庄法| 百家乐官网冯氏坐庄法| 网上百家乐官网注册彩金|