Target
- daemonsets
- deployment
- statefulsets
Policy
- request cpu 單位以十進位設定
- 像是 50m 100m 200m 250m 500m 1000m(or 1)
- request memory 單位以二進位設定
- 像是 16Mi 32Mi 64Mi 128Mi 256Mi 384Mi 512Mi 768Mi 1024Mi(or 1Gi)
- request memory 是 node 實際上能放進 pod 的基本量, pod 塞不進 pod 就得生出新的 node 來放.
- pod cpu 吃到超過 limit cpu, 會被卡住等下一輪資源繼續跑, 不會被砍掉.
- pod memory 吃到超過 limit memory, 會被 OOM 機制砍掉.
- request cpu 太小的話, 有可能 schedule job 耗用的 cpu 反而比較高, 造成效率變差.
- limit memory 至少是 request memory 的一倍大, 才不會被塞進剩餘空間太小的 node 然後 OOM 被宰.
- nodejs 可能有 memory leak 狀況, memory 可能會越吃越多(無法被 gc), 最後被 OOM 砍掉.
- nodejs memory leak 越嚴重, cpu 耗用越高, 有可能卡到 limit cpu 導致卡卡的慢.
- java / nodejs 服務啟動時可能會吃大量 memory, 然後才 gc 放掉, limit memory 就得觀察後再提高.
Cloud Features
- AWS
- node instance type 用 t 系列可以 cpu burst (use credit or $$), 必要的時候 limit cpu 可以拉很高來用.
- GCP
- request minimum
- cpu 50m
- memory 52Mi
- resources cpu:memory 比例有最大上限 1:6.5
- Azure
- TBD
Azure
- cpu
- request 要看服務是用什麼服務/架構寫的, 太少的話可能 pod 不會在 1 分鐘內 ready, 像是 java.
- limit 要觀察服務量有多大而設定, 或是服務本身的機制耗用 cpu 高的話, limit 也拉高備用.
- go
- request
- 50m
- limit
- 200m or more
- nodejs / typescript
- request
- 100m
- or more for pod ready in 1min
- or less for low cpu resource use after startup
- limit
- 500m
- java / kotlin / scala
- request
- 200m
- or more for pod ready in 1min
- or less for low cpu resource use after startup
- limit
- 1
- 還是有可能 1 分鐘內 pod 沒來得及 ready, 得調整 deployment 加長 ready 偵測時間
- spec.template.spec.containers.livenessProbe.initialDelaySeconds: 60
- spec.template.spec.containers.readinessProbe.initialDelaySeconds: 60
- memory
- request 通常會設定為比目前用量小一階的基本量.
- limit 則是會設定為比目前用量大一階, 得花些時間觀察狀況持續更新.
% kubectl top pod | grep foobar-deploy
foobar-deploy-8487bddd77-cl5br 18m 365Mi
foobar-deploy-8487bddd77-pmpm4 43m 343Mi
foobar-deploy-8487bddd77-sfdtc 19m 299Mi
foobar-deploy-8487bddd77-sl5s9 21m 605Mi
foobar-deploy-8487bddd77-sr5kc 21m 618Mi
- request
- 256Mi
- limit
- 768Mi
% kubectl top pod | grep blahblah-deploy
blahblah-deploy-6fc6dd8c97-5txhc 25m 263Mi
blahblah-deploy-6fc6dd8c97-7s8jb 26m 287Mi
blahblah-deploy-6fc6dd8c97-9dc4z 25m 199Mi
blahblah-deploy-6fc6dd8c97-bc7kf 26m 330Mi
blahblah-deploy-6fc6dd8c97-bqwwf 26m 329Mi
blahblah-deploy-6fc6dd8c97-dgj22 24m 283Mi
blahblah-deploy-6fc6dd8c97-gjftr 26m 260Mi
blahblah-deploy-6fc6dd8c97-kgmf4 24m 279Mi
blahblah-deploy-6fc6dd8c97-nl667 25m 217Mi
blahblah-deploy-6fc6dd8c97-nqbqb 28m 266Mi
blahblah-deploy-6fc6dd8c97-pjfs9 33m 220Mi
blahblah-deploy-6fc6dd8c97-qbslb 26m 527Mi
blahblah-deploy-6fc6dd8c97-sf4hc 38m 261Mi
blahblah-deploy-6fc6dd8c97-tn5ch 27m 392Mi
blahblah-deploy-6fc6dd8c97-wg2qs 25m 258Mi
- request
- 128Mi
- limit
- 512Mi or 768Mi
- 因為 pod 數量夠多, 所以少數超過 512Mi 的情況可以接受設定 512Mi 被 OOM 砍掉換人做.
- 但如果是一次處理大量資料的 pod, 就不能發生被中途砍掉的狀況, 得設定 768Mi 甚至更多.
2025年3月10日 星期一
Kubernetes - tuning containers resources requests and limits
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言