ECI能為Kubernetes提供基礎的容器Pod運行環境,每個ECI執行個體相當於一個Pod。本文主要介紹Elastic Container Instance Pod的使用準備工作、使用限制以及核心功能,包括安全隔離、CPU/Memory資源和規格配置、鏡像拉取、儲存、網路、日誌收集等。
前提條件
已建立ACK叢集或ACK Serverless叢集,並已在叢集中部署虛擬節點。詳情請參見建立叢集和步驟一:部署ack-virtual-node組件。
已開通Elastic Container Instance服務。登入Elastic Container Instance控制台開通相應的服務。
Kubernetes應用限制
ACK的虛擬節點基於Kubernetes社區的Virtual Kubelet技術實現。ACK Serverless叢集會通過虛擬節點實現與ECI的無縫對接。因此ECI執行個體並不會運行在一個集中式的真實節點上,而是打散分布在整個阿里雲的資源集區中。
基於公用雲端的安全性和虛擬節點本身帶來的限制,ECI目前還不支援Kubernetes中HostPath、DaemonSet等功能,具體如下表所示。
不支援的功能 | 說明 | 推薦替代方案 |
HostPath | 掛載本地宿主機檔案到容器中 | 使用emptyDir、雲端硬碟或者NAS檔案系統 |
HostNetwork | 將宿主機連接埠映射到容器上 | 使用type=LoadBalancer的負載平衡 |
DaemonSet | 在容器所在宿主機上部署Static Pod | 通過sidecar形式在Pod中部署多個鏡像 |
Privileged許可權 | 容器擁有privileged許可權 | 使用Security Context為Pod添加Capability |
type=NodePort的Service | 將宿主機連接埠映射到容器上 | 使用type=LoadBalancer的負載平衡 |
核心功能
安全隔離
作為安全可靠的Serverless容器運行環境,每個ECI執行個體底層通過輕量級安全沙箱技術完全強隔離,執行個體間互不影響。同時,不同虛擬節點上的ECI Pod分布在不同的可用性區域,且同一可用性區域上的執行個體在調度時儘可能分布在不同的物理機上,進一步保障了高可用性。
CPU/Memory資源或規格配置
功能項 | 說明 |
指定vCPU和Memory來申請資源和計費 | |
指定Pod的ECS規格 | |
搶佔式執行個體 | 您可以通過配置Annotation使用Spot可搶佔式執行個體,大幅降低計算成本。搶佔式執行個體的詳細資料,請參見使用搶佔式執行個體。 |
鏡像拉取與緩衝
鏡像拉取
ECI Pod預設每次啟動後使用內部的containerd從遠端拉取容器鏡像。如果鏡像為公用鏡像,則需要開通VPC的公網NAT Gateway,或者給ECI Pod掛載EIP。建議您將容器鏡像儲存在阿里雲鏡像倉庫(ACR),通過VPC網路減少鏡像拉取時間。另外,對於ACR上的私人鏡像,實現了免密拉取功能,方便您使用。
鏡像緩衝
為加速執行個體的建立速度,ECI提供鏡像緩衝功能。您可以預先將需要使用的鏡像製作成緩衝快照,然後基於該快照來建立ECI執行個體,避免或減少鏡像層的下載,從而提升執行個體的建立速度。鏡像緩衝的建立分為手動建立和自動建立兩種方式,具體操作,請參見使用ImageCache加速建立Pod。
儲存
支援多種使用儲存的方式:
CSI:
CSI是當前Kubernetes社區推薦的外掛程式實現方案,阿里雲提供的CSI外掛程式主要包括以下幾部分:
CSI-Plugin:實現資料卷的掛載、卸載功能。
CSI-Provisioner:實現資料卷的自動建立能力,目前支援雲端硬碟、NAS兩種資料卷建立能力。
NFS:參考樣本。
PV/PVC:參考樣本。
網路
ECI Pod預設使用Host網路模式,佔用交換器vSwitch的一個彈性網卡ENI資源。
在Kubernetes叢集環境中,ECI Pod與ECS節點上的Pod互聯互連,方法如下:
LoadBalancer Service掛載ECI Pod:也可以支援Service同時掛載ECS節點上的Pod和ECI Pod。
訪問ClusterIP Service:ECI Pod可以訪問叢集中的ClusterIP地址。
掛載EIP:支援給ECI Pod掛載EIP,可自動建立或者綁定到已有的EIP執行個體。
日誌採集
您可以直接配置Pod的Env收集stdout
或者檔案日誌,將其採集到阿里雲Log ServiceSLS中。一般情況下,您無需額外部署一個logtail sidecar
容器。
支援和追加的Annotation
您可以在Pod Spec中配置Annotation,充分使用ECI提供的功能。詳細資料,請參見ECI Pod Annotation。