溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes Resource監(jiān)控怎么實現(xiàn)

發(fā)布時間:2021-12-17 10:34:20 來源:億速云 閱讀:106 作者:iii 欄目:云計算

本篇內(nèi)容介紹了“Kubernetes Resource監(jiān)控怎么實現(xiàn)”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

WATCH請求剖析

從Python使用Kubernetes API,如果使用Request庫的話,就十分輕松。API運行得十分好,總是使用并且返回JSON消息。但是發(fā)行watch請求就變得復雜多了。發(fā)一個watch請求理論上有兩種方法:一個是用流傳輸結(jié)果的普通HTTP請求,同時使用分塊編碼;另一種方法是使用websockets。不幸的是,當測試Kubernetes1.1 master的時候,并沒有正確地使用websocket協(xié)議,所以使用流傳輸結(jié)果才是正確的方法。

當使用分塊編碼流傳輸?shù)臅r候,Kubernetes master會通過發(fā)送分塊的尺寸開始傳輸分塊。但是它不會發(fā)送一整個分塊,它只會發(fā)送一行文本,再被一行新的文本終止。這行文本是JSON編碼對象,里面還有event以及修改過的resource項目。所以協(xié)議是基于行的,而分塊編碼只是當結(jié)果可得的時候一個用來分流這些結(jié)果的方法。從表面上看用請求來做這個似乎不那么難:

Kubernetes Resource監(jiān)控怎么實現(xiàn)

然而iter_lines方法并沒有按照你想要的方向來做,它保有一個外部緩沖,這個緩沖意味著你永遠都看不到最后一個event因為你還在等著填滿那個緩沖。

這個問題的提出意味著通過實施你自己的iter_lines()函數(shù)來使用原套socket,從回應(yīng)socket到讀取socket。很不幸,那個簡單的方法犯了一些錯誤。首先,它沒有正確地處理分塊編碼,描述分塊大小的八位元數(shù)會出現(xiàn)在輸出過程。但是更加重要的是,另一個緩沖層次正在繼續(xù),一個你不能進行應(yīng)急操作的緩沖層次。額外的緩沖是因為請求使用的是原始套接字的生成文件方法從中讀取數(shù)據(jù)。這對于Requests來說就講得通了,Python標準庫和OS都擅長通過緩沖加速。然而這并不意味著在Requests解析了響應(yīng)的標頭后,緩沖就已經(jīng)不知道使用了響應(yīng)本身多大的字節(jié),而且這些字節(jié)無法檢索。所以使用Requests來使用watch API基本上不太可能。

手動進行HTTP

所以如何從Python使用watch API?通過自己發(fā)出請求和處理響應(yīng)。這個做起來其實很簡單,socket編程其實沒那么嚇人。首先,你需要連接socket到服務(wù)器,然后發(fā)送HTTP request。HTTP非常簡單,你只需要在socket上發(fā)送一些標頭即可:

Kubernetes Resource監(jiān)控怎么實現(xiàn)

注意,Host標頭被Kubernetes master要求用來接受request。

解析HTTP響應(yīng)稍微有點復雜。然而http-parser庫實施HTTP解析方面的東西的時候,沒有涉及到sockets或者任何類似于網(wǎng)絡(luò)的東西。所以我們可以輕松地讀取和解析響應(yīng):

Kubernetes Resource監(jiān)控怎么實現(xiàn)

現(xiàn)在我們來響應(yīng)已經(jīng)被解析的標頭。很可能,一些本體數(shù)據(jù)已經(jīng)接收到了,這很棒,這些本體數(shù)據(jù)在解析器中仍處于緩沖好的的狀態(tài),直到我們檢索它。但是首先讓我們來保持讀取數(shù)據(jù),直到?jīng)]有剩下的為止(不要在生產(chǎn)過程中這么做,對你的存儲系統(tǒng)不好)。

Kubernetes Resource監(jiān)控怎么實現(xiàn)

上圖展示了如何使用select在數(shù)據(jù)可得的時候只讀數(shù)據(jù),而不是先阻斷,然后使數(shù)據(jù)再次可讀。當然,一旦使用了所有的數(shù)據(jù),Kubernetes master 可能就會發(fā)送下一版本更新到PodList,但是讓我們現(xiàn)在先來讀一下接收到的events:

Kubernetes Resource監(jiān)控怎么實現(xiàn)

就是它!如果數(shù)據(jù)接收截至在換行符,然后lines.split() 調(diào)用會回到一個空的字符串(b'')作為最后一個項目。如果數(shù)據(jù)沒有在一個新的換行符那里結(jié)束,那么一個未完成的event會被接收,這樣當我們獲得其它數(shù)據(jù)的時候我們就需要保存下來。

“Kubernetes Resource監(jiān)控怎么實現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI