【云原生】kubernetes中容器的資源限制

目錄

1 metrics-server

2 指定內存請求和限制

3 指定 CPU 請求和限制


資源限制

在k8s中對于容器資源限制主要分為以下兩類:

  • 內存資源限制: 內存請求(request)和內存限制(limit)分配給一個容器。 我們保障容器擁有它請求數量的內存,但不允許使用超過限制數量的內存。

    • 官網參考地址: 為容器和 Pod 分配內存資源 | Kubernetes

  • CPU 資源限制: 為容器設置 CPU request(請求) 和 CPU limit(限制)。 容器使用的 CPU 不能超過所配置的限制。 如果系統有空閑的 CPU 時間,則可以保證給容器分配其所請求數量的 CPU 資源。

    • 官網參考地址: 為容器和 Pods 分配 CPU 資源 | Kubernetes

請求 request memory cpu :可以使用的基礎資源 100M

限制 limit memory cpu :可以使用的最大資源 200M 超過最大資源之后容器會被 kill , OOM 錯誤

1 metrics-server

官網地址: GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.

Kubernetes Metrics Server (Kubernetes指標服務器),它是一個可擴展的、高效的容器資源度量源。Metrics Server 用于監控每個 Node 和 Pod 的負載(用于Kubernetes內置自動擴縮管道)。Metrics Server 從Kubelets 收集資源指標,并通過 Metrics API 在Kubernetes apiserver中公開,供 Horizontal Pod Autoscaler 和 Vertical Pod Autoscaler 使用。Metrics API 也可以通過 kubectl top 訪問,使其更容易調試自動擴縮管道。

  • 查看 metrics-server(或者其他資源指標 API metrics.k8s.io 服務提供者)是否正在運行, 請鍵入以下命令:

kubectl get apiservices
  • 如果資源指標 API 可用,則會輸出將包含一個對 metrics.k8s.io 的引用。

NAME
v1beta1.metrics.k8s.io
  • 安裝 metrics-server

# components.yaml
apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-serverrbac.authorization.k8s.io/aggregate-to-admin: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-view: "true"name: system:aggregated-metrics-reader
rules:- apiGroups:- metrics.k8s.ioresources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-servername: system:metrics-server
rules:- apiGroups:- ""resources:- nodes/metricsverbs:- get- apiGroups:- ""resources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: v1
kind: Service
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:ports:- name: httpsport: 443protocol: TCPtargetPort: httpsselector:k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:selector:matchLabels:k8s-app: metrics-serverstrategy:rollingUpdate:maxUnavailable: 0template:metadata:labels:k8s-app: metrics-serverspec:containers:- args:- --cert-dir=/tmp- --secure-port=4443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15s- --kubelet-insecure-tls #修改去掉證書驗證image: dyrnq/metrics-server:v0.6.2 #修改官方無法下載imagePullPolicy: IfNotPresentlivenessProbe:failureThreshold: 3httpGet:path: /livezport: httpsscheme: HTTPSperiodSeconds: 10name: metrics-serverports:- containerPort: 4443name: httpsprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSinitialDelaySeconds: 20periodSeconds: 10resources:requests:cpu: 100mmemory: 200MisecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000volumeMounts:- mountPath: /tmpname: tmp-dirhostNetwork: true ?#必須指定這個才行nodeSelector:kubernetes.io/os: linuxpriorityClassName: system-cluster-criticalserviceAccountName: metrics-servervolumes:- emptyDir: {}name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:labels:k8s-app: metrics-servername: v1beta1.metrics.k8s.io
spec:group: metrics.k8s.iogroupPriorityMinimum: 100insecureSkipTLSVerify: trueservice:name: metrics-servernamespace: kube-systemversion: v1beta1versionPriority: 100
$ kubectl appply -f components.yaml
2 指定內存請求和限制

官網: 為容器和 Pod 分配內存資源 | Kubernetes

為容器指定內存請求,請在容器資源清單中包含 resources:requests 字段。 同理,要指定內存限制,請包含 resources:limits

# nginx-memory-demo.yaml
#內存資源的基本單位是字節(byte)。你可以使用這些后綴之一,將內存表示為 純整數或定點整數:E、P、T、G、M、K、Ei、Pi、Ti、Gi、Mi、Ki。 例如,下面是一些近似相同的值:128974848, 129e6, 129M, 123Mi
apiVersion: v1
kind: Pod
metadata:name: nginx-memory-demo
spec:containers:- name: nginx-memory-demoimage: nginx:1.19resources:requests:memory: "100Mi" limits:memory: "200Mi"
  • 查看容器內存使用情況

$ kubectl get pod nginx-memory-demo --output=yaml
  • 查看容器正在使用內存情況

