Pod容器資源限制和探針

目錄

一、資源限制

1.Pod和容器的資源請求和限制

2.CPU 資源單位

案例一

案例二?

二、健康檢查,又稱為探針(Probe)

1.探針的三種規則

2.Probe支持三種檢查方法

3.探測獲得的三種結果

案例一:exec

案例二:httpget

案例三:tcpSocket

案例四:就緒檢測readinessProbe1

案例五:就緒檢測readinessProbe2

案例六:啟動、退出


一、資源限制

當定義Pod 時可以選擇性地為每個容器設定所需要的資源數量。最常見的可設定資源是CPU和內存大小,以及其他類型的資源。

當為 Pod 中的容器指定了request資源時,調度器就使用該信息來決定將Pod調度到哪個節點上。當還為容器指定了limit資源時,kubelet就會確保運行的容器不會使用超出所設的limit資源量。kubelet還會為容器預留所設的 request 資源量,供該容器使用。
如果 Pod運行所在的節點具有足夠的可用資源,容器且可以使用超出所設置的 request資源量。不過,容器不可以使用超出所設置的limit資源量。
如果給容器設置了內存的 limit值,但未設置內存的 request值,Kubernetes 會自動為其設置與內存 limit相匹配的 request值。類似的,如果給容器設置了CPU的 limit值但未設置cPU的 request值,則Kubernetes自動為其設置CPU 的request 值并使之與CPU 的limit 值匹配。

官網示例:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

1.Pod和容器的資源請求和限制

spec .containers[].resources.requests.cpu		//定義創建容器時預分配的CPU資源
spec.containers[].resources.requests.memory		//定義創建容器時預分配的內存資源
spec.containers[].resources.imits.cpu			//定義cpu 的資源上限
spec.containers[].resources.1imits.memory		//定義內存的資源上限

2.CPU 資源單位

CPU資源的request和limit以cpu為單位。Kubernetes 中的一個cpu相當于1個VCPU (1個超線程)
Kubernetes也支持帶小數CPU 的請求。spec.containers[].resources.requests.cpu為0.5 的容器能夠獲得一個cpu的一半CPU資源(類似于Cgroup對CPU資源的時間分片)。表達式0.1 等價于表達式100m (毫核),表示每1000 毫秒內容器可以使用的CPU時間總量為0.1*1000 亳秒。

案例一

OOMKilled:資源不足被殺死

apiVersion: v1
kind: Pod
metadata:name: ky-web-db
spec:containers:- name: webimage: nginxenv:- name: WEB_ROOT_PASSWORDvalue: "password"resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"- name: dbimage: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalue: "abc123"resources:requests:memory: "64Mi"cpu: "0.25"limits:memory: "128Mi"cpu: "500m"

案例二?

給足資源

二、健康檢查,又稱為探針(Probe)

探針是由kubelet對容器執行的定期診斷。

1.探針的三種規則

●livenessProbe :判斷容器是否正在運行。如果探測失敗,則kubelet會殺死容器,并且容器將根據 restartPolicy 來設置 Pod 狀態。如果容器不提供存活探針,則默認狀態為Success。
●readinessProbe :判斷容器是否準備好接受請求。如果探測失敗,端點控制器將從與 Pod 匹配的所有 service endpoints 中剔除刪除該Pod的IP地址。初始延遲之前的就緒狀態默認為Failure。如果容器不提供就緒探針,則默認狀態為Success。
●startupProbe(這個1.17版本增加的):判斷容器內的應用程序是否已啟動,主要針對于不能確定具體啟動時間的應用。如果配置了 startupProbe 探測,在則在 startupProbe 狀態為 Success 之前,其他所有探針都處于無效狀態,直到它成功后其他探針才起作用。 如果 startupProbe 失敗,kubelet 將殺死容器,容器將根據 restartPolicy 來重啟。如果容器沒有配置 startupProbe, 則默認狀態為 Success。
#注:以上規則可以同時定義。在readinessProbe檢測成功之前,Pod的running狀態是不會變成ready狀態的。

