漫談容器的監控
序言
很多事情說起來容易,做起來卻很難,開始的時候就已經經歷了各種選擇,而開始才是一個真正開始。
監控系統需要監控很多資源,主要需要監控什麽,為什麽需要監控?
監控
打開腦洞,那是個無底洞,那是記憶的深淵,是否能改變或者是否是在準備?
docker的監控系統,有好幾種監控方案,重在合適,prometheus作為一種集各種功能於一身的獲取數據,存儲數據,展示數據,告警功能於一身,這種一套完備的監控方案。
而對於weave scope來說,也是一種分布式的監控容器,最大的亮點在於在界面上能直接進入shell執行界面,就像登錄了主機一樣執行各種命令。
在docker中,其實本身就自帶了監控的命令,只不過一般不會用來跨主機執行,從而這種是主要用來登錄host主機,直接執行docker命令來查看所有容器的容器的方法。
在以上的命令中ls主要用來查看運行狀態的容器,而對於其他狀態的容器,可以使用參數,和linux命令是一樣;而top主要是用來查看進程的信息,其實這個和linux命令的top略微有所區別,和命令ps的命令一樣的,但是ps被ls以前的功能所占用;而stats主要是用來查看容器的性能數據,包括使用的內存,cpu,網絡IO,塊IO,進程號,那麽如何來設置這些數據呢?
設置相關資源限定,也就是幾個參數來限制,如上,主要設置了內存使用的大小為200M,使用swap空間大小為200M,CPU使用的權重為512,默認為1024,也可以設置cpu使用的顆數,然後設置了磁盤的讀的速度。
為什麽需要設置資源限定?
為什麽需要設置資源限定?我有一臺物理主機,CPU56顆,內存256G,帶寬萬M網卡,能跑多少個容器?
資源限定?在一個集群中,有多少臺物理機器組成,能給客戶使用多少內存,多少CPU,多少存儲,多少網絡。
在VM的時代,創建VM的時候,也要進行規劃,一臺主機上最多可以創建幾個VM,分配多少的計算,存儲和網絡資源。
再是工作的時候,公司給你開多少一個月?有多少預算,資金鏈上有多少錢?
對整個集群中資源進行劃分了後,那麽就要涉及到調度,在哪個host上創建這個容器,在哪個vm上創建這個容器,這就是所謂的規劃。。
容器如何做資源限定
容器來進行資源的限定和資源隔離呢?
在linux上怎麽來進行資源的隔離?chroot,使用不同的文件系統來隔離用戶,隔離用戶的權限,容器也不例外,使用的是namespace來進行隔離,各種各樣的命令空間,在各種編程語言中也是可以看到。
在容器的資源隔離的時候,主要使用了6種:
UTS:主要用來設定容器的主機名稱和域名,主要的作用是讓容器在網絡上成為一個單獨的節點,而不是宿主機上的一個進程。unix time-sharing system。。分時系統。。ntp?還是cpu的時間片呢?
IPC:進程間通信,有獨立的通信空間,在一個namespace中的進程可以相互通信。inter process communication。
PID:進程隔離,和宿主機上進程進行隔離。
network:網絡隔離,有獨立的網絡棧,有獨立的端口,網絡設備,這也就是為什麽每次創建一個容器網絡的時候,會有一些橋接設備,host模型的網絡使用。
user:用戶隔離,主機上的用戶和容器中的用戶會有一層映射關系,但是不會相互影響。
mount:掛載的文件系統,主要使用文件系統的隔離,可以理解為chroot的一種實現方式。。。再想想容器的文件系統組成,unfs,聯合文件系統,容器的讀寫層,改變了容器的內容,不會影響使用相同鏡像的容器。
而資源的限制則是使用cgroup來進行控制的。在相關的目錄中可以找到,如下:
而這種數據還能在docker inspect nginx中找到,如下:
從而在監控的時候可以使用不同的方式來進行監控。
總結
1、 在監控容器的時候,幾個關鍵指標,容器運行的數量,容器分配的計算(cpu和內存),網絡,存儲資源。
2、 監控的方式多樣,可以使用基本的docker命令來進行監控,也可以直接查看相應目錄下的文件獲取對應的信息。
3、 容器的資源分配,主要涉及到容器的資源分配和規劃,就算是在集群中,底層無需考慮,但是每個容器占用的最大資源需要進行限制,不然可能耗費掉整個集群的計算能力、網絡能力或者存儲能力。
老了,昨天想的事,今天就記不住了。
忘記昨天,擁抱未來,不是更好?
如果忘記了昨天,隨著年齡的增大,我又是什麽?我是誰?我在哪裏?我在做什麽?
如果我的昨天不能提升我的閱歷,我的境界,我的道,我昨天有什麽意義?
漫談容器的監控