ECI能為Kubernetes提供基礎的容器Pod運行環境,但業務間的依賴、負載平衡、Auto Scaling、定期調度等能力依然需要Kubernetes來提供。本文為您介紹自建Kubernetes叢集如何與ECI對接,以及如何使用ECI。
對接方式
ECI為Kubernetes提供一種層次化的解決方案:即ECI負責底層Pod容器資源的調度和管理工作,Kubernetes在ECI之上作為PaaS層來管理業務負載,例如管理Deployment、Service、StatefulSet、CronJob等。
ECI在接管Pod容器底層基礎設施的管理工作後,Kubernetes不再需要直接負責單個Pod的放置、啟動等工作,也不再需要關心底層虛擬機器的資源情況,通過ECI即可確保Pod需要的資源隨時可用。對於長時間啟動並執行業務負載,您可以將此類負載的彈性流量部分調度至ECI,縮短彈性擴容的時間,減少彈性部分的擴容成本,並儘可能充分利用已有資源。當業務流量下降後,可以快速釋放部署在ECI上的Pod,從而降低您的使用成本。
如果您在本地IDC,或者阿里雲的ECS上自建了Kubernetes叢集,則可以通過部署虛擬節點(VNode)的方式來使用ECI。VNode對標原生kubernetes節點,內建了virtual-kubelet、kube-proxy等組件,相容原生kubernetes節點API。當有Pod調度到VNode上時,VNode會自動建立並管理底層的ECI資源。在VNode上啟動並執行每個Pod都對應一個ECI執行個體,架構如下圖所示:
關於自建叢集如何接入VNode,請參見:
計費說明
VNode按個數計費。每個VNode會有一個常駐節點,相當於2 vCPU,8 GiB的ECI執行個體,收取相關執行個體費用。
費用計算公式為:單個VNode費用=(2*vCPU單價+8*記憶體單價)*運行時間長度。
關於ECI執行個體如何計費,以及vCPU和記憶體的具體單價,請參見ECI執行個體計費。
VNode支援標籤功能,您可以為VNode綁定特定標籤,以便區分VNode執行個體費用和普通ECI執行個體費用。
功能限制
基於公用雲端的安全性和虛擬節點本身帶來的限制,ECI目前還不支援Kubernetes中HostPath、DaemonSet等功能,具體如下表所示。
不支援的功能 | 說明 | 推薦替代方案 |
HostPath | 掛載本地宿主機檔案到容器中 | 使用emptyDir、雲端硬碟或者NAS檔案系統 |
HostNetwork | 將宿主機連接埠映射到容器上 | 使用type=LoadBalancer的負載平衡 |
DaemonSet | 在容器所在宿主機上部署Static Pod | 通過sidecar形式在Pod中部署多個鏡像 |
type=NodePort的Service | 將宿主機連接埠映射到容器上 | 使用type=LoadBalancer的負載平衡 |
調度方式
對於混合使用普通節點和虛擬節點的Kubernetes叢集,您可以根據需要將Pod調度到VNode,以ECI來運行。主要方式如下:
手動調度
通過配置nodeSelector和tolerations、指定nodeName的方式,可以手動將Pod調度到VNode。具體操作,請參見將Pod調度到VNode。
自動調度
部署eci-profile組件後,可以自訂配置Selector,將滿足條件的Pod自動調度到VNode。具體操作,請參見使用eci-profile調度Pod到VNode。
使用ECI功能
在Kubernetes叢集中建立Pod到ECI時,為充分使用ECI提供的功能,在不改變Kubernetes語義的前提下,您可以根據需求為Pod添加Annotation。Annotation需添加到Pod層級的metadata中,支援的Annotation列表以及配置樣本,請參見ECI Pod Annotation。
您可以在建立Pod時手動添加Annotation,也可以配置eci-proflie,實現自動添加Annotation到Label能夠匹配上的Pod。