本文同步刊登於個人技術部落格,有興趣關注更多 Kubernetes、DevOps 相關資源的讀者,請務必追蹤從零開始的軟體工程師之旅,喜歡的話幫我按讚分享、歡迎留言、或是許願想要看的文章。
如果有技術問題也可透過粉絲專頁 討論,技術方面諮詢免錢、需要動手做另計 XD。
在網路上看到這篇好文 GKE 上的可使用的資源 Allocatable Resource。啥意思呢?難道還有不能使用的資源嗎?
沒錯,GKE 會保留一定的機器資源 (e.g. cpu, memory, disk),來維持節點的管理元件,例如 container runtime (e.g. Docker)、kubelet、cAdvisor。
也就是說,就算我們跟 GCP 購買了算力,有一個比例的資源我們是使用不到的。細節請見 理解 GKE 集群架構。這會影響我們>單一節點的規格,我們也需要一並計算,能實際使用的資源 (allocatable resource)。
Allocatable = Capacity - Reserved - Eviction Threshold
Kubelet 會主動監測節點上的資源使用狀況,當節點發生資源不足的狀況時,kubelet 會主動終止某些 Pod 的運行,並回收節點的資源,來避免整個節點資源不足導致的系統不穩定。被終止的 Pod 可以再次排程到其他資源足夠的節
點上。細節請見 官方文件 Scheduling and Eviction
在 Kubernetes 上,我們可以進一步設定驅逐門檻,當節點的可用資源低於驅逐的門檻,kubelet 會觸發 Pod 驅逐機制
GKE 上每個節點會額外保留 100 MiB 的記憶體,作為驅逐門檻,意思是當節點耗盡資源,導致剩餘記憶體低於 100 MiB 的時候,會直接觸發 GKE 的 Pod Eviction,終止並回收部分的 Pod。換句話說,這 100 MiB 是不能被使用的>資源。細節請見官方文件
資源的定義,使用雲平台的一般費用大多來自此
然後是這個表,注意保留的資源是累進級距
255 MiB of memory for machines with less than 1 GB of memory
25% of the first 4GB of memory
20% of the next 4GB of memory (up to 8GB)
10% of the next 8GB of memory (up to 16GB)
6% of the next 112GB of memory (up to 128GB)
2% of any memory above 128GB
值計上能夠用到的資源,底下 GCP 也整理好了,例如 n1-standard-4 實際使用的是 memory 12.3/15,cpu 3.92/4。
在維持合理的使用率下,開啟大的機器,可以降低被保留的資源比例,依照筆者公司過去經驗,GKE 起跳就是 n1-standard-4 或是以上規格,如果低於這個規格,可調度的資源比例真的太低,應該重新考慮一下這個解決方案是否合乎>成本。
但究竟什麼規格的機器適合我們的需求,說實在完全要看執行的應用而定。
有寫過鐵人賽的都知道 30 篇真的很漫長,一篇文章幾千字,都要花好幾個小時。我去年後半,真的都會看讀者的留言跟按讚,取暖一波,才有動力繼續寫。留言的人多就會多寫,留言的人少就會少寫,各位覺得文章還看得下去,請務必來我粉專按讚留個言,不管是推推、鞭鞭、或是有想看的文章來許願,都十分歡迎。有你們的支持,我才有動力繼續寫。
請大家務必以實際行動支持好文章,不要讓劣幣驅逐良幣。不然 iThome 上面之後只剩洗觀看數的熱門文章了 XD
當然,沒人留言我就會當作自己才是垃圾文 (自知之明XD),就會收一收回家嚕貓睡覺,掰掰~