ECI能為Kubernetes提供基礎的容器Pod運行環境,但業務間的依賴、負載平衡、Auto Scaling、定期調度等能力依然需要Kubernetes來提供。本文為您介紹阿里雲Container ServiceKubernetes版(簡稱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已經無縫整合到阿里雲Container ServiceKubernetes版中,您可以通過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執行個體的運行情況:
Elastic Container Instance控制台
您可以通過Elastic Container Instance控制台查看ECI執行個體的運行情況。操作步驟如下:
在頂部功能表列左上方處選擇地區。
在容器組頁面,您可以查看該地區下已經建立的ECI執行個體。
Container Service管理主控台
您可以通過Container Service管理主控台來操作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的負載平衡 |
通過Container ServiceKubernetes版使用ECI時,請注意以下事項:
請先將容器鏡像上傳到容器鏡像倉庫中,便於鏡像拉取。推薦您使用阿里雲Container RegistryACR,並使用專用網路的鏡像地址(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。