當您需要在短時間內快速建立大量Pod時,ECS節點擴容速度可能無法滿足要求,而預留額外的ECS節點又會產生資源浪費。藉助虛擬節點,您無需提前預留和維護固定資源集區,可以直接將Pod調度到虛擬節點上以ECI執行個體來運行,在保障彈性的同時節約資源成本。
為什麼使用虛擬節點
虛擬節點是什麼
在ACK叢集中,節點是運行工作負載的基本單位,提供實際的計算和儲存資源。通常,您的ACK叢集會有至少一組ECS節點池,建立Pod時,kubelet會將Pod調度到ECS節點上運行。這種架構能很好地應對流量穩定的業務。如果您的業務有不易提前預測的瞬時波峰,儘管ACK支援Auto Scaling,但ECS節點池擴容時,ECS執行個體的建立和啟動本身會有一定的額外耗時。藉助虛擬節點,您可以直接調度Pod到阿里雲Elastic Container Instance(Elastic Container Instance)上運行,降低節點營運操作負擔,同時避免產生閑置節點資源,降低成本。
相較於ECS節點,虛擬節點本身不支援自訂Label、Annotation、Taint。
虛擬節點通過ack-virtual-node組件封裝計算資源,無需管理底層基礎設施即可直接部署工作負載,ack-virtual-node會自動將應用Pod調度到ECI上運行。ECI是Serverless容器運行服務,一個ECI執行個體相當於一個Pod。使用ECI部署容器應用時,您只需要提供打包好的容器鏡像,即可運行容器,並僅為容器實際運行消耗的資源付費。
功能優勢
虛擬節點有如下使用優勢。
免營運:無需關心底層資源集區的建立,減少營運負擔。同時,虛擬節點為託管資源,省去Kubernetes節點的常規營運操作,例如系統升級、安全補丁修複等。
超大容量:最多可彈出50,000個Pod,無需提前規劃容量。
重要在Pod大量關聯Service的情況下,建議保持在20,000個以內。
秒級彈性:在極短時間內建立出數千Pod,無需擔心突發業務流量因Pod建立時延受到影響。
安全隔離:Pod基於ECI建立,每個容器執行個體底層通過輕量級虛擬化安全沙箱技術完全強隔離,容器執行個體間互不影響。
節省成本:應用按需建立,隨用隨付,不運行不計費,省去資源閑置費用,同時Serverless帶來更低的營運成本。
使用情境
基於虛擬節點本身的特性和優勢,其典型使用情境如下所示。
線上業務
對於線上教育、電商等時常出現突發流量的線上業務,支援秒級擴容,避免流量激增擴容不及時可能導致的系統故障,以及平時大量閑置資源造成的浪費。
資料處理
處理Spark、Presto等大批量線上資料並發任務時,可以不再因為成本原因受限於底層資源, 從而導致資料處理任務的並發度受限。支援在短時間內快速彈出數千Pod,滿足巨量資料的線上處理訴求。
AI任務
針對模型訓練、模型推理等無需持續運行且需要大量計算資源的AI任務,無需預留資源,按需使用,按秒計費,降低AI推理成本。同時,支援秒級彈性,可以快速響應突發的任務需求。
CI/CD測試環境
針對CI/CD過程中的批量測試工作,例如CI打包、壓力測試、模擬測試等,可以藉助虛擬節點隨時建立和釋放容器執行個體。支援按需使用,按秒計費,實現低成本的大規模資源供應。
Job和CronJob
Job類任務無需持續運行,任務完成後,Job會自動終止,對應的Pod也會被刪除。虛擬節點支援在任務完成後自動停止計費並釋放計算資源,避免資源閑置浪費。
使用限制
請在使用虛擬節點前,瞭解其存在的使用限制。
不支援DaemonSet型工作負載。您可以通過將DaemonSet重新設定為Pod的Sidecar容器來運行。
不支援在Pod
manifest中指定HostPath和HostNetwork。不支援Privileged特權容器。您可以使用Security Context為Pod添加Capability。
說明特權容器功能正在內測中。如需體驗,請提交工單申請。
不支援NodePort類型的Service,不支援配置Session Affinity。
不支援深圳金融雲,不支援政務雲。
計費說明
虛擬節點本身不收費,在虛擬節點上啟動並執行ECI Pod按照ECI計費規則進行計費。具體請參見ECI計費概述。
ECI Pod採用隨用隨付,從Pending狀態開始計費,至Succeeded或Failed狀態停止計費。更多資訊,請參見ECI Pod生命週期。
如何使用虛擬節點
快速體驗
您可以參見將Pod調度到ECI上運行快速體驗虛擬節點的基礎用法。
部署ack-virtual-node組件
在ACK叢集中部署ack-virtual-node組件後,可以啟用虛擬節點功能。
ACK託管叢集
在ACK託管叢集中,需要通過組件管理頁面部署ack-virtual-node組件,該組件預設被託管,不佔用Worker節點資源。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在組件管理頁面的核心組件地區,找到ACK Virtual Node,然後單擊安裝,並按照頁面提示完成操作。
安裝時,使用叢集預設虛擬交換器和安全性群組作為初始ECI配置參數。如需修改,可通過配置eci-profile更新。
ACK專有叢集
在ACK專有叢集中,需要通過應用市場頁面部署ack-virtual-node組件,安裝成功後會在kube-system命名空間下建立一個名為ack-virtual-node-controller的Deployment,該Deployment運行在Worker節點上。
登入Container Service管理主控台,在左側導覽列選擇。
在應用市場頁面單擊應用目錄頁簽,搜尋並選中ack-virtual-node,然後在ack-virtual-node頁面,單擊一鍵部署。
在建立面板中,選擇叢集和命名空間,然後單擊下一步。
命名空間已設定為kube-system,發布名稱已設定為ack-virtual-node。
在參數配置頁面,選擇最新Chart 版本,在參數地區,配置虛擬節點參數,然後單擊確定。
參數
可選屬性
描述
擷取路徑
ALIYUN_CLUSTERID
Required
叢集ID
在叢集資訊頁面的基本資料頁簽擷取叢集ID。
ALIYUN_RESOURCEGROUP_ID
Optional
資源群組ID
不配置時,預設使用預設資源群組。如需配置,登入資源管理主控台,擷取目標資源群組ID。
ECI_REGION
Required
地區ID
在叢集資訊頁面的基本資料頁簽擷取地區資訊。
說明關於地區名稱與地區ID的關係,請參見地區和可用性區域列表。
ECI_VPC
Optional
Virtual Private Cloud ID
在叢集資訊頁面的基本資料頁簽擷取叢集VPC ID。
ECI_VSWITCH
Required
虛擬交換器ID
多個vSwitch ID組成的虛擬交換器列表,用於為業務Pod分配IP。多個vSwitch ID之間使用英文半形逗號(,)分隔,例如
vsw-xxx1, vsw-xxx2。建議與節點池使用相同的虛擬交換器列表。可在節點池頁面的節點池列表,單擊某個節點池,在基本詳情頁簽的節點配置地區,擷取節點vSwitch ID。
說明請確認當前虛擬交換器在ECI支援的可用性區域列表中。
ECI_SECURITY_GROUP
Required
安全性群組ID
在叢集資訊頁面的基本資料頁簽擷取安全性群組ID。
ECI_ACCESS_KEY
Required
您的AccessKey ID
請參見擷取AccessKey。
請授權RAM的AliyunECIFullAccess策略。更多資訊,請參見為RAM使用者授權。
ECI_SECRET_KEY
Required
您的AccessKey Secret
請參見擷取AccessKey。
請授權RAM的AliyunECIFullAccess策略。更多資訊,請參見為RAM使用者授權。
KUBERNETES_APISERVER_HOST
Required
API Server的IP地址
API Server內網串連端點的IP和連接埠。可在叢集資訊頁面的基本資料頁簽查詢。
KUBERNETES_APISERVER_PORT
Required
API Server的連接埠
查看ack-virtual-node組件部署狀態。
kubectl -n kube-system get deploy ack-virtual-node-controller預期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE ack-virtual-node-controller 1/1 1 1 2m31s
將Pod調度到ECI上運行
ACK提供了多種調度方案,可以滿足您在ECS和ECI混合部署情境下的各類調度需求。具體請參見調度Pod至虛擬節點。
ECI Pod預設的CPU架構為x86,作業系統為Linux。如需建立Arm架構的ECI Pod,或者Windows作業系統的ECI Pod,請參見調度至Arm虛擬節點或(邀測)調度Pod到Windows虛擬節點。
靈活配置ECI Pod
對於ECI某些功能特性,例如指定ECI Pod的規格、啟用鏡像緩衝以加速Pod建立、為ECI Pod分配IPv6地址、增加臨時儲存空間大小等,可以通過Pod Annotation來實現。具體請參見ECI Pod Annotation。
通過eci-profile的ECI Effect能力,可以為滿足條件的ECI Pod動態追加所需的Annotation,實現Pod的批量編排。
管理虛擬節點
升級ack-virtual-node組件
為了使用虛擬節點的一些進階特性,後續您可能需要升級ack-virtual-node組件。
升級耗時約1分鐘。升級過程中無法建立Pod,但不影響存量Pod。
ACK託管叢集
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在組件管理頁面的核心組件地區,找到ACK Virtual Node,然後單擊升級,並按照頁面提示完成操作。
ACK專有叢集
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在Helm列表的操作列,單擊ack-virtual-node對應的更新,在版本地區,選擇最新的Chart版本。
在配置參數地區,更新參數,然後單擊確定。
您也可以指定
virtualNode.image.tag,升級鏡像到指定版本。
修改虛擬節點配置
eci-profile中包含了ECI Pod所屬的VPC和交換器、是否啟用ARM虛擬節點等配置,您可以根據需要更新data中的固定配置項。
刪除虛擬節點
卸載ack-virtual-node組件後,虛擬節點會被自動刪除,叢集中的ECI Pod將被自動清理。
檢查叢集中的ECI Pod,確認Pod刪除後不影響業務。
卸載ack-virtual-node組件。
ACK託管叢集:在組件管理頁面卸載ack-virtual-node組件。
ACK專有叢集:在Helm管理頁面刪除ack-virtual-node組件。