1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4866字,需瀏覽 10分鐘

         ·

        2021-06-08 17:25

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

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

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

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

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

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

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

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

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

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

        如何檢測(cè)未充分利用的資源

        CPU

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

        檢測(cè)空閑 CPU 資源

        利用給出的container_cpu_usage_seconds_total、kube_pod_container_resource_requests參數(shù),可以檢測(cè)到 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 之間沒(méi)有使用內(nèi)核。

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

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

        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 的容器

        正如我們?cè)?PromQL 入門(mén)指南中介紹的那樣,您可以使用該 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)存使用率過(guò)高,則該節(jié)點(diǎn)將在內(nèi)存不足時(shí)開(kāi)始逐出 Pod。但是內(nèi)存也是有限的,因此設(shè)置越好,每個(gè)節(jié)點(diǎn)可以容納的 Pod 就越多。

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

        您可以使用container_memory_usage_bytes、kube_pod_container_resource_requests查看您浪費(fèi)了多少內(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 的成本。

        如何識(shí)別哪些命名空間浪費(fèi)了更多的內(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)存過(guò)大的前 10 個(gè)容器

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

        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))

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

        在 Kubernetes 容量規(guī)劃中,要保留足夠的計(jì)算資源,您需要分析容器的當(dāng)前資源使用情況。為此,您可以使用此 PromQL 查詢來(lái)計(jì)算屬于同一工作負(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"}))

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

        如何衡量?jī)?yōu)化的影響

        在執(zhí)行了一些 Kubernetes 容量規(guī)劃操作之后,您需要檢查更改對(duì)基礎(chǔ)架構(gòu)的影響。為此,您可以將未充分利用的 CPU 內(nèi)核現(xiàn)在與一周前的值進(jìn)行比較,以評(píng)估優(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)在您知道了貪婪的開(kāi)發(fā)者的后果以及如何檢測(cè)平臺(tái)資源的過(guò)度分配。此外,您還學(xué)習(xí)了如何對(duì)容器的請(qǐng)求進(jìn)行容量設(shè)置以及如何衡量?jī)?yōu)化的影響。

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

        更多文檔請(qǐng)參考 [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)存不足的錯(cuò)誤: https://sysdig.com/blog/troubleshoot-kubernetes-oom/


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

        瀏覽 75
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            人人妻人人澡人人爽人人D | 激情婷婷丁香五月 | 极品久久久 | 风间由美无码 | 小黄片免费看 | 国产精品久久久久久久久久软件 | 搡老女人老91妇女老熟女 | 家熟女视频免费 | 亚洲国产成人精品激情在线 | 亚洲淫荡蜜穴 |