為容器指派擴充資源
功能狀態:
Kubernetes v1.32 [穩定]
本頁說明如何為容器指派擴充資源。
準備開始
您需要有一個 Kubernetes 叢集,且必須將 kubectl 命令列工具設定為與您的叢集通訊。建議在至少有兩個非控制平面主機節點的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用下列 Kubernetes 體驗環境
若要檢查版本,請輸入kubectl version
。在執行本練習之前,請先完成宣告節點的擴充資源中的練習。這會設定您的一個節點以宣告 dongle 資源。
為 Pod 指派擴充資源
若要請求擴充資源,請在您的容器資訊清單中包含 resources:requests
欄位。擴充資源會使用 *.kubernetes.io/
以外的任何網域完全限定。有效的擴充資源名稱具有 example.com/foo
的形式,其中 example.com
會替換為您組織的網域,而 foo
則是描述性資源名稱。
以下是具有一個容器的 Pod 的組態檔
apiVersion: v1
kind: Pod
metadata:
name: extended-resource-demo
spec:
containers:
- name: extended-resource-demo-ctr
image: nginx
resources:
requests:
example.com/dongle: 3
limits:
example.com/dongle: 3
在組態檔中,您可以看到容器請求 3 個 dongle。
建立 Pod
kubectl apply -f https://k8s.io/examples/pods/resource/extended-resource-pod.yaml
驗證 Pod 是否正在執行
kubectl get pod extended-resource-demo
描述 Pod
kubectl describe pod extended-resource-demo
輸出顯示 dongle 請求
Limits:
example.com/dongle: 3
Requests:
example.com/dongle: 3
嘗試建立第二個 Pod
以下是具有一個容器的 Pod 的組態檔。容器請求兩個 dongle。
apiVersion: v1
kind: Pod
metadata:
name: extended-resource-demo-2
spec:
containers:
- name: extended-resource-demo-2-ctr
image: nginx
resources:
requests:
example.com/dongle: 2
limits:
example.com/dongle: 2
Kubernetes 將無法滿足兩個 dongle 的請求,因為第一個 Pod 使用了四個可用 dongle 中的三個。
嘗試建立 Pod
kubectl apply -f https://k8s.io/examples/pods/resource/extended-resource-pod-2.yaml
描述 Pod
kubectl describe pod extended-resource-demo-2
輸出顯示 Pod 無法排程,因為沒有節點有 2 個可用的 dongle
Conditions:
Type Status
PodScheduled False
...
Events:
...
... Warning FailedScheduling pod (extended-resource-demo-2) failed to fit in any node
fit failure summary on nodes : Insufficient example.com/dongle (1)
檢視 Pod 狀態
kubectl get pod extended-resource-demo-2
輸出顯示已建立 Pod,但未排程在節點上執行。其狀態為 Pending
NAME READY STATUS RESTARTS AGE
extended-resource-demo-2 0/1 Pending 0 6m
清除
刪除您為本練習建立的 Pod
kubectl delete pod extended-resource-demo
kubectl delete pod extended-resource-demo-2
下一步
適用於應用程式開發人員
適用於叢集管理員
上次修改時間:2023 年 8 月 24 日下午 6:38 PST:Use code_sample shortcode instead of code shortcode (e8b136c3b3)