容器鏡像是按層儲存的壓縮資料,容器啟動時通常需要下載並逐層解壓容器鏡像資料。在多數業務情境下,容器運行時僅需要讀取容器鏡像中一部分資料,運行時無需讀取的冗餘鏡像資料的下載和解壓流程消耗了系統資源,增加容器啟動耗時。ACK基於DADI(Data Accelerator for Disaggregated Infrastructure)鏡像加速支援人員容器鏡像的按需載入,實現鏡像資料免全量下載以及線上解壓,以顯著縮短應用啟動時間。
加速效果
鏡像的加速效果與鏡像大小、鏡像倉庫網路等因素有關。經實測,基於Docker Hub的NodeBB鏡像(1.34 GB)啟動應用在鏡像拉取階段需耗費36s,整體應用啟動時間38s。基於加速鏡像啟動應用在鏡像拉取階段僅需4s,整體應用啟動時間僅需9s。
以上鏡像拉取耗時資料僅為參考值,在不同作業環境中可能有所不同,請以實際情況為準。
適用範圍
步驟一:擷取加速鏡像
可以通過開源工具將現有容器鏡像轉換為DADI加速鏡像格式,也可以使用ACR企業版提供的按需載入容器鏡像功能來將現有容器鏡像轉換為 DADI 加速鏡像格式。
使用開源方式
可以通過DADI將現有容器鏡像轉換為DADI鏡像格式,操作步驟如下所示。
執行以下命令,安裝snapshotter依賴。
# 下載執行個體架構支援的安裝包。 wget https://github.com/containerd/accelerated-container-image/releases/download/v1.2.3/overlaybd-snapshotter-1.2.3-20241016090917.0c2f057.x86_64.rpm rpm -ivh overlaybd-snapshotter-1.2.3-20241016090917.0c2f057.x86_64.rpm執行以下命令,安裝overlaybd依賴。
# 下載執行個體架構支援的安裝包。 wget https://github.com/containerd/overlaybd/releases/download/v1.0.13/overlaybd-1.0.13-20240821.a117098.el8.x86_64.rpm rpm -ivh overlaybd-1.0.13-20240821.a117098.el8.x86_64.rpm執行如下命令轉換鏡像。
本樣本以ACR鏡像倉庫作為鏡像儲存服務。如需使用自我維護的鏡像倉庫,請修改樣本指令中的鏡像地址及帳號、密碼。
/opt/overlaybd/snapshotter/convertor -u user:password -r xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis -i latest -o latest_obd_new
使用ACR企業版
ACR企業版(標準版或進階版)支援在倉庫層級配置按需載入容器鏡像,並自動將推送的原始鏡像轉換為加速鏡像。鏡像轉換時間取決於鏡像大小,原始鏡像不受任何影響。更多資訊及使用限制,請參見按需載入容器鏡像。
加速鏡像的命名空間和倉庫名稱與原始鏡像保持一致,Tag格式為原始鏡像tag加_accelerated尾碼。
登入Container Registry控制台,在頂部功能表列,選擇所需地區。
在左側導覽列,選擇執行個體列表,在執行個體列表頁面單擊目標企業版執行個體。
在左側導覽列,選擇。
單擊目標鏡像倉庫名稱,進入基本資料頁面,單擊頁面左上方編輯。
在修改基本資料對話方塊,開啟鏡像加速,選擇完整模式,然後單擊確定。
說明完成鏡像加速轉換設定後,後續推送的鏡像將自動觸發鏡像轉換任務。如需接收鏡像轉換完成的通知,可以配置事件通知。例如將運算式設定為
_accelerated$,更多資訊,請參見事件通知。
步驟二:開啟節點池容器鏡像加速功能
為了支援DADI加速鏡像,可以在ACK控制台中,通過節點池的容器鏡像加速開關,為建立節點池或存量節點池啟用節點的鏡像加速功能。
為建立節點池時開啟
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在節點池頁面,參見建立和管理節點池完成配置並勾選進階選項中容器鏡像加速。
為已有節點池開啟
開啟或關閉節點池容器鏡像加速開關後,僅對新增節點生效。如需針對存量節點生效,需要將節點移除出節點池後,重新添加回節點池,相關操作,請參見移除節點並添加已有節點。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在節點池列表頁面,單擊目標節點池所在行操作列的編輯,在進階選項中,勾選容器鏡像加速,按照頁面提示更新節點池的配置項。
在節點池列表,如果節點池狀態顯示更新中,表明節點池正在變更中。顯示已啟用,表明變更已完成。
步驟三:使用加速鏡像建立應用
配置容器鏡像拉取憑證
安裝aliyun-acr-acceleration-suite組件
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在其他地區,定位aliyun-acr-acceleration-suite,單擊右側的安裝。
配置拉取憑證
如果應用無需使用鏡像密鑰拉取私人鏡像,可跳過此步驟,直接建立使用加速鏡像的應用。
可以參見下文配置鏡像拉取憑證。
為ACR企業版執行個體配置免密外掛程式
安裝配置免密外掛程式。在ACK中正確安裝免密外掛程式後,系統將自動為合格工作負載注入ACR倉庫的訪問憑證,無需手動維護訪問憑證的生命週期以及管理其與工作負載的關聯。具體操作,請參見免密拉取ACR鏡像。
為自建鏡像倉庫手動建立Secret
執行以下命令,建立
kubernetes.io/dockerconfigjson類型的Secret,配置容器鏡像倉庫的帳號、密碼。kubectl create secret docker-registry <SecretName> --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>執行以下命令,為Secret添加標籤
images.alibabacloud.com/accelerated: true。kubectl label secrets <SecretName> images.alibabacloud.com/accelerated="true"
建立使用加速鏡像的應用
使用以下樣本內容建立和更新Pod,將調度到加速節點。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
alibabacloud.com/image-accelerate-enabled: "true" # 此處增加節點選擇標籤
containers:
- name: test
image: xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis:latest_obd_new # 此處填入加速鏡像地址
command: ["sleep", "3600"]關閉容器鏡像加速
如果不再需要使用DADI加速鏡像,可在ACK控制台中,通過節點池的容器鏡像加速開關,關閉節點的鏡像加速功能。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在節點池列表頁面,單擊目標節點池所在行操作列的編輯,在進階選項中,將容器鏡像加速的勾選移除,按照頁面提示更新節點池的配置項。如果節點池狀態為已啟用,表明變更已完成。
相關文檔
如需通過資料盤緩衝方式加速工作負載和節點初始化的速度,請參見通過資料盤快照加速ACK節點擴容。