2.Probe支持三種檢查方法

●exec :在容器內執行指定命令。如果命令退出時返回碼為0則認為診斷成功。
●tcpSocket :對指定端口上的容器的IP地址進行TCP檢查(三次握手)。如果端口打開,則診斷被認為是成功的。
●==httpGet ==:對指定的端口和路徑上的容器的IP地址執行HTTPGet請求。如果響應的狀態碼大于等于200且小于400,則診斷被認為是成功的

3.探測獲得的三種結果

每次探測都將獲得以下三種結果之一
●成功:容器通過了診斷。
●失敗:容器未通過診斷。
●未知:診斷失敗,因此不會采取任何行動

官網示例:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

案例一:exec

apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: livenessimage: busyboximagePullPolicy: IfNotPresentargs:  - /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 60livenessProbe:exec:command:- cat- /tmp/healthyfailureThreshold: 1 initialDelaySeconds: 5periodSeconds: 5

??- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 60

創建一個名為?/tmp/healthy?的文件,暫停執行腳本,等待 30 秒鐘,刪除后,再次暫停執行腳本,等待額外的 60 秒鐘

案例二:httpget

apiVersion: v1
kind: Pod
metadata:name: liveness-httpgetnamespace: default
spec:containers:- name: liveness-httpget-containerimage: soscscs/myapp:v1           #soscscs:nginx1.12imagePullPolicy: IfNotPresent      #拉取策略ports:- name: httpcontainerPort: 80livenessProbe:              #探針httpGet:port: httppath: /index.htmlinitialDelaySeconds: 1     #延遲1秒開始探測periodSeconds: 3          #每3秒探測一次timeoutSeconds: 10         #超時時間10秒

刪除index.html頁面,報錯404,探針失敗

案例三:tcpSocket

apiVersion: v1
kind: Pod
metadata:name: xzq-tcp-live
spec:containers:- name: nginximage: soscscs/myapp:v1livenessProbe:initialDelaySeconds: 5  #第一次探測延遲5秒,第6秒開始timeoutSeconds: 1tcpSocket:port: 8080periodSeconds: 10     #每10秒探測一次failureThreshold: 2   #允許2次失敗

案例四:就緒檢測readinessProbe1

apiVersion: v1
kind: Pod
metadata:name: readiness-httpgetnamespace: default
spec:containers:- name: readiness-httpget-containerimage: soscscs/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index1.htmlinitialDelaySeconds: 1periodSeconds: 3livenessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 1periodSeconds: 3timeoutSeconds: 10

案例五:就緒檢測readinessProbe2

apiVersion: v1
kind: Pod
metadata:name: myapp1labels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index.htmlinitialDelaySeconds: 5periodSeconds: 5timeoutSeconds: 10 
---
apiVersion: v1
kind: Pod
metadata:name: myapp2labels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index.htmlinitialDelaySeconds: 5periodSeconds: 5timeoutSeconds: 10 
---
apiVersion: v1
kind: Pod
metadata:name: myapp3labels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index.htmlinitialDelaySeconds: 5periodSeconds: 5timeoutSeconds: 10 
---
apiVersion: v1
kind: Service
metadata:name: myapp
spec:selector:app: myapptype: ClusterIPports:- name: httpport: 80targetPort: 80

刪除頁面,看效果

//readiness探測失敗,Pod 無法進入READY狀態,且端點控制器將從 endpoints 中剔除刪除該 Pod 的 IP 地址?

案例六:啟動、退出

