k8s節(jié)點日志虏等,鏡像磁盤爆滿,記一次解決方案

背景

項目使用敏捷開發(fā)抛虏,jenkins負責持續(xù)集成博其,構(gòu)建新鏡像push到harbor套才,最后k8s節(jié)點從harbor倉庫拉取新鏡像更新集群迂猴。

暴露的問題

jenkins

githup上的項目代碼一更新,觸發(fā)webhook,jenkins開始構(gòu)建項目的新鏡像,長此以往背伴,jenkins節(jié)點本地無用的鏡像會越來越多沸毁,占用磁盤空間也會越來越大峰髓。

harbor

jenkins構(gòu)建的新鏡像會push到harbor倉庫,長此以往息尺,harbor節(jié)點本地無用的鏡像就會越來越多携兵,占用的磁盤空間也就越來越大延赌。

k8s

  • 每次更新k8s徊都,將要從harbor倉庫pull新的鏡像到worker節(jié)點本地,隨著頻繁更新宽档,worker節(jié)點的無用鏡像也會越來越多
  • k8s運行著多個docker炭懊,docker會產(chǎn)生日志并级,日志也是占用磁盤主要渠道。docker日志分為倆種侮腹,一種為容器的本身的標準輸出日志嘲碧,另一種是容器內(nèi)部卷形式的文件日志,隨著docker的運行父阻,日志也會慢慢變大愈涩,占用磁盤空間的很大部分。

解決方案

jenkins

我們知道jenkins屬于pipeline,我們的目的是想刪除jenkins節(jié)點的無用鏡像加矛,我們只要在pipeline里加一段stage即可履婉。

harbor

harbor就更簡單了,有tag保留策略斟览。


image.png

k8s

偶爾看到這篇文章記一次k8s集群節(jié)點鏡像存儲容量報警問題谐鼎,很有感觸,其實也是每個人應(yīng)該思考的趣惠。

自從我們的kubernetes集群部署到生產(chǎn)環(huán)境后狸棍,將流量從原有的服務(wù)器上切過來之后,部分節(jié)點出現(xiàn)掛載目錄容量爆滿的情況味悄。

運維的同事報給我們之后草戈,我們首先想到的是節(jié)點鏡像過多,于是我們提供一個命令用于清理當前節(jié)點上無用的侍瑟、報錯的唐片、鏡像和docker資源文件

docker system prune 命令可以用于清理磁盤,刪除關(guān)閉的容器涨颜、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)费韭,以及dangling鏡像(即無tag的鏡像)

docker system prune -a 命令清理得更加徹底,可以將沒有容器使用Docker鏡像都刪掉庭瑰。

待運維執(zhí)行之后星持,目錄存儲資源釋放了一些,我們本以為這就告一段落了弹灭。然而督暂,事與愿違揪垄,沒過多久,再次容量報警逻翁。饥努。。

我們開始重視起來八回,開始檢視節(jié)點上工作的容器酷愧,發(fā)現(xiàn)在日志爆炸的節(jié)點上運行了定時任務(wù),開發(fā)人員將定時任務(wù)的日志輸出到控制臺缠诅,于是我們回到節(jié)點docker的工作目錄伟墙,通過du -sh *方式查看每個文件夾大小,發(fā)現(xiàn)docker目錄下containers目錄占用空間巨大滴铅,進去看原來是每個運行的容器存放日志的目錄戳葵,我們找出占用空間最大的日志目錄,發(fā)現(xiàn)容器日志特別的大

我們可使用如下命令查看各個日志的文件大小

ls -lh $(find /var/lib/docker/containers/ -name *-json.log)

那我們?nèi)绾吻謇砣罩灸睾撼祝绻鹍ocker容器正在運行拱烁,那么使用rm -rf 方式刪除日志后,通過df -h會發(fā)現(xiàn)磁盤空間并沒有釋放

原因:在Linux或者Unix系統(tǒng)中噩翠,通過rm或者文件管理器刪除文件將會從文件系統(tǒng)的目錄結(jié)構(gòu)上解除鏈接(unlink).然而如果文件是被打開的(有一個進程正在使用)戏自,那么進程將仍然可以讀取該文件,磁盤空間也一直被占用

我們通過cat /dev/null > *-json.log來清理相應(yīng)的日志伤锚,然后重啟

systemctl daemon-reload

systemctl restart docker

然而擅笔,我思考,不能每次滿的時候找運維清理日志啊屯援,這多麻煩猛们,難道docker沒有相應(yīng)的機制應(yīng)付輸出到控制臺的日志嗎?答案是:當然不會

在新版的docker中我們可以通過設(shè)置vim /etc/docker/daemon.json 來限制docker的日志量

"log-driver":"json-file","log-opts":{ "max-size" :"200m","max-file":"5"}

顧名思義max-size就是每個日志文件大小狞洋,max-file是最多生成的文件數(shù)弯淘,如上我設(shè)置成功后,每個容器運行的日志最多有五份每份200M大小吉懊,這樣就基本限制了容器的日志大小庐橙。

然后你覺得結(jié)束了嗎?借嗽?并不L睢!

容器日志我們是限制完了恶导,本以為高枕無憂浆竭,不用擔心出現(xiàn)日志爆滿的情況了,但是事與愿違,過幾天硬盤容量又滿了兆蕉。羽戒。缤沦。

我們究其原因虎韵,發(fā)現(xiàn)在docker的運行目錄下overlay這個文件夾里存放著所有的容器掛載目錄,也就是容器的系統(tǒng)文件在這里放著缸废,在容器中跑著的服務(wù)產(chǎn)生日志很可能并不是輸出到控制臺包蓝,而是保存到本地,容器內(nèi)的日志文件也是會占用磁盤空間的企量,這就讓我們犯愁了测萎,這個不好限制開發(fā)團隊不存日志或者規(guī)定團隊存放目錄啊,對于一個成熟的容器平臺來說届巩,海納百川那是必須的~



下面我來總結(jié)以下:

docker日志分為倆種硅瞧,一種是容器的標準輸出日志,也就是docker啟動后控制臺輸出的日志恕汇,另一種是容器內(nèi)的文件日志腕唧,通常是我們項目通過卷的形式掛載到宿主機上的。

k8s中卷volume支持很多形式瘾英,常見的如下

  • emptyDir
  • hostPath
  • nfs
  • glusterfs

還支持很多很多類型枣接,如果掛載日志的方式volume選擇emptyDir,則是直接在pod所在node上存放相關(guān)日志,只要pod一直運行在該node上缺谴,emptyDir就會一直在但惶。如果pod遷移到別的pod或者node宕機,日志都會消失湿蛔,所以一般存儲日志不會選擇該方式膀曾。

hostPath方式是 允許Node上的文件系統(tǒng)掛載到pod里去,如果pod里需要node上的文件阳啥,可以使用該種方式妓肢。比如pod需要node節(jié)點上的docker命令,kubectl命令等苫纤。該種方式如果pod遷移或者node宕機日志也會消失碉钠,所以也推薦使用該方式。

nfs和glusterfs這些文件存儲系統(tǒng)卷拘, 看到的效果是把pod內(nèi)的日志存儲到他們自己的文件存儲系統(tǒng)內(nèi)喊废,但本質(zhì)是pod內(nèi)的日志以emptyDir的方式先存儲到node節(jié)點的某個目錄上,然后nfs和glusterfs到node的這些文件目錄中copy日志到自己文件存儲系統(tǒng)中栗弟。

說這么多污筷,想要表達的意思就是不管你以哪種方式在存儲日志,k8s的worker節(jié)點都存在日志爆滿的風險。

針對這個問題瓣蛀,我們可以查看我的另一篇文章http://www.reibang.com/p/a06d79334426陆蟆,有詳細解釋k8s的驅(qū)逐策略。

我們需要注意
kubelet 只支持兩種文件系統(tǒng)分區(qū)惋增。

nodefs 文件系統(tǒng)叠殷,kubelet 將其用于卷和守護程序日志等。
imagefs 文件系統(tǒng)诈皿,容器運行時用于保存鏡像和容器可寫層林束。

針對這倆種文件系統(tǒng),k8s有4種相關(guān)的驅(qū)逐信號

