為容器指定cpu和記憶體資源(k8s官翻)

jerrysun發表於2021-09-09

這篇文章將展示如何在k8s叢集的pod中為容器指定CPU和記憶體資源。

開始之前

你必須有一個k8s叢集,並且配置好kubectl命令列工具。如果你還沒有一個叢集,你可以使用建立一個。

在容器中指定CPU和記憶體資源

當你建立一個Pod,你可以在這個Pod的容器中指定CPU和記憶體資源。你也可以設定CPU和記憶體的資源限額。要指定CPU和記憶體資源可以在配置檔案中填寫resources:requests域。要設定CPU和記憶體的資源限額,填寫resources:limits域。

只有當這個節點的可用CPU和記憶體量滿足Pod中所有容器的CPU和記憶體的請求量之和後,K8s才會把該Pod排程到此節點。並且如果一個Pod在一個節點執行,K8s 不允許容器的CPU和記憶體使用量超出你指定的限額。如果一個容器超出了它的記憶體限額,它將被終止。如果一個容器超出了它的CPU限額,它將出讓它的時間片。

在本練習中,建立了一個Pod,執行一個容器。Pod的配置檔案中指定了0.25 CPU和64Mi記憶體。並且設定了CPU的上限是1,記憶體的上限是128Mi。下面是該Pod的配置檔案內容:

apiVersion: v1
kind: Pod
metadata:
  name: cpu-ram-demo
spec:
  containers:
  - name: cpu-ram-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "1"
  1. 根據該YAML檔案建立一個Pod:

kubectl create -f 
  1. 顯示該Pod的資訊:

kubectl describe pod cpu-ram-demo

輸出類似於這樣:

Name:   cpu-ram-demo
 ...
 Containers:
   cpu-ram-demo-container:
    ...
     Limits:
       cpu:  1
       memory: 128Mi
     Requests:
       cpu:    250m
       memory:   64Mi

CPU和記憶體的單位

CPU的測量單位是cpus,允許分數值。你可以使用字首m來表示mili(千分之一)。例如100mcpu就是100 milicpu,等價於0.1CPU。

記憶體的測量單位是位元組。你可以使用純整數來表示記憶體,也可以使用一些字首:E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki. 例如, 下面近乎表示相同的值:

128974848, 129e6, 129M , 123Mi

如果你不確定該指定多少資源,你可以先載入這個應用而不指定任何資源,然後使用 來估算個近似值。

如果一個容器超出了記憶體資源限額,它將終止於記憶體溢位。你可以指定一個比你需要使用的高一點的值來提高可靠性。

你應該保證一個pod能使用你指定的那麼多的資源。參考來檢視資源請求和限額的區別。

假如你未指定限額和請求

如果你沒有指定記憶體限額,K8s將不會設定容器記憶體使用量的上限。容器可以使用它所在的節點的所有可用記憶體。相似的,如果你沒有設定CPU限額,K8s也不會設定CPU資源的上限,容器可以使用所在節點的所有可用CPU資源。

根據預設的限額範圍使用預設的限額。你可以使用kubectl describe limits來檢視預設的限額。

你為什麼要使用限額,參閱 。
如果你不指定CPU和記憶體請求會發生什麼,參閱 。

原文連結:



作者:Mark_Zhang
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/151/viewspace-2820559/,如需轉載,請註明出處,否則將追究法律責任。

相關文章