色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一圖解析K8S OOM和CPU節流

馬哥Linux運維 ? 來源:sysdig ? 2023-02-15 17:17 ? 次閱讀

介紹

使用 Kubernetes 時,內存不足 (OOM) 錯誤和 CPU 節流是云應用程序中資源處理的主要難題。

這是為什么?

云應用程序中的 CPU 和內存要求變得越來越重要,因為它們與您的云成本直接相關。

通過 limits 和 requests ,您可以配置 pod 應如何分配內存和 CPU 資源,以防止資源匱乏并調整云成本。

如果節點沒有足夠的資源, Pod 可能會通過搶占或節點壓力被驅當一個進程運行內存不足 (OOM) 時,它會被終止,因為它沒有所需的資源。

如果 CPU 消耗高于實際限制,進程將開始節流。

但是,如何主動監控 Kubernetes Pod 到達 OOM 和 CPU 節流的距離有多近?

Kubernetes OOM

Pod 中的每個容器都需要內存才能運行。

Kubernetes limits 是在 Pod 定義或 Deployment 定義中為每個容器設置的。

所有現代 Unix 系統都有一種方法來終止進程,以防它們需要回收內存。這將被標記為錯誤 137 或OOMKilled.

State:Running
Started:Thu,10Oct20191113+0200
LastState:Terminated
Reason:OOMKilled
ExitCode:137
Started:Thu,10Oct20191103+0200
Finished:Thu,10Oct20191111+0200

此退出代碼 137 表示該進程使用的內存超過允許的數量,必須終止。

這是 Linux 中存在的一個特性,內核oom_score為系統中運行的進程設置一個值。此外,它允許設置一個名為 oom_score_adj 的值,Kubernetes 使用該值來允許服務質量。它還具有一個 OOM Killer功能,它將審查進程并終止那些使用比他們應該使用上限更多的內存的進程。

請注意,在 Kubernetes 中,進程可以達到以下任何限制:

在容器上設置的 Kubernetes Limit。

在命名空間上設置的 Kubernetes ResourceQuota。

節點的實際內存大小。

de371d70-aa86-11ed-bfe3-dac502259ad0.png

內存過量使用

Limits 可以高于 requests,因此所有限制的總和可以高于節點容量。這稱為過度使用,這很常見。實際上,如果所有容器使用的內存都比請求的多,它可能會耗盡節點中的內存。這通常會導致一些 pod 被殺死以釋放一些內存。

監控 Kubernetes OOM

在 Prometheus 中使用 node exporter 時,有一個指標稱為node_vmstat_oom_kill. 跟蹤 OOM 終止發生的時間很重要,但您可能希望在此類事件發生之前提前了解此類事件。

相反,您可以檢查進程與 Kubernetes 限制的接近程度:

(sumby(namespace,pod,container)
(rate(container_cpu_usage_seconds_total{container!=""}[5m]))/sumby
(namespace,pod,container)
(kube_pod_container_resource_limits{resource="cpu"}))>0.8

Kubernetes CPU 節流

CPU 節流 是一種行為,當進程即將達到某些資源限制時,進程會變慢。

與內存情況類似,這些限制可能是:

在容器上設置的 Kubernetes Limit。

在命名空間上設置的 Kubernetes ResourceQuota。

節點的實際CPU大小。

想想下面的類比。我們有一條有一些交通的高速公路,其中:

CPU 就是路。

車輛代表進程,每個車輛都有不同的大小。

多條通道代表有多個核心。

一個 request 將是一條專用道路,如自行車道。這里的節流表現為交通堵塞:最終,所有進程都會運行,但一切都會變慢。

de476a90-aa86-11ed-bfe3-dac502259ad0.gif

Kubernetes 中的 CPU 進程

CPU 在 Kubernetes 中使用 shares 處理。每個 CPU 核心被分成 1024 份,然后使用 Linux 內核的 cgroups(控制組)功能在所有運行的進程之間分配。

deffc478-aa86-11ed-bfe3-dac502259ad0.png

