Kubernetes的資源是怎麼計算的?

更新於 2024/10/04閱讀時間約 8 分鐘

本文針對Kubernetes內最基本的資源(cpu, ram, disk)的計算單位與一些實務操作,分享給自已與大家做參考。

一切都要計算

一切都要計算

分成以下幾點進行說明:

  1. Kubernetes支援的計算支援類型
  2. 硬體上是怎麼分配的
  3. 如果Quota爆掉了
  4. 範例:怎麼限制磁碟使用空間
  5. 常見的資源使用問題

1. Kubernetes支援的計算支援類型

最基本的計算資源與計算單位如下:

  • CPU : 以core為單位
  • Memory : 以byte為單位

註:設定Pod Spec時可以指定每個container需要多少計算資源,K8S就會在硬體資源OK的情境下,自動分配資源

並且可以透過以下方式進行限制:

spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory

註:這裡要注意resource limit只能套用在container不能直接套用到

接下來是最重要的計算方式,CPU比較特別:

  • 虛擬機:vCore/vCPU
  • 實體機:開HT後的1個thread

單位:m (ex: 1000m = 1 vCore;0.5 = 500m;0.3 = 300m 依此類推)

Memory相對簡單,如下說明:

最低從byte開始,可以使用E, P, T, G, M, K or Ei, Pi, Ti, Gi, Mi, Ki

2. 硬體上是怎麼分配的

(1) 帶有resource request的Pod如何被指派資源?

每個worker node都有其cpu & memory上限,故每個Pod是怎麼被指派到特定的worker上運行的原則如下:

  • 被分配的pod內所有container所要求的資源 < worker node剩餘資源
  • 就算container要求資源很低,只要worker無法滿足,schedule不會將Pod分配過去運行(確保尖峰仍可運行)

(2) 帶有resource limit的pod如何運作

最底層的container不是由k8s負責的,資源限制 & 使用只能靠各個container runtime (ex. cri-o, docker....)

  • spec.containers[].resources.requests.cpu的值在除1024之後,轉成core value再傳給docker,這就是docker run --cpu-shares的效果
  • spec.containers[].resources.limits.memory類似在docker run --memory的效果
  • spec.containers[].resources.limits.cpu的值會在除100之後,出來的結果就是container在每100ms cpu time中使用多少cpu time

(註:k8s 預設使用的quota period為100ms,最低實際可到1ms)

3. 如果Quota爆掉了

若resource使用額度爆掉或是已經資源不足的情況,k8S會照以下準則處理:

  • container使用超過設定的memory limit,可能就會被終止;如果可以重啟,K8S就會將其重啟
  • container使用超過設定的memory request,當運行的worker node碰到記憶體不足就會整個pod一起趕走
  • container使用超過cpu使用額度,不一定會被終止(但因為有cgroup限制,實際不會超過多少)
  • container要求比目前worker還多的資源,出現無法被分派到任一個worker

4. 範例:怎麼限制磁碟使用空間

(1.8版本後就可以針對ephemeral storage限制空間使用)

一般ephemeral storage會使用以下二個路徑:

  • kubelet root directory: /var/lib/kubelet
  • log directory : /var/log

只要在Pod內定義emptyDir就會用到以上路徑的空間。

apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
# 整個Pod一共要求4G ephemeral storage
# 空間限制8G
containers:
- name: db
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
resources:
# DB要求 2G
requests:
ephemeral-storage: "2Gi"
# db限制 4G
limits:
ephemeral-storage: "4Gi"
- nmae: wp
image: wordpress
resources:
# wp要求 2G
requests:
ephemeral-storage: "2Gi"
# wp限制 4g
limits:
ephemeral-storage: "4Gi"apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
# 整個Pod一共要求4G ephemeral storage
# 空間限制8G
containers:
- name: db
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
resources:
# DB要求 2G
requests:
ephemeral-storage: "2Gi"
# db限制 4G
limits:
ephemeral-storage: "4Gi"
- nmae: wp
image: wordpress
resources:
# wp要求 2G
requests:
ephemeral-storage: "2Gi"
# wp限制 4g
limits:
ephemeral-storage: "4Gi"

5. 常見的資源使用問題

Q1: 帶有ephemeral-storage request的Pod要怎麼分派?

A: 每個node上的ephemeral storage可透過kubectl describe node/xxxx查詢,並找到Allocatable > ephemeral-storage即可知道有多少空間可用

Q2:帶有ephemeral-storage limit的Pod是怎麼運作的?

A: 因為帶有limit,故k8s會持續監控pod中的container磁碟使用狀況是否有超過設定限制,有的話就會被趕走

Q3:Pod一直無法成功分派出去

A: 透過kubectl describe pod/XXX,發現有PodExceedsFreeCPU or PodExceedsFreeMemory等關鍵字。
可以透過以下方式處理:可以透過以下方式處理:
* 新增資源較充足的worker node
* 砍掉不需要的pod
* 確認pod中的container所要求的資源沒有超過目前worker node所能提供的

Q4:Pod不斷被重啟,也不是App本身造成,就是資源不足所造成

A: kubectl get pod -o json => 確認是否有terminated:map & reason關鍵字

結論:

規劃整座Cluster要多少資源或是能運行多少應用服務時,了解Kubernetes的資源計算方式是必須具備的,不管是在地端私有或是使用公有雲都非常重要,尤其是公有雲,所有的資源都直接與$正相關。

當然Kubernetes的資源不會只有這樣而已,本篇是我從最基本的開始說起,畢竟大家轉進容器世界之後還是會有CPU/RAM/Disk嘛~ (笑)

最後還是感謝大家收看,您的任何回饋都會是我繼續分享的動力!



avatar-img
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
本次分享一個K8S網路的一個很重要的元件:Ingress。 有沒有ingress差別在那?
本次分享一個K8S網路的一個很重要的元件:Ingress。 有沒有ingress差別在那?
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
本文探討了電腦架構的運行方式,使用比喻解釋CPU、記憶體與硬碟的關係,並指出在提升電腦速度時,加記憶體並非總是有效的方法。讀者將瞭解到,解決電腦速度問題需要分析具體的瓶頸,而不是單純依賴擴充記憶體。讓讀者對電腦性能的提升有更深入的理解。
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
Thumbnail
PoW (工作量證明機制)為去中心化驗證首開先例,但其浪費能源以及高昂成本的特點長期為人詬病,隨區塊鏈著技術的演進,PoS(權益證明機制)應時而生。本文將介紹何謂PoS 以及不同公鏈之間PoS的差異。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
本文探討了電腦架構的運行方式,使用比喻解釋CPU、記憶體與硬碟的關係,並指出在提升電腦速度時,加記憶體並非總是有效的方法。讀者將瞭解到,解決電腦速度問題需要分析具體的瓶頸,而不是單純依賴擴充記憶體。讓讀者對電腦性能的提升有更深入的理解。
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
Thumbnail
PoW (工作量證明機制)為去中心化驗證首開先例,但其浪費能源以及高昂成本的特點長期為人詬病,隨區塊鏈著技術的演進,PoS(權益證明機制)應時而生。本文將介紹何謂PoS 以及不同公鏈之間PoS的差異。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