<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kubernetes容量規(guī)劃 | 如何調(diào)整集群的資源占用

          共 4866字,需瀏覽 10分鐘

           ·

          2021-06-08 17:25

          關(guān)注「開源Linux」,選擇“設(shè)為星標(biāo)”
          回復(fù)「學(xué)習(xí)」,有我為您特別篩選的學(xué)習(xí)資料

          Kubernetes 容量規(guī)劃是基礎(chǔ)架構(gòu)工程師必須面對的主要挑戰(zhàn)之一,因為了解 Kubernetes 的資源要求和限制并非易事。

          您可能預(yù)留了更多的資源,以確保容器不會用完內(nèi)存或受到 CPU 限制。如果您處于這種情況,那么即使不使用這些資源,也要向云廠商付費,這也將使調(diào)度變得更加困難。這就是為什么 Kubernetes 容量規(guī)劃始終是集群的穩(wěn)定性和可靠性與正確使用資源之間的平衡。

          在本文中,您將學(xué)習(xí)如何識別未使用的資源以及如何合理分配群集的容量。

          不要成為貪婪的開發(fā)者

          在某些情況下,容器需要的資源超出了限制。如果只是一個容器,它可能不會對您的賬戶產(chǎn)生重大影響。但是,如果所有容器中都發(fā)生這種情況,則在大型群集中將產(chǎn)生幾筆額外費用。

          更不用說 Pod 占用資源太大,這可能需要你會花費更多的精力來發(fā)現(xiàn)占用資源過多的問題。畢竟,對于 Kubernetes 來說,占用資源過多的 Pod 調(diào)度起來相對困難。

          介紹兩個開源工具來幫助您進(jìn)行 Kubernetes 的容量規(guī)劃:

          • kube-state-metrics:一個附加代理,用于生成和公開集群級別的指標(biāo)。
          • CAdvisor:容器的資源使用分析器。

          通過在群集中運行這些工具,您將能夠避免資源利用不足并調(diào)整群集資源占用的大小。

          如何檢測未充分利用的資源

          CPU

          CPU 資源占用是最難調(diào)整的閾值之一,如果調(diào)整的太小可能限制服務(wù)的計算能力,如果調(diào)整的太大又會造成該節(jié)點多數(shù)計算資源處于空閑狀態(tài)。

          檢測空閑 CPU 資源

          利用給出的container_cpu_usage_seconds_total、kube_pod_container_resource_requests參數(shù),可以檢測到 CPU 核心利用情況。

          sum((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m]) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"})) * -1 >0)

          在上面的示例中,您可以看到在~7.10 和~7.85 之間沒有使用內(nèi)核。

          如何識別那些命名空間浪費了更多的 CPU 內(nèi)核

          通過使用 PromQL 按名稱空間匯總過去的查詢,您可以獲得更細(xì)粒度的使用情況。通過這些信息,使您能夠向超大命名空間而且不充分利用資源的部門算賬。

          sum by (namespace)((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m]) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"})) * -1 >0)

          查找 CPU 占用前 10 的容器

          正如我們在 PromQL 入門指南中介紹的那樣,您可以使用該 topk 函數(shù)輕松獲取 PromQL 查詢的最佳結(jié)果。像這樣:

          topk(10,sum by (namespace,pod,container)((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m]) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"})) * -1 >0))

          內(nèi)存

          正確進(jìn)行內(nèi)存規(guī)劃至關(guān)重要。如果您內(nèi)存使用率過高,則該節(jié)點將在內(nèi)存不足時開始逐出 Pod。但是內(nèi)存也是有限的,因此設(shè)置越好,每個節(jié)點可以容納的 Pod 就越多。

          檢測未使用的內(nèi)存

          您可以使用container_memory_usage_bytes、kube_pod_container_resource_requests查看您浪費了多少內(nèi)存。

          sum((container_memory_usage_bytes{container!="POD",container!=""} - on (namespace,pod,container) avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="memory"})) * -1 >0 ) / (1024*1024*1024)

          在上面的示例中,您可以看到可以為該集群節(jié)省 0.8gb 的成本。

          如何識別哪些命名空間浪費了更多的內(nèi)存

          就像我們使用 CPU 一樣,我們可以按命名空間進(jìn)行聚合。

          sum by (namespace)((container_memory_usage_bytes{container!="POD",container!=""} - on (namespace,pod,container) avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="memory"})) * -1 >0 ) / (1024*1024*1024)

          查找內(nèi)存過大的前 10 個容器

          同樣,使用該 topk 函數(shù),我們可以確定在每個命名空間內(nèi)浪費更多內(nèi)存的前 10 個容器。

          topk(10,sum by (namespace,pod,container)((container_memory_usage_bytes{container!="POD",container!=""} - on (namespace,pod,container) avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="memory"})) * -1 >0 ) / (1024*1024*1024))

          如何對容器的資源利用進(jìn)行優(yōu)化

          在 Kubernetes 容量規(guī)劃中,要保留足夠的計算資源,您需要分析容器的當(dāng)前資源使用情況。為此,您可以使用此 PromQL 查詢來計算屬于同一工作負(fù)載的所有容器的平均 CPU 利用率。將工作負(fù)載理解為Deployment、StatefulSet、DaemonSet

          avg by (namespace,owner_name,container)((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[5m])) * on(namespace,pod) group_left(owner_name) avg by (namespace,pod,owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))

          在上圖中,您可以看到每個容器的平均 CPU 利用率。根據(jù)經(jīng)驗,可以將容器的 Request 設(shè)置為 CPU 或內(nèi)存平均使用率的 85%到 115%之間的值。

          如何衡量優(yōu)化的影響

          在執(zhí)行了一些 Kubernetes 容量規(guī)劃操作之后,您需要檢查更改對基礎(chǔ)架構(gòu)的影響。為此,您可以將未充分利用的 CPU 內(nèi)核現(xiàn)在與一周前的值進(jìn)行比較,以評估優(yōu)化后的影響。

          sum((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m]) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"})) * -1 >0) - sum((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[30m] offset 1w) - on (namespace,pod,container) group_left avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="cpu"} offset 1w )) * -1 >0)

          在上圖中,您可以看到優(yōu)化之后,集群中未使用的 CPU 更少了。

          總結(jié)

          現(xiàn)在您知道了貪婪的開發(fā)者的后果以及如何檢測平臺資源的過度分配。此外,您還學(xué)習(xí)了如何對容器的請求進(jìn)行容量設(shè)置以及如何衡量優(yōu)化的影響。

          這些技巧應(yīng)該是構(gòu)建全面的 Kubernetes 容量規(guī)劃儀表板的良好起點,并獲得包含優(yōu)化平臺資源所需的單一面板。

          更多文檔請參考 [1][2][3][4]

          參考資料

          [1]

          度量工具: https://github.com/kubernetes/kube-state-metrics

          [2]

          度量工具: https://github.com/google/cadvisor

          [3]

          PromQL: https://sysdig.com/blog/getting-started-with-promql-cheatsheet/

          [4]

          內(nèi)存不足的錯誤: https://sysdig.com/blog/troubleshoot-kubernetes-oom/


          關(guān)注「開源Linux」加星標(biāo),提升IT技能

          瀏覽 75
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美 XXXX | 三级视频网址 | 伊人大香蕉视频网站 | 国产精品美女操逼 | 天天草天天射 |