如果 CPU 可以處理所有當前進程,則不需要任何操作。如果進程使用超過 100% 的 CPU,那么份額就會到位。與任何 Linux Kernel 一樣,Kubernetes 使用 CFS(Completely Fair Scheduler)機制,因此擁有更多份額的進程將獲得更多的 CPU 時間。

與內存不同,Kubernetes 不會因為節流而殺死 Pod。

df11bdea-aa86-11ed-bfe3-dac502259ad0.png

可以在 /sys/fs/cgroup/cpu/cpu.stat 中查看 CPU 統計信息

CPU 過度使用

正如我們在 限制和請求一文 中看到的,當我們想要限制進程的資源消耗時,設置限制或請求很重要。然而,請注意不要將請求總數設置為大于實際 CPU 大小,因為這意味著每個容器都應該有一定數量的 CPU。

監控 Kubernetes CPU 節流

您可以檢查進程與 Kubernetes 限制的接近程度:

(sumby(namespace,pod,container)(rate(container_cpu_usage_seconds_total
{container!=""}[5m]))/sumby(namespace,pod,container)
(kube_pod_container_resource_limits{resource="cpu"}))>0.8

如果我們想跟蹤集群中發生的節流量,cadvisor 提供container_cpu_cfs_throttled_periods_total和container_cpu_cfs_periods_total. 有了這兩個,你就可以輕松計算出所有 CPU 周期的 throttling 百分比。

最佳實踐

注意 limits 和 requests

限制是在節點中設置最大資源上限的一種方法,但需要謹慎對待這些限制,因為您可能最終會遇到一個進程被限制或終止的情況。

做好被驅逐的準備

通過設置非常低的請求,您可能認為這會為您的進程授予最少的 CPU 或內存。但是kubelet會首先驅逐那些使用率高于請求的 Pod,因此您將它們標記為第一個被殺死!

如果您需要保護特定 Pod 免遭搶占(當kube-scheduler需要分配新 Pod 時),請為最重要的進程分配優先級。

節流是無聲的敵人

通過設置不切實際的限制或過度使用,您可能沒有意識到您的進程正在受到限制,并且性能受到影響。主動監控您的 CPU 使用率并了解您在容器和命名空間中的實際限制。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11031

    瀏覽量

    215938
  • Unix系統
    +關注

    關注

    0

    文章

    15

    瀏覽量

    9780
  • LINUX內核
    +關注

    關注

    1

    文章

    317

    瀏覽量

    22176
  • CFS
    CFS
    +關注

    關注

    0

    文章

    7

    瀏覽量

    9109

