本文主要為您介紹通過虛擬節點運行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短時間任務可以節省計算成本,減輕叢集營運負擔,您無需關心叢集的計算資源是否充足,也無需關心節點的擴容和縮容。