本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
傳統容器運行需要將全量鏡像數據下載后再解包,然而容器啟動可能僅使用其中部分的內容,導致容器啟動耗時長。通過容器鏡像服務企業版的按需加載功能,允許僅下載和解壓容器啟動所必需的部分,而不是整個鏡像,從而大幅提高應用部署速度和提升彈性體驗。
前提條件
已創建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集群對應的專有網絡。加速鏡像需要在專有網絡中使用,更多信息,請參見配置專有網絡的訪問控制。
背景信息
通過容器鏡像服務企業版的按需加載功能,您可以在業務部署中使用加速鏡像版本,實現鏡像數據免全量下載和在線解壓,大幅提升應用分發效率和彈性體驗。鏡像的加速效果與鏡像大小、鏡像倉庫網絡等因素有關。經實測,基于Docker Hub的nodebb鏡像(1.34 GB)啟動應用在鏡像拉取階段需耗費36s,整體應用啟動時間38s?;诩铀夔R像啟動應用在鏡像拉取階段僅需4s,整體應用啟動時間僅需9s。
使用限制
如果您的容器運行時為Containerd,則支持加速鏡像倉庫使用自定義域名,而Docker由于自身限制暫不支持加速鏡像倉庫自定義域名的使用。更多信息,請參見通過自定義域名訪問容器鏡像服務企業版實例。
僅索引模式不支持在FC和SAE的場景下使用。
地域限制
金融云與政務云地域不支持按需加載功能。
轉換加速鏡像
目前支持倉庫級別配置,自動將推送的原始鏡像轉換為加速鏡像。鏡像轉換時間取決于您的鏡像大小,原始鏡像不受任何影響。
加速鏡像的命名空間和倉庫名稱與原始鏡像保持一致,tag格式為原始鏡像tag加_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調度到加速節點。