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)