驅(qū)逐信號 描述
nodefs.available node.stats.fs.available
nodefs.inodesFree node.stats.fs.inodesFree
imagefs.available node.stats.runtime.imagefs.available
imagefs.inodesFree node.stats.runtime.imagefs.inodesFree

也就是說你的驅(qū)逐信號中如果包含nodefs相關(guān)的稽亏,觸發(fā)閥值后kubelet會刪除卷和守護程序日志壶冒,本質(zhì)就是驅(qū)逐pod了。刪除卷就是項目內(nèi)的文件日志截歉,刪除守護程序日志就是容器的標準日志胖腾。

驅(qū)逐信號中如果包含imagefs相關(guān)的,觸發(fā)閥值后kubelet會刪除沒有使用的鏡像瘪松。

到此咸作,已經(jīng)知道了k8s節(jié)點因鏡像或者日志占用磁盤空間占用過大的解決方案。


執(zhí)行vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

在里面插入

Environment="KUBELET_OTHER_ARGS=

--eviction-hard=memory.available<2Gi,nodefs.available<5Gi,imagefs.available<5Gi

--eviction-minimum-reclaim=memory.available=500Mi,nodefs.available=5Gi,imagefs.available=5Gi

--node-status-update-frequency=10s

--eviction-pressure-transition-period=30s"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凉逛,一起剝皮案震驚了整個濱河市性宏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌状飞,老刑警劉巖毫胜,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诬辈,居然都是意外死亡酵使,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門焙糟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來口渔,“玉大人,你說我怎么就攤上這事穿撮∪甭觯” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵悦穿,是天一觀的道長攻礼。 經(jīng)常有香客問我,道長栗柒,這世上最難降的妖魔是什么礁扮? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上太伊,老公的妹妹穿的比我還像新娘雇锡。我一直安慰自己,他們只是感情好僚焦,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布锰提。 她就那樣靜靜地躺著,像睡著了一般叠赐。 火紅的嫁衣襯著肌膚如雪欲账。 梳的紋絲不亂的頭發(fā)上屡江,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天芭概,我揣著相機與錄音,去河邊找鬼惩嘉。 笑死罢洲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的文黎。 我是一名探鬼主播惹苗,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耸峭!你這毒婦竟也來了桩蓉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤劳闹,失蹤者是張志新(化名)和其女友劉穎院究,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體本涕,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡业汰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菩颖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片样漆。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晦闰,靈堂內(nèi)的尸體忽然破棺而出放祟,到底是詐尸還是另有隱情,我是刑警寧澤呻右,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布跪妥,位于F島的核電站,受9級特大地震影響窿冯,放射性物質(zhì)發(fā)生泄漏骗奖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望执桌。 院中可真熱鬧鄙皇,春花似錦、人聲如沸仰挣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膘壶。三九已至错蝴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颓芭,已是汗流浹背顷锰。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亡问,地道東北人官紫。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像州藕,于是被迫代替她去往敵國和親束世。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

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

  • 摘要:今天,日志服務(wù)再次升級Kubernetes(k8s)的日志解決方案锈死。1分鐘內(nèi)即可完成整個集群部署贫堰,支持動態(tài)擴...
    暖夏未眠丶閱讀 1,202評論 0 2
  • 現(xiàn)象 k8s無法正常調(diào)度, pod不是被驅(qū)逐,就是一直creating. 排查過程 df -h 查看各節(jié)點, 發(fā)現(xiàn)...
    小笨郎閱讀 1,074評論 0 0
  • 久違的晴天,家長會馅精。 家長大會開好到教室時严嗜,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗洲敢。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,513評論 16 22
  • 今天感恩節(jié)哎漫玄,感謝一直在我身邊的親朋好友。感恩相遇压彭!感恩不離不棄睦优。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,559評論 0 11
  • 可愛進取壮不,孤獨成精汗盘。努力飛翔,天堂翱翔询一。戰(zhàn)爭美好隐孽,孤獨進取癌椿。膽大飛翔,成就輝煌菱阵。努力進取踢俄,遙望,和諧家園晴及《及欤可愛游走...
    趙原野閱讀 2,723評論 1 1