ECI能為Kubernetes提供基礎的容器Pod運行環境,但業務間的依賴、負載均衡、彈性伸縮、定期調度等能力依然需要Kubernetes來提供。本文為您介紹阿里云容器服務Kubernetes版(簡稱ACK)如何與ECI對接,使用ECI作為Pod的運行資源。
對接方式
ECI為Kubernetes提供一種層次化的解決方案:即ECI負責底層Pod容器資源的調度和管理工作,Kubernetes在ECI之上作為PaaS層來管理業務負載,例如管理Deployment、Service、StatefulSet、CronJob等。
基于Kubernetes社區的Virtual Kubelet(簡稱VK)技術,ECI可以以虛擬節點的形式接入到Kubernetes集群中,使得集群可以輕松獲得極大的彈性能力,而不必受限于集群的節點計算容量。ECI在接管Pod容器底層基礎設施的管理工作后,Kubernetes不再需要直接負責單個Pod的放置、啟動等工作,也不再需要關心底層虛擬機的資源情況,通過ECI即可確保Pod需要的資源隨時可用。
目前ECI已經無縫集成到阿里云容器服務Kubernetes版中,您可以通過ACK Serverless集群或者ACK集群,快速體驗ECI的容器運行能力。
ACK Serverless集群(完全基于ECI)
依托ECI免運維的特性,Kubernetes可以完全依托ECI來構建,即所有Pod均運行在ECI上,Kubernetes僅需要負責管理業務負載,無需關注底層虛擬機的運維和容量問題。
如果您正在進行Kubernetes集群的選型,強烈推薦您選用ACK Serverless集群。ACK Serverless集群可以為您提供完全基于ECI運行的Kubernetes集群,為您的在線和離線業務、仿真環境、開發測試環境等提供免運維、低成本的Kubernetes環境。
低成本
您無需購買節點,無需對集群進行節點維護和容量規劃,即可直接部署容器應用,并且只需要為應用配置的CPU和內存資源量進行按需付費。
免運維
您可以直接使用Kubernetes API或者命令行直接管理容器應用。同時,ACK Serverless集群集成阿里云各類服務,可以幫助您簡化Kubernetes的開發,專注于應用構建而非基礎架構運維。
在ACK Serverless集群中,您無需手動部署虛擬節點,可以直接創建ECI Pod。ACK Serverless集群中的所有Pod均基于ECI運行在安全隔離的容器運行環境中,每個Pod對應一個ECI實例。更多信息,請參見ACK Serverless概述。
ACK集群(混合使用ECI和ECS)
ACK是全球首批通過Kubernetes一致性認證的服務平臺,提供高性能的容器應用管理服務。它整合了阿里云虛擬化、存儲、網絡和安全能力,簡化集群的搭建和擴容等工作,讓您專注于容器化的應用的開發與管理。
如果您已經建立了ACK集群,可以通過部署虛擬節點(基于VK)的方式來使用ECI。有了虛擬節點后,當您的ACK集群需要擴容時,無需規劃節點的計算容量,可以直接在虛擬節點下按需創建ECI,ECI與集群中真實節點上的Pod之間網絡互通。建議您將長時間運行的業務負載的彈性流量部分調度至ECI,這可以縮短彈性擴容的時間,減少擴容成本,并充分利用已有資源。當業務流量下降后,您可以快速釋放部署在ECI上的Pod,從而降低使用成本。
在ACK集群中,您需要手動部署虛擬節點(基于VK),才能創建ECI Pod。虛擬節點上的Pod均基于ECI運行在安全隔離的容器運行環境中,每個Pod對應一個ECI實例。更多信息,請參見ACK產品概述。
如果您在阿里云ECS上或者線下IDC自建了Kubernetes集群,需要自行部署虛擬節點(基于VNode)來使用ECI,更多信息,請參見自建Kubernetes集群對接ECI。
管理工具
通過VK將ECI以虛擬節點的方式接入Kubernetes集群后,您可以通過以下方式管理Kubernetes集群及ECI實例的運行情況:
彈性容器實例控制臺
您可以通過彈性容器實例控制臺查看ECI實例的運行情況。操作步驟如下:
登錄彈性容器實例控制臺。
在頂部菜單欄左上角處選擇地域。
在容器組頁面,您可以查看該地域下已經創建的ECI實例。
容器服務管理控制臺
您可以通過容器服務管理控制臺來操作ACK Serverless集群或ACK集群,并查看ECI實例的運行情況。查看ECI實例的操作步驟如下:
登錄容器服務管理控制臺。
在左側導航欄單擊集群。
在集群列表中找到想要查看的集群,單擊集群ID進入詳情頁面。
在左側導航欄,選擇工作負載>容器組。
在容器組頁面,選擇命名空間,您可以查看該命名空間下的ECI實例。
阿里云CloudShell
您可以通過阿里云提供的CloudShell來訪問Kubernetes集群,使用Kubectl命令來管理集群。具體操作,請參見在CloudShell上通過kubectl管理Kubernetes集群。
kubectl客戶端
您可以通過kubectl客戶端在本地計算機來訪問遠端的Kubernetes集群,使用Kubectl命令來管理集群。具體操作,請參見通過kubectl連接Kubernetes集群。
功能限制和說明
基于公有云的安全性和虛擬節點本身帶來的限制,ECI目前還不支持Kubernetes中HostPath、DaemonSet等功能,具體如下表所示。
不支持的功能 | 說明 | 推薦替代方案 |
HostPath | 掛載本地宿主機文件到容器中 | 使用emptyDir、云盤或者NAS文件系統 |
HostNetwork | 將宿主機端口映射到容器上 | 使用type=LoadBalancer的負載均衡 |
DaemonSet | 在容器所在宿主機上部署Static Pod | 通過sidecar形式在Pod中部署多個鏡像 |
type=NodePort的Service | 將宿主機端口映射到容器上 | 使用type=LoadBalancer的負載均衡 |
通過容器服務Kubernetes版使用ECI時,請注意以下事項:
請先將容器鏡像上傳到容器鏡像倉庫中,便于鏡像拉取。推薦您使用阿里云容器鏡像服務ACR,并使用專有網絡的鏡像地址(registry-vpc.xxx)。
支持Deployment、ReplicaSet、Job、Cronjob、StatefulSet等常見controller,可以直接運行。
支持利用PrivateZone實現服務發現,建議您在創建集群時開啟PrivateZone。
支持負載均衡,即配置type=LoadBalancer的Service。
使用流程
ACK Serverless集群
ACK集群
創建ACK集群。具體操作,請參見創建ACK托管集群。
部署ack-virtual-node組件生成虛擬節點。具體操作,請參見部署ACK虛擬節點組件。
說明如果想要使用ECI相關的新功能,您需要升級ack-virtual-node組件。
關于ack-virtual-node組件的版本信息,請參見ack-virtual-node。
關于如何升級組件,請參見管理組件。
準備容器鏡像。
創建ECI Pod。更多信息,請參見ECI Pod概述。
調度方式
對于ACK Serverless集群,整個集群運行在ECI上,無需進行調度。對于混合使用ECI和ECS節點的ACK集群,您可以根據需要將Pod調度到ECI上運行,調度方式如下:
手動調度Pod到ECI
通過配置Pod Label、添加nodeSelector,配置topologySpreadConstraints等方式,可以手動將Pod調度到指定的虛擬節點,以ECI來運行。
自動調度Pod到ECI
eci-profile提供ECI Scheduler能力,基于Mutating Webhook機制實現了一種新的調度機制,即在eci-profile配置文件中,您可以聲明需要匹配的Namespace或者Pod的Label,對于Label能夠匹配上的Pod,將被自動調度到ECI。更多信息,請參見配置eci-profile。
使用ECI功能
在Kubernetes集群中創建Pod到ECI時,為充分使用ECI提供的功能,在不改變Kubernetes語義的前提下,您可以根據需求為Pod添加Annotation。Annotation需添加到Pod級別的metadata中,支持的Annotation列表以及配置示例,請參見ECI Pod Annotation。
您可以在創建Pod時手動添加Annotation,也可以配置eci-profile,實現自動添加Annotation到Label能夠匹配上的Pod。