$ kubectl top pod nginx-memory-demo 
  • 內存請求和限制的目的

    通過為集群中運行的容器配置內存請求和限制,你可以有效利用集群節點上可用的內存資源。 通過將 Pod 的內存請求保持在較低水平,你可以更好地安排 Pod 調度。 通過讓內存限制大于內存請求,你可以完成兩件事:

    • Pod 可以進行一些突發活動,從而更好的利用可用內存。

    • Pod 在突發活動期間,可使用的內存被限制為合理的數量。

  • 沒有指定內存限制

    如果你沒有為一個容器指定內存限制,則自動遵循以下情況之一:

    • 容器可無限制地使用內存。容器可以使用其所在節點所有的可用內存, 進而可能導致該節點調用 OOM Killer。 此外,如果發生 OOM Kill,沒有資源限制的容器將被殺掉的可行性更大。

    • 運行的容器所在命名空間有默認的內存限制,那么該容器會被自動分配默認限制。

3 指定 CPU 請求和限制

官網: 為容器和 Pods 分配 CPU 資源 | Kubernetes

為容器指定 CPU 請求,請在容器資源清單中包含 resources: requests 字段。 要指定 CPU 限制,請包含 resources:limits

# nginx-cpu-demo.yaml
#CPU 資源以 CPU 單位度量。小數值是可以使用的。一個請求 0.5 CPU 的容器保證會獲得請求 1 個 CPU 的容器的 CPU 的一半。 你可以使用后綴 m 表示毫。例如 100m CPU、100 milliCPU 和 0.1 CPU 都相同。 CPU 請求只能使用絕對數量,而不是相對數量。0.1 在單核、雙核或 48 核計算機上的 CPU 數量值是一樣的。
apiVersion: v1
kind: Pod
metadata:name: nginx-cpu-demo
spec:containers:- name: nginx-cpu-demoimage: nginx:1.19resources:limits:cpu: "1"requests:cpu: "0.5"
  • 顯示 pod 詳細信息

$ kubectl get pod nginx-cpu-demo --output=yaml 
  • 顯示 pod 運行指標

$ kubectl top pod nginx-cpu-demo
  • CPU 請求和限制的初衷

    通過配置你的集群中運行的容器的 CPU 請求和限制,你可以有效利用集群上可用的 CPU 資源。 通過將 Pod CPU 請求保持在較低水平,可以使 Pod 更有機會被調度。 通過使 CPU 限制大于 CPU 請求,你可以完成兩件事:

    • Pod 可能會有突發性的活動,它可以利用碰巧可用的 CPU 資源。

    • Pod 在突發負載期間可以使用的 CPU 資源數量仍被限制為合理的數量。

  • 如果不指定 CPU 限制

    如果你沒有為容器指定 CPU 限制,則會發生以下情況之一:

    • 容器在可以使用的 CPU 資源上沒有上限。因而可以使用所在節點上所有的可用 CPU 資源。

    • 容器在具有默認 CPU 限制的名字空間中運行,系統會自動為容器設置默認限制。

  • 如果你設置了 CPU 限制但未設置 CPU 請求

如果你為容器指定了 CPU 限制值但未為其設置 CPU 請求,Kubernetes 會自動為其 設置與 CPU 限制相同的 CPU 請求值。類似的,如果容器設置了內存限制值但未設置 內存請求值,Kubernetes 也會為其設置與內存限制值相同的內存請求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36209.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36209.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36209.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【云原生】K8S集群

目錄 一、調度約束1.1 POT的創建過程1.1調度過程 二、指定節點調度2.1 通過標簽選擇節點 三、親和性3.1requiredDuringSchedulingIgnoredDuringExecution:硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution:軟策略3.3Pod親和性與反親和性3.4使…

(2)原神角色數據分析-2

功能一: 得到某個屬性的全部角色,將其封裝在class中 """各元素角色信息:一對多""" from pandas import DataFrame, Series import pandas as pd import numpy as npclass FindType:# 自動執行,將…

山東布谷科技直播平臺搭建游戲開發技術分享:數據存儲的重要意義

在市場上的熱門的直播平臺中,有很多小程序為用戶提供各種各樣的功能,這其中就有很多游戲小程序,當今社會獨生子女眾多,很多作為獨生子女的用戶都會去選擇一個能夠社交互動的APP來填補內心的空虛,而直播平臺的實時互動的…

SAP 選擇屏幕組件名描述翻譯時字符長度不夠問題處理

問題:有時候我們在開發report程序的時候,要求程序顯示支持中英文,如果程序是在中文環境下開發的時候,需要進行翻譯處理,但是我們發現選擇屏幕上的組件的描述支持的默認長度是30位,如果超過該如何處理呢 解…

《路由與交換技術》讀書筆記

小小感悟 工作近3年,基本沒去看路由交換相關書籍,趁著搬家后,周末閑暇時間,快速看了一遍《路由與交換技術》,溫習了一遍,很有收獲,以后還是要多花時間看看其他類型的書。 讀書筆記 1.1 移動通…

構建一個LLM應用所需的所有信息

