日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s篇-POD资源管理

發布時間:2023/12/20 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s篇-POD资源管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、資源管理

當我們創建Pod時,可以對POD使用的資源做一些限制,比如CPU、Memory等。也可以從namespace維度,來對整個namespace的資源使用限制。

1、POD資源限制

通過pods.spec.containers.resources中limits和requests字段來控制Pod容器的資源分配。
requests定義Pod容器需要的最小資源量,limits定義Pod容器最大可用的資源上限。

在調度時,kube-scheduler只會按照requests的值進行計算。而在真正設置Cgroups限制時,kubelet則會按照limits的值來進行設置。


支持限制的資源類型:?

  • CPU(單位為millicore,1Core=1000millicore)
  • Memory(單位為Byte)
  • Ephemeral storage(臨時存儲,單位為Byte)
  • 自定義資源: 配置時必須為整數

示例:

# pod-demo.yaml apiVersion: v1 kind: Pod metadata:name: pod-demonamespace: zjmns spec:containers:- image: 'test.registry.com/myns/nginx:1.7.9'name: mywebresources:requests:cpu: 100mmemory: 200Miephemeral-storage: "2Gi"limits:cpu: 150mmemory: 200Miephemeral-storage: "4Gi"# kubectl create -f pod-demo.yaml

2、Pod服務質量(QoS)配置

不同的requests和limits的設置方式,會將這個Pod劃分到不同的QoS類別當中,共有三種類別: Guaranteed, Burstable, BestEffort。

QOS劃分作用是: 當節點主機資源緊張或不足時,kubelet會把一些低優先級的,或者說服務質量要求不高的Pod優先刪除掉。
按Qos類別刪除順序是:BestEffort > Burstable > Guaranteed。若Pod的QoS類別相同時,還要根據Pod的優先級來做進一步的排序和選擇。

根據不同業務的要求和屬性來配置資源的Limits和Request,做到合理的規劃Qos Class。因為當內存不足時,BestEffort Pod會最先被kill掉,當節點發生eviction時,也會優先考慮驅逐 BestEffort的pod。

Guaranteed:?

Pod里的每一個Container都同時設置了requests和limits,且requests和limits值相等時,這個Pod就屬于Guaranteed類別。
當Pod僅設置了limits而未設置requests時,Kubernetes會自動為它設置與limits相同的requests值,所以這也屬于Guaranteed情況。

apiVersion: v1 kind: Pod metadata:name: pod-demo-guaranteednamespace: zjmns spec:containers:- name: mywebimage: nginxresources:requests:cpu: "100m"memory: "200Mi"limits:cpu: "100m"memory: "200Mi"

Burstable:?

Pod不滿足Guaranteed的條件(只要requests與limits中的CPU/Memory值不相等),但至少有一個Container設置了requests,這個Pod會被劃分到Burstable類別。

apiVersion: v1 kind: Pod metadata:name: pod-demo-burstablenamespace: zjmns spec:containers:- name: mywebimage: nginxresources:requests:memory: "200Mi"limits:memory: "100Mi"

BestEffort:?

一個Pod既沒有設置requests,也沒有設置limits,則這個Pod的QoS類別就是BestEffort。

apiVersion: v1 kind: Pod metadata:name: test-demo-BestEffortnamespace: zjmns spec:containers:- name: mywebimage: nginx

3、CPU管理策略

是指把Pod容器綁定到某個CPU的核上運行。能減少系統在CPU之間進行上下文切換的次數,從而提升容器里應用的性能。

條件是Pod必須是Guaranteed的QoS類型,并需要將requests和limits中的cpu設置為相同的值,且requests是一個整數值。
而非整數的Guaranteed/Burstable/BestEffort,它們的CPU會放在一塊,組成一個CPU share pool,然后共享,不會綁定到CPU的某個核上。

