k8s~為pod添加(jia)節點(dian)的資源限制
CPU單位
CPU資源以CPU核心數(shu)為單位進行度量的。在Kubernetes中,一(yi)個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都是(shi)相(xiang)同的。精度不允(yun)許超過1m。
不指定CPU限制
如果(guo)沒有(you)為容器指定CPU限制(zhi),則會出現(xian)以(yi)下(xia)情(qing)況(kuang)之一:
* 容器對它可以使用的CPU資源沒有上限。容器可以使用它運行的節點上可用的所有CPU資源。
* 容(rong)器在(zai)具有(you)默認CPU限制(zhi)的命(ming)名空間(jian)中運行,容(rong)器會自動分(fen)配(pei)默認限制(zhi)。集群管理(li)員可(ke)以使用(yong)LimitRange指定CPU限制(zhi)的默認值。
CPU請求和限制的目的
通(tong)過(guo)配置集群中運(yun)行的(de)(de)CPU請(qing)求(qiu)和容(rong)器(qi)的(de)(de)限制,可(ke)(ke)以(yi)有(you)效地(di)利(li)用集群節點(dian)上可(ke)(ke)用的(de)(de)CPU資源。通(tong)過(guo)將Pod的(de)(de)CPU請(qing)求(qiu)保持在較低的(de)(de)水(shui)平(ping),可(ke)(ke)以(yi)很好地(di)調度(du)Pod。將CPU限制設置為大(da)于CPU請(qing)求(qiu),你可(ke)(ke)以(yi)完成兩件(jian)事(shi):
- Pod可以利用CPU資源進行突發活動。
- 在突發活動期間,Pod可以使用的CPU資源數量被限制在某個合理的數量內。
在 Kubernetes 中,可以(yi)通(tong)過設置 CPU 和內存的(de)限制(zhi)來控制(zhi)每個(ge) Pod 或容(rong)器的(de)資源使用。這樣可以(yi)確保資源的(de)合理分(fen)配,避免某些應用占用過多資源而影(ying)響(xiang)整個(ge)集群的(de)穩定性。
1. 配置 CPU 和內存的 Limit
在 Kubernetes 的 Pod 或 Deployment 定義中,可以通過 resources 字段(duan)來設置 CPU 和內存的請(qing)求(requests)和限制(zhi)(limits)。以下是(shi)一(yi)個示(shi)例 YAML 文(wen)件:
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. 示例應用
以下是一個更復雜的(de)(de) Deployment 示例,包(bao)含多(duo)個容器的(de)(de)資源(yuan)配置:
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 的資源使用情況,并根據需要進行調整。
- 測試與驗證:在生產環境前進行充分的測試,以確保配置能夠滿足性能需求。
通(tong)過以上配置,你(ni)可以有效管理 Kubernetes 中(zhong)的(de) CPU 和內存(cun)資(zi)源,確保應(ying)用的(de)穩定運(yun)行(xing)。