k8s~為pod新增節點的資源限制

张占岭發表於2024-10-31

CPU單位

CPU資源以CPU核心數為單位進行度量的。在Kubernetes中,一個CPU相當於:

1 AWS vCPU
1 GCP Core
1 Azure vCore
一個超執行緒(在使用超執行緒的裸金屬Intel處理器上)

請求0.5 CPU的容器所保證的CPU核數是請求節點上的1個CPU的一半。你可以用字尾m表示milli。例如100m CPU100millicpu``和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 兆位元組。

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 和記憶體資源,確保應用的穩定執行。

相關文章