整數Guaranteed 非整數Guaranteed/Burstable/BestEffort————————————————— ————————————————————————————————————— | CPU0 | CPU1 | Cpushare Pool(cpu2~cpu7) |————————————————— —————————————————————————————————————

比如一個節點的CPU有8個核,有一個Guaranteed Pod的requests設置為2,則kubelet會將CPU0和CPU1分配給Guaranteed Pod去綁定,而剩下的6個核CPU2~CPU7,會被非整數的Guaranteed/Burstable/BestEffort共享,然后它們會根據不同的權重劃分時間片來使用這6個核的CPU。

示例:該Pod就會被綁定在2個獨占的CPU核上,具體是哪兩個CPU核,是由kubelet自動分配的。

apiVersion: v1 kind: Pod metadata:name: pod-demo-cpusetnamespace: zjmns spec:containers:- name: mywebimage: nginxresources:limits:memory: "200Mi"cpu: "2"requests:memory: "200Mi"cpu: "2"

4、Resource Quota

ResourceQuota用于限制每個namespace的資源使用量。當K8S集群上有多個NameSapce時,很容易出現namespace之間的資源搶占。
或者說,當多用戶或團隊共享一個K8S系統時,一個用戶對應一個namsespace,那管理員可通過設置ResourceQuota來防止用戶之間的資源搶占。

當用戶超過了資源使用量,在創建資源時,會提示403 FORBIDDEN。
可針對namespace下各種資源進行設置配額,如計算資源(cpu、memory),存儲資源(pvc),對象數量(services、pods等)。

示例:

# rquota-demo.yaml apiVersion: v1 kind: ResourceQuota metadata:name: ns-quota-demonamespace: zjmns spec:hard:configmaps: "100" #最大配置文件數量限制limits.cpu: "4" #最大CPU數量限制limits.memory: 2G #最大內存限制requests.storage: 100M #最大存儲空間限制persistentvolumeclaims: "4" #最大PV數量限制pods: "4" #最大Pod數量限制secrets: "4" #最大保密字典數量限制services: "4" #最大服務數量限制services.loadbalancers: "4" #最大負載均衡型服務數量限制# kubectl create -f rquota-demo.yaml # 字段解析可參考官網:https://kubernetes.io/docs/concepts/policy/resource-quotas/

Quota Scopes: 也可以為某個Quota定義一個Scope,即作用域,定義后這個Quota只會對作用域內的資源生效。

示例:

apiVersion: v1 kind: ResourceQuota metadata:name: user1-quotanamespace: user1 spec:hard:cpu: "10"memory: 20Gipods: "10"scopeSelector:matchExpressions:- operator : ExistsscopeName: NotBestEffort# 參數說明: # operator: 若scopeSelector有定義時,且scopeName值為Terminating/NotTerminating/BestEffort/NotBestEffort,則operator的值只能定義為Exists。 # scopeName:值為NotBestEffort,表示匹配所有Qos不是BestEffort的Pod。# 示例說明: # 這個ResourceQuota意思是,限制user1 namespace下的非BestEffort的Pod:cpu只能用10個核,memory只能用20G,pods只能創建10個。# 查看ResourceQuota定義了哪些限制規則 kubectl get quota -n zjmns kubectl describe quota ns-quota-demo -n zjmns# 查看某個命名空間定義了哪些ResourceQuota(一個命名空間能有多個,但只有第一個才會起作用) kubectl describe ns zjmns

二、總結(如何滿足Pod資源要求)

Pod要配置合理的資源要求,包括:CPU/Memory/EphemeralStorage/GPU

通過Request和Limit來為不同業務特點的Pod選擇不同的QoS:
Guaranteed:敏感型,需要業務保障
Burstable:次敏感型,需要彈性業務
BestEffort:可容忍性業務

為每個NameSpace配置ResourceQuota來防止過量使用,保障其他人的資源可用

總結

以上是生活随笔為你收集整理的k8s篇-POD资源管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。