全部產品
Search
文件中心

Elastic Container Instance:自建Kubernetes叢集對接ECI

更新時間:Jul 06, 2024

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按個數計費。每個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。