apiVersion: v1
kind: Pod
metadata:name: lifecycle-demo
spec:containers:- name: lifecycle-demo-containerimage: soscscs/myapp:v1lifecycle:   #此為關鍵字段postStart:exec:command: ["/bin/sh", "-c", "echo Hello from the postStart handler >> /var/log/nginx/message"]      preStop:exec:command: ["/bin/sh", "-c", "echo Hello from the poststop handler >> /var/log/nginx/message"]volumeMounts:- name: message-logmountPath: /var/log/nginx/readOnly: falseinitContainers:- name: init-myserviceimage: soscscs/myapp:v1command: ["/bin/sh", "-c", "echo 'Hello initContainers'   >> /var/log/nginx/message"]volumeMounts:- name: message-logmountPath: /var/log/nginx/readOnly: falsevolumes:- name: message-loghostPath:path: /data/volumes/nginx/log/type: DirectoryOrCreate

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

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

相關文章

OneMO同行 心級服務:中移物聯OneMO模組助力客戶終端寒冷環境下的穩定運行

中移物聯OneMO模組以客戶為中心,基于中國移動心級服務要求,開展“OneMO同行 心級服務 標定一流”高標服務主題活動,升級“服務內容““服務方式”和“服務意識”,為行業客戶提供全新的服務體驗。 近日,某車載監控設備…

Hive語法學習總結

Hive SQL語法學習總結 hive參數庫操作1.創建庫2.具體案例3.庫的其他操作 表和庫的路徑演示表的操作創建表插入數據 hive參數 一 hive常用交互命令hive -e sql語句hive -f sql文件 //文件中是sql語句二 參數的設置方式一:在客戶端中設置參數(當次有效)set 參數名參…

ACM實訓第十七天

Is It A Tree? 問題 考試時應該做不出來,果斷放棄 樹是一種眾所周知的數據結構,它要么是空的(null, void, nothing),要么是一個或的集合滿足以下屬性的節點之間有向邊連接的節點較多。 ?只有一個節點,稱為根節點,它…

【Crypto】摩絲

文章目錄 一、摩斯解題感悟 一、摩斯 很明顯莫爾斯密碼 iloveyou還挺浪漫 小小flag,拿下 解題感悟 莫爾斯密碼這種題還是比較明顯的

【董曉算法】競賽常用知識之圖論3(最近公共祖先)

前言: 本系列是學習了董曉老師所講的知識點做的筆記 董曉算法的個人空間-董曉算法個人主頁-嗶哩嗶哩視頻 (bilibili.com) 動態規劃系列(還沒學完) 【董曉算法】動態規劃之線性DP問題-CSDN博客 【董曉算法】動態規劃之背包DP問題&#xff…

智能鎖千千萬,誰是你的NO.1,親身實測凱迪仕傳奇大師K70旗艦新品

智能鎖千千萬,誰是你的NO.1。歡迎來到智哪兒評測室,這次我們為大家帶來了凱迪仕傳奇大師K70系列的一款重磅新品。 在科技的浪潮中,家居安全領域正經歷著前所未有的變革。智能鎖越來越成為家的安全守護神,以及智能生活的得力助手。…

Android 11 Framework實時監聽Activity堆棧變化

核心類 Framework中有一個類SystemActivityMonitoringService專門用于監控Activity堆棧變化,屬于隱藏Api,應用側無法調用。此類位于 packages/services/Car/service/src/com/android/car/SystemActivityMonitoringService.java 方法 void registerTa…

Mysql信息脫敏

類似微信姓名脫敏: SELECT CONCAT( REPEAT(*, CHAR_LENGTH(real_name) -1 ), RIGHT(real_name, 1) ) name from user_info電話號脫敏: SELECT CONCAT(LEFT(mobile_phone, 3), REPEAT(*, 4 ), RIGHT(mobile_phone, 4) ) phone from user_info

大數據Hive中的UDF:自定義數據處理的利器(下)

