當您需要在短時間內快速建立大量Pod時,ECS節點擴容速度可能無法滿足要求,而預留額外的ECS節點又會產生資源浪費。藉助ACK虛擬節點,您可以將Pod快速地調度到Elastic Container Instance上運行,無需購買和管理ECS節點。本文介紹如何在ACK託管叢集中將Pod調度到ECI上運行。
適用情境
在ECI上運行Pod適合應對突發流量,也能降低計算成本。典型情境包括:
有明顯波峰波穀的線上業務
線上教育、電商等業務的流量通常有明顯的波峰波穀,使用ECI Pod可以更快速地應對突發流量,並且能顯著減少固定資源集區的維護,降低計算成本。
非持續啟動並執行計算任務
使用ECI Pod運行計算任務,無需保留固定節點,僅需為任務執行期間的計算資源付費,降低計算成本,例如Spark、AI任務等。
前提條件
ACK叢集的Kubernetes版本為1.16及以上,且叢集所在地區支援使用ECI。
您可以參見ECI支援的地區和可用性區域確認是否支援叢集所屬地區,然後登入Elastic Container Instance控制台開通ECI服務。
操作步驟
步驟一:部署ack-virtual-node組件
下文操作以ACK託管叢集為例,ACK專有叢集需要通過應用市場頁面部署ack-virtual-node組件,具體請參見部署ack-virtual-node組件。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在組件管理頁面的核心組件地區,找到ACK Virtual Node,然後單擊安裝,並按照頁面提示完成操作。
安裝時,使用叢集預設虛擬交換器和安全性群組作為初始ECI配置參數。如需修改,可通過配置eci-profile更新。
步驟二:將Pod調度到ECI上運行
下文操作以為Pod或Namespace添加Label的方式為例,介紹如何調度Pod到虛擬節點以ECI運行。更多調度方案請參見調度Pod至虛擬節點。
為Pod添加Label
如果您有個別Pod需要調度到ECI上運行,可以直接為Pod添加特定的Label:alibabacloud.com/eci: "true",該Pod將被調度到x86架構的虛擬節點上以ECI運行。
使用以下YAML建立Deployment。
kubectl create -f eci-pod.yamleci-pod.yaml的內容樣本如下:
說明以下YAML通過
k8s.aliyun.com/eci-use-specs的Annotation指定ECI Pod的規格,如需瞭解更多關於ECI Pod規格配置的方式,請參見指定ECI算力規格。apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx alibabacloud.com/eci: "true" # 添加特定Lable將Pod調度到ECI annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # 指定ECI Pod的vCPU為2 vCPU,記憶體為4 GiB spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80確認Pod是否運行在虛擬節點上。
kubectl get pod -o wide -l app=nginx預期返回如下,在
NODE欄位中可以看到Pod已經調度到虛擬節點。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-86f7fbc94f-g5m22 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-86f7fbc94f-r4wcn 1/1 Running 0 38s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>查看ECI Pod詳情。
kubectl get pod <pod-name> -o yaml在返回的YAML詳情中,您可以通過
k8s.aliyun.com/eci-instance-id擷取對應的ECI執行個體ID,通過k8s.aliyun.com/eci-instance-spec確認ECI Pod的實際計費規格。
為Namespace添加Label
如果您有一類Pod需要調度到ECI上運行,可以建立一個Namespace並添加特定的Label:alibabacloud.com/eci: "true",該Namespace下的所有Pod將被調度到x86架構的虛擬節點上以ECI運行。
建立命名空間
vk,並為命名空間添加特定的Label。kubectl create ns vk kubectl label namespace vk alibabacloud.com/eci=true使用以下YAML在命名空間
vk下建立Deployment。kubectl create -f eci-namespace.yamleci-namespace.yaml的內容樣本如下:
說明以下YAML通過
k8s.aliyun.com/eci-use-specs的Annotation指定ECI Pod的規格,如需瞭解更多關於ECI Pod規格配置的方式,請參見指定ECI算力規格。apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: vk # 指定添加了特定Label的Namespace,將Pod調度到ECI labels: app: test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: name: test labels: app: nginx annotations: k8s.aliyun.com/eci-use-specs: "2-4Gi" # 指定ECI Pod的vCPU為2 vCPU,記憶體為4 GiB spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80確認Pod是否運行在虛擬節點上。
kubectl get pod -o wide -l app=nginx -n vk預期返回如下,在
NODE欄位中可以看到Pod已經調度到虛擬節點。NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-8f54bcfb5-86pvc 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none> test-8f54bcfb5-skvkg 1/1 Running 0 14s 10.16.XX.XX virtual-kubelet-cn-hangzhou-j <none> <none>查看ECI Pod詳情。
kubectl get pod <pod-name> -o yaml -n vk在返回的YAML詳情中,您可以通過
k8s.aliyun.com/eci-instance-id擷取對應的ECI執行個體ID,通過k8s.aliyun.com/eci-instance-spec確認ECI Pod的實際計費規格。