ECI能為Kubernetes提供基礎的容器Pod運行環境,但業務間的依賴、負載均衡、彈性伸縮、定期調度等能力依然需要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。