一、說明 您是否對大型語言模型(LLM)的潛力感興趣,并渴望創建您的第一個基于LLM的應用程序?或者,也許您是一位經驗豐富的開發人員,希望簡化工作流程?看看DemoGPT就是您的最佳選擇。該工具旨在簡…

【軟件測試】Linux環境下Docker搭建+Docker搭建MySQL服務(詳細)

目錄:導讀 前言 一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 Linux之docker搭…

CDN(內容分發網絡)

CDN的全稱是 Content Delivery Network, 即內容分發網絡。CDN是構建在現有網絡基礎之上的智能虛擬網絡,依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞&a…

詳談MongoDB的那些事

概念區分 什么是關系型數據庫 關系型數據庫(Relational Database)是一種基于關系模型的數據庫管理系統(DBMS)。在關系型數據庫中,數據以表格的形式存儲,表格由行和列組成,行表示數據記錄&…

神秘的ip地址8.8.8.8,到底是什么類型的DNS服務器?

下午好,我的網工朋友。 DNS,咱們網工配置網絡連接或者路由器時,高低得和這玩意兒打交道吧。 它是互聯網中用于將人類可讀的域名(例如http://www.example.com)轉換為計算機可理解的IP地址(例如192.0.2.1&a…

元宇宙核能發電VR模擬仿真實訓教學為建設新型電力系統提供重要支撐

隨著“碳達峰、碳中和”目標與建設新型能源體系的提出,在元宇宙環境下建設電力系統是未來發展的趨勢。以物聯網、區塊鏈、數字孿生、混合現實等技術為主要代表的元宇宙技術體系及其在電力和能源系統中的應用,將會促進智能電網的發展,為建設新…

Oracle 知識篇+分區表上的索引由global改為local注意事項

★ 知識點 二、知識點 ?Local型索引有如下優點 1.Only one index partition must be rebuilt when a maintenance operation other than SPLIT PARTITION or ADD PARTITION is performed on an underlying table partition. 2.The duration of a partition maintenance opera…

【uniapp】使用Vs Code開發uniapp:

文章目錄 一、使用命令行創建uniapp項目:二、安裝插件與配置:三、編譯和運行:四、修改pinia: 一、使用命令行創建uniapp項目: 二、安裝插件與配置: 三、編譯和運行: 該項目下的dist》dev》mp-weixin文件導入微信開發者…

unity vscode 代碼關聯 跳轉 BUG

一早打開電腦發現代碼關聯失效了,目測可能跟昨天一些插件更新有關 結論 就這貨,開了就沒法提示代碼關聯,估計預覽版全是BUG。 另一個坑 同期有個unity插件也是預覽版,“非常好使”,當場去世。評論點開有好幾個人說用…

替代阿托斯DLKZOR-T/DLHZO-TES直動式伺服閥比例閥

DLKZOR-T/DLKZOR-TES直動式伺服閥比例閥結構: 1,LVDT傳感器 2,比例電磁鐵 3,閥體 4,閥套 5,閥芯 6,復位彈簧 7,集成數字放大器 8,七芯插頭 9,RS232通…

[保研/考研機試] 楊輝三角形 西北工業大學復試上機題 C++實現

題目描述 Time Limit: 1000 ms Memory Limit: 256 mb 輸入n值,使用遞歸函數,求楊輝三角形中各個位置上的值。 輸入描述: 一個大于等于2的整型數n 輸出描述: 題目可能有多組不同的測試數據,對于每組輸入數據, 按題目的要求輸…

15.3.2 【Linux】系統的配置文件:/etc/crontab,/etc/cron.d/*

這個“ crontab -e ”是針對使用者的 cron 來設計的,如果是“系統的例行性任務”時, 該怎么辦呢?是否還是需要以 crontab -e 來管理你的例行性工作調度呢?當然不需要,你只要編輯/etc/crontab 這個文件就可以。有一點需…

arcpy創建基本要素:點和多點

目錄 創建Point點要素步驟一:創建空間參考步驟二:創建要素類步驟三:創建字段步驟四:創建記錄并插入位置信息 創建Multipoint多點要素步驟一:創建空間參考(同上)步驟二:創建要素類步驟…

機器學習終極指南:特征工程(01/2) — 第 -2 部分

西姆蘭吉特辛格 一、介紹 歡迎來到“機器學習終極指南”的第二部分。在第一部分中,我們討論了探索性數據分析 (EDA),這是機器學習管道中的關鍵步驟。在這一部分中,我們將深入研究特征工程,這是機器學習過程…

使用shift關鍵字,寫一個帶二級命令的腳本(如:docker run -a -b -c中的run)

省流:shift關鍵字 探索思路 最近有一個小小的需求,寫一個類似于docker run -a -b -c這樣的腳本,這個腳本名為doline,它本身可以執行(doline -a -b -c),同時又帶有幾個如run、init、start這樣的…