在上一篇文章中,我們對第一種用戶定義函數(UDF)進行了基礎介紹。接下來,本文將帶您深入了解剩余的兩種UDF函數類型。 文章目錄 1. UDAF1.1 簡單UDAF1.2 通用UDAF 2. UDTF3. 總結 1. UDAF 1.1 簡單UDAF 第一種方式是 Simple(簡單…

每日一題《leetcode--382.鏈表隨機結點》

https://leetcode.cn/problems/linked-list-random-node/ 這道題我們首先看到題目中的要求:在單鏈表中隨機選取一個鏈表中的結點,要使每個結點被選取的概率是一樣的。 當我們看到隨機這兩個字時,應該就會想起rand()這個函數。接著我們把使用這…

[暈事]今天做了件暈事35 VM發送給gateway太多ARP,導致攻擊檢查?

最近遇到一個問題,說網關學不到新起來VM的mac地址,通過tshark抓包發現,VM已經發出去GARP了。而且連續發送了24個GARP。 就認為是網關的問題,為什么沒網關沒有學到?就讓測試同事開網絡設備的ticket。 后來聽同事說&…

自己搭建內網穿透

本文介紹使用最新版frp搭建內網穿透,最新版本的frp在配置上與之前有很大不同,需要使用.toml文件進行配置。其中主要問題出現在toml文件內部。 一、云服務器配置 下載frp sudo apt update sudo apt install wget wget https://github.com/fatedier/frp…

求出這行英文中最后一個單詞的長度

【題目描述】藍寶看到了一行奇怪的英文,這行英文由若干單詞組成,每個單詞前后用一些字符*隔開請幫助藍寶求出這行英文中最后一個單詞的長度。【輸入格式】 輸入一行,就就是藍寶看到的奇怪的英文。 【輸出格式】 輸出一行,是個整數…

文旅3d仿真數字人形象為游客提供全方位的便捷服務

在AI人工智能與VR虛擬現實技術的雙重驅動下,文旅3D數字代言人正以其獨特的魅力,頻頻亮相于各類文旅場景,為游客帶來前所未有的個性化服務體驗。他們不僅有趣有品,更能言善道,成為文旅業數字化發展的新亮點。 這些文旅3…

Android 文件加密解密(AES)

private static final String ALGORITHM "AES"; 文件加密 /*** 文件加密* param secretKey 文件加密密鑰* param oldFiles 原始文件列表,需要加密的* param newFiles 構造加密后的文件列表*(選擇多個或者單個)多個文件加密*/ Re…

我的文章分類合集目錄

文章目錄 Java相關基礎常規問題類Docker類RabbitMQ類分庫分表 網絡工程相關路由交換、Cisco Packet TracerIP地址 前端相關數據庫 Java相關 基礎 Java開發規范、項目開發流程 SpringBoot整合MyBatis實現增刪改查(簡單,詳細) SpringBoot整合MybatisPlus(詳細&#…

【Muduo】TcpConnection類

Muduo網絡庫的TcpConnection類代表了TCP連接的一端,即服務器與遠程對等端之間的連接。TcpConnection類知道自身和對端的InetAddress、封裝了前面講過的Socket類和Channel類,并且保有管理自己的subLoop指針,還有多種事件處理函數和回調&#x…

【搜索】BFS

#include <iostream> #include <cstring> #include <queue>using namespace std;const int N 110;typedef pair<int, int> PII;int n, m; int g[N][N], d[N][N];//存放地圖//存每一個點到起點的距離int bfs() {queue< PII > q;q.push({0, 0});m…

C語言什么是位段?其優點是什么?

一、問題 在內存中&#xff0c;1byte 8bit&#xff0c;即 1 字節等于 8 位。位由兩個值組成&#xff0c;即 0 和 1 。因此&#xff0c;存儲在計算機中的 1 字節&#xff0c;可以看成是8個?進制數字&#xff08;0 和1&#xff09;組成的串。了解了內存空間的最?單位&#xff…

16.js數學方法和進制轉換

數學方法 &#xff08;1&#xff09;Math.random() 默認生成0-1的隨機數 var resMath.random() console.log(res) &#xff08;2&#xff09;Math.round(數字) 取整&#xff1a;正數-四舍五入 負數-5舍6入 var resMath.round(11)console.log(res) //11var res1Math.round(1…