本文主要為您介紹通過虛擬節點運行Job任務的方式,您可以用最小的運維成本(無需調整節點數量)來應對集群計算資源高峰壓力。
背景信息
Kubernetes集群的節點資源配置不足會導致Pod無法及時運行,購買過多的節點又會導致資源的閑置浪費。而虛擬節點就像是Kubernetes集群的“魔法口袋”,讓我們擺脫節點計算力不足的煩擾,也避免了節點的閑置浪費,滿足無限計算力的想象,Pod按需創建,輕松應對計算的波峰波谷。Kubernetes集群大規模使用虛擬節點有以下特點:
業務有明顯的波峰谷特征。
使用ECI作為彈性資源池,應對突發流量和Job任務,最大程度降低計算成本。
本例中,創建的Kubernetes托管版集群中,Master節點被托管(用戶無需付費),2臺Worker均為4c8g規格,所以整個Kubernetes托管版集群的可用計算容量是8c16g。需要運行一個Job離線任務進行數據處理,Job的cpu/mem需求為16c32g。此時Job無法在您創建的Kubernetes托管版集群中運行,因為其資源需求已經超過Kubernetes托管版集群的8c16g計算容量。因此,您可以選擇將這個Job任務調度到虛擬節點上,而不占用集群本身節點的計算資源。
前提條件
您已經創建了一個Kubernetes托管版集群。具體操作,請參見創建Kubernetes托管版集群。
您已經在該集群上部署了一個虛擬節點。具體操作,請參見通過虛擬節點將Pod調度到ECI上運行。
您已經給namespace vk打上alibabacloud.com/eci=true標簽。具體操作,請參見通過配置namespace標簽的方式創建Pod。
通過kubectl連接Kubernetes集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
操作步驟
通過kubectl客戶端創建job.yaml文件,并將以下內容復制到該文件中。
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] resources: requests: cpu: 16 memory: 32Gi restartPolicy: Never backoffLimit: 4
執行以下命令部署一個job任務。
kubectl -n vk apply -f job.yaml
查看Pod的運行狀態。
執行以下命令查看Pod的狀態。
kubectl -n vk get pod -a
預期輸出:
NAME READY STATUS RESTARTS AGE pi-7cmwv 0/1 Completed 0 2m
執行以下命令查看Pod的具體運行狀態。
kubectl -n vk describe pod
預期輸出:
Name: pi-7cmwv Namespace: vk Priority: 0 PriorityClassName: <none> Node: virtual-kubelet/ ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m default-scheduler Successfully assigned vk/pi-7cmwv to virtual-kubelet Normal SuccessfulMountVolume 2m kubelet, eci MountVolume.SetUp succeeded for volume "default-token-b2tff" Normal Pulling 2m kubelet, eci pulling image "perl" Normal Pulled 2m kubelet, eci Successfully pulled image "perl" Normal Created 2m kubelet, eci Created container Normal Started 2m kubelet, eci Started container
說明虛擬節點中的Pod完全是按需收費,當Pod執行完成后就會停止收費。
因此,可以看到使用虛擬節點運行Job短時間任務可以節省計算成本,減輕集群運維負擔,您無需關心集群的計算資源是否充足,也無需關心節點的擴容和縮容問題。