傳統容器運行需要將全量鏡像資料下載後再解包,然而容器啟動可能僅使用其中部分的內容,導致容器啟動耗時間長度。通過Container Registry企業版的按需載入功能,允許僅下載和解壓容器啟動所必需的部分,而不是整個鏡像,從而大幅提高應用部署速度和提升彈性體驗。
前提條件
已建立ACK、ACK Edge叢集、ACK Serverless叢集和容器計算服務ACS。更多資訊,請參見建立ACK託管叢集、建立ACK Edge叢集、建立叢集、建立ACS叢集。
說明僅支援在版本≥1.16.9的託管版、專有版,≥1.26.3的ACK Edge叢集和ACK Serverless叢集上使用加速鏡像。且建立叢集時作業系統為Alibaba Cloud Linux 2.1903、Alibaba Cloud Linux 3.2104、Alibaba Cloud Linux 3.2104 LTS 64 bit ARM edition、Alibaba Cloud Linux UEFI 2.1903、CentOS 7.9。
已建立企業版執行個體,更多資訊,請參見建立企業版執行個體。
說明在鏡像加速中,兩種模式支援的企業版執行個體規格有所不同:
完整模式:支援的企業版執行個體為標準版或進階版。
僅索引模式:支援的企業版執行個體為基礎版、標準版或進階版。
已在企業版執行個體中配置ACK或ACK Serverless叢集對應的專用網路。加速鏡像需要在專用網路中使用,更多資訊,請參見配置專用網路的存取控制。
背景資訊
通過Container Registry企業版的按需載入功能,您可以在業務部署中使用加速鏡像版本,實現鏡像資料免全量下載和線上解壓,大幅提升應用分發效率和彈性體驗。鏡像的加速效果與鏡像大小、鏡像倉庫網路等因素有關。經實測,基於Docker Hub的nodebb鏡像(1.34 GB)啟動應用在鏡像拉取階段需耗費36s,整體應用啟動時間38s。基於加速鏡像啟動應用在鏡像拉取階段僅需4s,整體應用啟動時間僅需9s。
使用限制
如果您的容器運行時為Containerd,則支援加速鏡像倉庫使用自訂網域名,而Docker由於自身限制暫不支援加速鏡像倉庫自訂網域名的使用。更多資訊,請參見通過自訂網域名訪問Container Registry企業版執行個體。
僅索引模式不支援在FC和SAE的情境下使用。
地區限制
金融雲與政務雲地區不支援按需載入功能。
轉換加速鏡像
目前支援倉庫層級配置,自動將推送的原始鏡像轉換為加速鏡像。鏡像轉換時間取決於您的鏡像大小,原始鏡像不受任何影響。
加速鏡像的命名空間和倉庫名稱與原始鏡像保持一致,Tag格式為:
僅索引模式:原始鏡像tag+
_accelerated
尾碼的加速鏡像僅支援Containerd運行時,且使用時原始鏡像tag
不可刪除。完整模式:
原始鏡像
tag
+_accelerated
尾碼的加速鏡像。支援Docker和Containerd運行時原始鏡像
tag
+_containerd_accelerated
尾碼的加速鏡像僅適用於Containerd運行時。注意使用時
_containerd_accelerated
尾碼的鏡像均不可刪除。
在頂部功能表列,選擇所需地區。
在左側導覽列,選擇執行個體列表。
在執行個體列表頁面單擊目標企業版執行個體。
在企業版執行個體管理頁左側導覽列中選擇 。
在鏡像倉庫頁面單擊目標鏡像倉庫名稱或目標鏡像倉庫右側操作列下的管理。
在基本資料頁面左上方單擊編輯。
在修改基本資料對話方塊中,開啟鏡像加速,並選擇所需模式後,單擊確定。
完整模式:容器啟動的加速效果較為顯著,轉換產生的加速鏡像體積約為130%原鏡像體積,1GB原始鏡像產生加速鏡像的時間約為25秒,已產生的鏡像層不會重複產生。
僅索引模式:容器啟動的加速效果約為70%完整模式加速效果,加速鏡像體積約為3%原鏡像體積,1GB原始鏡像產生加速鏡像時間約為3秒,已產生索引的鏡像層不會重複產生。
重要僅索引模式正在公測中,建議您使用前先在測試環境進行驗證,驗證適用您的業務情境後再應用到生產環境中。
說明僅索引模式目前僅適用於
tar
和tgz
壓縮的鏡像,不適用於其他壓縮方式(如zstd
壓縮)的鏡像。僅索引模式需要綁定原始鏡像使用,使用時原始鏡像不可刪除,完整模式可以獨立使用加速鏡像。
僅索引模式不支援Docker運行時使用。
在完成鏡像加速轉換設定後,您後續推送的鏡像將自動觸發鏡像轉換任務。若您希望接收鏡像轉換完成的通知,可以配置事件通知。例如將運算式設定為
_accelerated$
,更多資訊,請參見事件通知。
安裝鏡像加速組件
為了啟動加速容器,需要在Worker節點安裝按需載入相關的鏡像儲存外掛程式。
為節點添加鏡像加速標籤。
在建立Worker節點時,您可以為節點添加鏡像加速標籤(alibabacloud.com/image-accelerate-enabled: true),以便在節點初始化時開啟鏡像加速能力。設定鏡像加速標籤後,在節點初始化過程中會自動安裝鏡像儲存外掛程式。
說明加速容器需運行在加速節點上,加速節點可同時支援普通容器與加速容器的運行。
如果是為存量節點設定該標籤,則不會生效。
如果是為virtual-kubelet虛擬節點設定該標籤,則會直接生效。
叢集建立時添加鏡像加速標籤。
您可以在建立叢集時,設定標籤為alibabacloud.com/image-accelerate-enabled: true。更多資訊,請參見建立ACK託管叢集。
擴容節點時添加鏡像加速標籤。
您可以設定節點池新擴容的節點的標籤為alibabacloud.com/image-accelerate-enabled: true。更多資訊,請參見建立和管理節點池。
說明您可以建立單獨的節點池以便統一管理具備鏡像加速能力的節點。
添加已有節點時添加鏡像加速標籤。
您可以在添加已有節點時,設定標籤為alibabacloud.com/image-accelerate-enabled: true。更多資訊,請參見添加已有節點。
安裝鏡像加速組件。
在控制台左側導覽列,單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面的其他地區找到aliyun-acr-acceleration-suite,單擊右側的安裝。
在提示對話方塊中單擊確定。
在叢集管理頁面左側導覽列,選擇
,在守護進程集頁面,查看組件守護進程安裝詳情。在叢集管理頁面左側導覽列,選擇
,在無狀態頁面查看組件無狀態應用安裝詳情。
當目標組件的容器組數量顯示全部啟動完成,表示組件安裝成功。
卸載鏡像加速組件
卸載前請確保目前無正在啟動並執行加速容器。
在叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列選擇 。
在組件管理頁面其他地區找到aliyun-acr-acceleration-suite,單擊右側的卸載。
在提示對話方塊中單擊確定。
啟用加速鏡像
設定鏡像倉庫訪問憑證。
鏡像免密外掛程式方式。
若已使用免密外掛程式,且企業版執行個體的免密配置正確,無需其他動作。
若未使用免密外掛程式,您可使用免密外掛程式,更多資訊,請參見使用免密組件拉取容器鏡像。
指定鏡像拉取憑證Secret的名稱首碼方式。
警告請確保您的鏡像拉取密鑰許可權按最小許可權原則配置,僅包含拉取本叢集所需業務鏡像的許可權。更多詳情,請參見授予RAM使用者自訂策略。
建立名稱以acr-credential-開頭的、類型為kubernetes.io/dockerconfigjson的Secret。
kubectl create secret docker-registry acr-credential-test --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>
指定鏡像拉取憑證Secret的標籤方式。
說明僅鏡像加速組件的版本不小於0.2.6支援該方式。
建立kubernetes.io/dockerconfigjson的Secret,並為其打上images.alibabacloud.com/accelerated: true的標籤。
kubectl create secret docker-registry <SecretName> --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>
kubectl label secrets <SecretName> images.alibabacloud.com/accelerated="true"
添加鏡像加速標籤。
您可以為應用負載添加鏡像加速標籤,例如Pod、Deployment等。也可以為ACK或ACK Serverless叢集的命名空間設定標籤,該命名空間內的所有符合加速條件的應用負載會啟用按需載入容器鏡像,無需再修改所有符合加速條件的應用負載的YAML檔案。根據實際情況選擇任一方式添加鏡像加速標籤。
說明標籤的名稱為
k8s.aliyun.com/image-accelerate-mode
,值為on-demand
。為應用負載添加鏡像加速標籤。
以下以Pod為例設定標籤。執行以下命令,為Deployment管理的Pod設定標籤。
kubectl edit deployment <Deployment名稱> -n <Deployment命名空間>
在Deployment的YAML描述檔案中添加標籤
k8s.aliyun.com/image-accelerate-mode: on-demand
。apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx # enable on-demand mode k8s.aliyun.com/image-accelerate-mode: on-demand spec: containers: # your ACR instacne image - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest name: test command: ["sleep", "3600"]
為命名空間添加鏡像加速標籤
通過控制台添加鏡像加速標籤。
在控制台左側導覽列中,單擊叢集。
在叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情。
在叢集管理頁左側導覽列單擊命名空間與配額。
在命名空間頁面單擊目標命名空間操作列的編輯。
在編輯命名空間對話方塊中設定標籤的變數名稱為
k8s.aliyun.com/image-accelerate-mode
,標籤的變數值為on-demand
,然後單擊確定。
通過命令列添加鏡像加速標籤。
kubectl label namespaces <YOUR-NAMESPACE> k8s.aliyun.com/image-accelerate-mode=on-demand
設定加速標籤後,如果您已完成普通鏡像到加速鏡像的轉換,在相應命名空間內建立和更新Pod時,加速組件會自動將Pod的原始鏡像地址替換為加速鏡像地址,並添加nodeSelector,將Pod調度到加速節點。