原文標題:圖解 K8S OOM 和 CPU 節流

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    OpenStack與K8s結合的兩種方案的詳細介紹和比較

    OpenStack與K8S結合主要有兩種方案。K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發表于 10-14 09:38 ?2.8w次閱讀

    如何使用kubernetes client-go實踐個簡單的與K8s交互過程

    【導讀】Kubernetes項目使用Go語言編寫,對Go api原生支持非常便捷。 本篇文章介紹了如何使用kubernetes client-go實踐個簡單的與K8s交互過程
    的頭像 發表于 02-02 11:16 ?7196次閱讀
    如何使用kubernetes client-go實踐<b class='flag-5'>一</b>個簡單的與<b class='flag-5'>K8s</b>交互過程

    關于K8s最詳細的解析

    個目標:容器操作;兩地三中心;四層服務發現;五種Pod共享資源;六個CNI常用插件;七層負載均衡;八種隔離維度;九個網絡模型原則;十類IP地址;百級產品線;千級物理機;萬級容器;相如無億,K8s有億:億級日服務人次。
    的頭像 發表于 04-08 13:55 ?7594次閱讀
    關于<b class='flag-5'>K8s</b>最詳細的<b class='flag-5'>解析</b>

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發表于 06-02 11:56 ?3633次閱讀

    簡單說明k8s和Docker之間的關系

    這篇文章主要介紹了k8s和Docker關系簡單說明,本文利用圖文講解的很透徹,有需要的同學可以研究下 最近項目用到kubernetes(以下簡稱k8sks之間有
    的頭像 發表于 06-24 15:48 ?3649次閱讀

    K8S集群服務訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務訪問失敗? ? ? 原因分析:證書不能被識別,其原因為:自定義證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務訪問失敗? curl: (7) Failed
    的頭像 發表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群服務訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學習指南

    K8S(kubernetes)學習指南
    發表于 06-29 14:14 ?0次下載

    mysql部署在k8s上的實現方案

    的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優勢主要有以下幾點。
    的頭像 發表于 09-26 10:39 ?2756次閱讀

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡稱K8s,是個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful
    發表于 07-19 13:14 ?1282次閱讀

    什么是K3sK8sK3sK8s有什么區別?

    Kubernetes,通常縮寫為 K8s,是領先的容器編排工具。該開源項目最初由 Google 開發,幫助塑造了現代編排的定義。該系統包括了部署和運行容器化系統所需的切。
    的頭像 發表于 08-03 10:53 ?8211次閱讀

    k8s生態鏈包含哪些技術

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態中,Ingress 作為表示 K8s 流量入口的種資源,想要讓其生效,就需要有個 Ingress Con
    的頭像 發表于 08-07 10:56 ?1463次閱讀
    <b class='flag-5'>k8s</b>生態鏈包含哪些技術

    跑大模型AI的K8s與普通K8s的區別分析

    Kubernetes是個在大量節點上管理容器的系統,其主要功能總結起來,就是在想要啟動容器的時候,負責“找個「空閑」節點,啟動容器”。但是它默認考慮的啟動因素(資源類)主要就是“CPU+內存”。就是容器指定“我要多少
    發表于 09-03 12:07 ?1171次閱讀

    K8S落地實踐經驗分享

    k8s 即 Kubernetes,是個開源的容器編排引擎,用來對容器化應用進行自動化部署、 擴縮和管理。
    的頭像 發表于 01-02 11:45 ?1472次閱讀
    <b class='flag-5'>K8S</b>落地實踐經驗分享

    k8s云原生開發要求

    Kubernetes(K8s)云原生開發對硬件有定要求。CPU方面,建議至少配備2個邏輯核心,高性能CPU更佳。內存至少4GB,但8GB或
    的頭像 發表于 10-24 10:03 ?510次閱讀
    <b class='flag-5'>k8s</b>云原生開發要求

    k8s和docker區別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術的兩大流行工具。Docker關注構建和打包容器,適用于本地開發和單主機管理;而K8s則提供容器編排和管理平臺,適用于多主機或云環境,具備自動化
    的頭像 發表于 12-11 13:55 ?535次閱讀
    主站蜘蛛池模板: 囯产精品久久久久免费蜜桃 | 一个人视频日本在线观看 | 高清日本片免费观看 | 豆奶视频在线高清观看 | 欧美性xxx免费看片 欧美性xxx极品 | 97SE亚洲国产综合在线 | 欧美亚洲精品真实在线 | 日韩欧美视频一区二区 | 99视频久久精品久久 | 亚洲综合国产精品 | 白丝女仆被啪到深夜漫画 | 毛片免费播放 | 囯产精品久久久久免费蜜桃 | 久久天天躁狠狠躁夜夜躁 | 韩国女主播内部vip自带氏巾 | 含羞草传媒在线观看 | 亚洲国产精麻豆 | 黄页网站免费视频大全9 | 国产女人喷潮视频免费 | 欧美日韩综合一区 | 久久99精国产一区二区三区四区 | 国产专区亚洲欧美另类在线 | 97超级碰久久久久香蕉人人 | 久久精品观看 | 久久天天综合 | 麻豆国产原创中文AV网站 | 国产精品久久久久久久久免费下载 | 久久一级片 | 花蝴蝶高清在线视频免费观看 | av在线观看地址 | 91热久久免费频精品动漫99 | 99久久做夜夜爱天天做精品 | 国产GV天堂亚洲国产GV刚刚碰 | 久久综合色视频 | 少妇邻居内射在线 | 激情男女高潮射精AV免费 | 苍井空小公主qvod | 国产99精品在线观看 | 国产乱码一区二区三区 | 91精品免费久久久久久久久 | 国产剧情麻豆mv |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品