CPU單位
CPU資源以CPU核心數為單位進行度量的。在Kubernetes中,一個CPU相當於:
1 AWS vCPU
1 GCP Core
1 Azure vCore
一個超執行緒(在使用超執行緒的裸金屬Intel處理器上)
請求0.5 CPU的容器所保證的CPU核數是請求節點上的1個CPU的一半。你可以用字尾m表示milli。例如
100m CPU
、100millicpu``和0.1 CPU
都是相同的。精度不允許超過1m。
不指定CPU限制
如果沒有為容器指定CPU限制,則會出現以下情況之一:
* 容器對它可以使用的CPU資源沒有上限。容器可以使用它執行的節點上可用的所有CPU資源。
* 容器在具有預設CPU限制的名稱空間中執行,容器會自動分配預設限制。叢集管理員可以使用LimitRange指定CPU限制的預設值。
CPU請求和限制的目的
透過配置叢集中執行的CPU請求和容器的限制,可以有效地利用叢集節點上可用的CPU資源。透過將Pod的CPU請求保持在較低的水平,可以很好地排程Pod。將CPU限制設定為大於CPU請求,你可以完成兩件事:
- Pod可以利用CPU資源進行突發活動。
- 在突發活動期間,Pod可以使用的CPU資源數量被限制在某個合理的數量內。
在 Kubernetes 中,可以透過設定 CPU 和記憶體的限制來控制每個 Pod 或容器的資源使用。這樣可以確保資源的合理分配,避免某些應用佔用過多資源而影響整個叢集的穩定性。
1. 配置 CPU 和記憶體的 Limit
在 Kubernetes 的 Pod 或 Deployment 定義中,可以透過 resources
欄位來設定 CPU 和記憶體的請求(requests)和限制(limits)。以下是一個示例 YAML 檔案:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-image:latest
resources:
requests:
memory: 512Mi # 請求的記憶體量
cpu: 500m # 請求的 CPU 核心數
limits:
memory: 1Gi # 限制的記憶體量
cpu: 1 # 限制的 CPU 核心數
2. 欄位解釋
- requests:表示容器啟動時所需的最低資源量。Kubernetes 會根據這些請求來排程 Pod。
- limits:表示容器可以使用的最大資源量。如果容器超過了這個限制,Kubernetes 會採取措施,例如限制 CPU 使用或終止容器。
3. 單位說明
-
CPU:
- 可以用整數表示核心數(例如
1
表示一個核心)。 - 也可以用毫核心(m)表示,如
500m
表示半個核心。
- 可以用整數表示核心數(例如
-
Memory:
- 可以使用位元組(B)、千位元組(Ki)、兆位元組(Mi)、吉位元組(Gi)等單位。例如:
512Mi
表示 512 兆位元組。
- 可以使用位元組(B)、千位元組(Ki)、兆位元組(Mi)、吉位元組(Gi)等單位。例如:
4. 示例應用
以下是一個更復雜的 Deployment 示例,包含多個容器的資源配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app-container
image: my-app-image:latest
resources:
requests:
memory: 256Mi
cpu: 250m
limits:
memory: 512Mi
cpu: 1
- name: sidecar-container
image: my-sidecar-image:latest
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
5. 注意事項
- 合理配置:根據應用的實際需求合理配置資源請求和限制,避免過高或過低的設定。
- 監控與調整:使用監控工具(如 Prometheus、Grafana)觀察 Pod 的資源使用情況,並根據需要進行調整。
- 測試與驗證:在生產環境前進行充分的測試,以確保配置能夠滿足效能需求。
透過以上配置,你可以有效管理 Kubernetes 中的 CPU 和記憶體資源,確保應用的穩定執行。