接上篇,如何給執行在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等物件時...