文件解讀 K8S中的Pod和容器配置(二)

2021-09-19 22:30:04 字數 2312 閱讀 1979

接上篇,如何給執行在kubernetes pod中的容器分配cpu和ram資源?

給執行在kubernetes pod中的容器分配cpu和ram資源

開始之前

必須有乙個kubernetes集群,和乙個能和集群溝通的kubectl命令列工具。如果你還沒有集群,你可以用minikube建立乙個集群。

給容器分配cpu和ram資源

當建立乙個pod的時候,你可以為執行在pod中的容器請求cpu和ram資源。你還可以設定cpu和ram資源的限制。請求cpu和ram資源,在配置檔案裡面包含resources:rquests欄位。設定cpu和ram限制包含resource:limits欄位。如果節點上具有足夠的cpu和ram資源可用於所有容器要求的cpu和ram總和,kubernetes將把pod排程在上面。同樣當容器執行在節點上時,kubernetes不允許容器消耗的cpu和ram資源超出指定的容器的限制。如果容器超出他的ram限制,他將結束。如果cpu超出限制,他將成為cpu節流的候選者。

在本次練習,建立乙個執行了乙個容器的pod。pod的配置檔案請求250milicpu和64 mebibytes ram。同樣設定上線為1cpu和128 mebibytes ram。下面是這個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.建立乙個pod基於yaml配置檔案:

kubectl create -f

2.顯示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和ram單元

cpu資源以cpus為單位。允許小數值。你可以用字尾m來表示mili。例如100m cpu等同於100 milicpu,意思是0.1cpu。

ram資源以bytes為單位。你可以將ram表示為純整數或具有這些字尾之一的定點整數: e, p, t, g, m, k, ei, pi, ti, gi, mi, ki。例如,以下代表大約相同的數值:

128974848, 129e6, 129m , 123mi

如果你不確定需要請求多少資源,首先你可以發布應用不指定資源,使用資源監控來確定合適的值。

如果容器超出他的ram限制,它將從記憶體不足狀態死亡。你可以指定比你期望稍高點的值來提高可靠性。

如果指定了請求(request),則保證了可以使用的資源。有關資源的限制和請求可以參考resource qos。

如果你沒有指定限制和請求

如果沒有指定ram限制,kubernetes對於容器可以使用的ram沒有上線。容器可以使用所在機器所有的可用ram資源。類似,如果沒有指定cpu限制,kubernetes對於cpu資源沒有限制,容器可以使用所在機器所有的可用cpu資源。

預設的限制應用參照預設命名空間的限制範圍。你可以使用kubectl describe limitrange limits來檢視預設的限制。

關於為什麼要指定限制的相信資訊,參考 setting pod cpu and memory limits。

關於如果沒有指定cpu和ram資源請求的發生情況,參考resource requests and limits of pod and container。

本文轉移k8s技術社群-文件解讀 | k8s中的pod和容器配置(二)

文件解讀 K8S中的Pod和容器配置(一)

如何給執行在kubernetes k8s pod中的容器定義環境變數 命令列和引數?必須有乙個kubernets集群,和乙個能和集群溝通的kubectl命令列工具。如果你還沒有集群,你可以用minikube建立乙個集群。當你建立了乙個pod,你可以給你執行在pod中的容器設定環境變數。設定環境變數包...

k8s排程 原理 K8s排程原理和Pod生命週期

1 k8s排程原理 pod只存在某乙個物理節點上,可以執行多個container 2 pod的生命週期 暫停pod,可以暫停deployment kubectl get depolyment kubectl scale replicas 0 deployment 刪除pod。刪除之後,狀態變成suc...

k8s發布pod並設定容器引數

1 k8s部署es的時候需要初始化很多linux的核心引數。但是檔案系統掛載到pod容器中就會變成read only,難以進行操作實現需求。所以需要給pod privileged許可權,然後在容器的初始化指令碼或 中去修改sysctl引數。建立pod deployment daemonset等物件時...