現在的位置: 首頁 > 雲計算 > 正文

怎樣檢查Kubernetes集群健康狀

2020年04月26日 雲計算 ⁄ 共 2908字 ⁄ 字型大小 評論關閉

  Kubernetes是一種非常智能的技術,但如果操作不當反而弄巧成拙。正如大多數智能化技術一樣,它的智能程度取決於操作者。為了建立成功的Kubernetes團隊,了解Kubernetes的健康狀況至關重要。這裡有五種方法,可以讓工程師很好的識別出集群的潛在健康風險。下面學步園小編來講解下怎樣檢查Kubernetes集群健康狀況?

  怎樣檢查Kubernetes集群健康狀況

  幸運的是,有一些現成的技術可以用來收集Kubernetes集群的日誌、各種指標數據、事件和安全威脅,以幫助監視集群的健康狀況。這些收集器從Kubernetes集群的各個部分收集數據,然後對數據進行整合,從而生成可視化的高級視圖,並實時了解資源利用率,發現錯誤的配置和其他問題。

  在Kubernetes集群中,Pod的調度機制依賴於requests和limits這兩個參數。我們可以為CPU和內存設置requests和limits。對於CPU,它的單位是millicores,1000m等於一個CPU核。requests是你認為容器至少需要多少CPU和內存,而limits則是允許容器使用的實際上限。

  確保為所有的Pod設置了CPUrequests。最佳實踐是將其設置為一個CPU核或更少,如果需要更多的計算能力,則添加額外的Pod副本。需要注意的是,如果你的CPUrequests過高,比如2000m,但是你只有1個CPU核可用,那麼這個Pod將永遠不會被調度到Kubernetes集群中。在第5點中,我將向你展示如何檢查未被調度的Pod。

  確保為所有的Pod設置了CPUlimits。如上所述,這個參數限制了Pod使用CPU的上限,因此Kubernetes將不允許Pod使用比limits中定義的更多的CPU。也就是說,CPU是比較寬容的,因為它被認為是一種可壓縮資源。如果你的Pod達到了CPUlimits,它不會被終止,而是被節流,因此可能會出現性能下降。

  確保為所有的Pod設置了memoryrequests:memoryrequests是你認為容器至少需要多少內存。像CPU一樣,如果Pod的memoryrequests大於集群可以提供的內存,Kubernetes不會將Pod調度到Kubernetes集群中。

  怎樣檢查Kubernetes集群健康狀況

  確保為所有的Pod設置了memorylimits:memorylimit是允許Pod使用內存的上限。與CPU不同,內存是不可壓縮的,也不能進行節流。如果容器超過了它的內存限制,那麼它將被終止。

  審計資源配置

  檢查Kubernetes是否有不足或過剩的資源。如果Kubernetes集群中有剩餘的可用CPU和內存,那麼集群就處於消耗狀態,並且消耗可能會持續增長。另一方面,如果CPU和內存的利用率接近100%,那麼當集群需要水平擴展或有大量請求到來時,集群可能會遇到問題。

  檢查Pod的剩餘容量,在Kubernetes中有一個指標數據「kube_node_status_allocatable」,這是Kubernetes在給定平均Pod資源利用率的情況下,對一個節點能容納多少個Pod的估計。我們可以把剩餘的Pod容量加起來,粗略地估計一下我們能在不遇到問題的情況下,集群還能擴大多少。

  檢查CPU總百分比使用率,CPUrequests百分比使用率,CPUlimits百分比使用率:CPU總百分比使用率可以告訴你現在使用了多少。CPUrequests百分比使用率可以告訴你應該需要多少。CPUlimits百分比使用率限制了你可以使用多少。

  在下面的例子中,我們只使用了可用計算能力的2.5%。我們的剩餘資源過多。相比之下,我們定義的CPUrequests是46%,所以我們認為Pod需要的比Pod實際使用的多得多。我們的預估不夠準確。

  最後,我們的CPUlimits總和是37%。由於這低於我們的CPUrequests,這是一個錯誤的配置,我們需要重新檢查我們的CPUlimits。

  檢查內存的百分比使用率、memoryrequests百分比使用率,memorylimits百分比使用率。就像CPU一樣,查看是否有過多的剩餘資源。只有3.8%的使用率告訴我們,我們確實資源過剩,但我們可以安全的進行水平擴展。

  檢查節點間的Pod分布

  當我們查看Pod在集群中的分布情況時,我們希望得到一個大致均勻的分布。如果某些節點完全超載或負載不足,這可能是一個值得深入研究的問題。

  以下是可能導致分布不均勻的一些事項:

  Nodeaffinity,親和性是一種Pod設置,它使Pod更喜歡具有某些屬性的節點。例如,Pod可能需要在附加了GPU或SSD的節點上運行,或者Pod可能需要具有特定安全隔離或策略的節點。檢查親和性設置可以幫助分析不均勻分布的原因,並減少可能出現的問題。

  Taintsandtolerations,污點是親和性的反義詞。Pod不太喜歡被分配到這些被「污染」的節點上。如果你希望為特定的Pod保留節點,或者確保該節點上的Pod可以完全訪問可用資源,那麼可以使用此方法。

  Limitsandrequests,查看limit和request的設置。這常常是Pod分布不均勻的原因,因此值得在本節的三個部分中提及。如果Kubernetes調度程序沒有Pod需要什麼的正確信息,那麼調度程序在調度方面就會做得很差。

  檢查Pod是否處於不良狀態

  在Kubernetes環境中,Pod的狀態時刻在變化,所以過度關注每一個被終止的Pod將會慢慢吞噬你的時間和理智。但是,下面的列表值得你關注,以確保達到期望的集群狀態。

  Nodesnotready:節點可能由許多原因而陷入這種狀態,但通常是因為內存或磁碟空間不足。

  Unscheduledpods:Pod通常以未調度狀態結束,由於調度程序無法滿足Pod所需要的CPU或內存請求。檢查集群是否擁有足夠的可用資源。

  Podsthatfailedtocreate:Pod在創建時失敗,這通常是由於在Pod的啟動腳本中缺少某些依賴項之類的鏡像導致的。在這種情況下,回到起點,反覆檢查Pod的各種參數配置。

  Containerrestarts:一些容器重新啟動不值得關注,但是看到很多這樣的情況,可能意味著Pod處於OOMKill(內存耗盡)狀態。內存不足是Kubernetes集群中最常見的錯誤之一,可能是由鏡像問題、下游依賴項問題或各種意外、限制和請求問題引起的。

  這些集群健康最佳實踐可以限制Kubernetes集群出現意外情況,並確保集群在擴展時不會遇到問題。還為你提供了一個很好的起點,以幫助你回答那些無定形的問題,如「我的Kubernetes集群是否健康?」如果所有這些檢查點都是綠色的,那麼你的集群可能處於健康狀態,你可以高枕無憂了。

  以上就是關於「怎樣檢查Kubernetes集群健康狀」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!

抱歉!評論已關閉.