全部產品
Search
文件中心

Container Registry:按需載入容器鏡像

更新時間:Aug 03, 2024

傳統容器運行需要將全量鏡像資料下載後再解包,然而容器啟動可能僅使用其中部分的內容,導致容器啟動耗時間長度。通過Container Registry企業版的按需載入功能,允許僅下載和解壓容器啟動所必需的部分,而不是整個鏡像,從而大幅提高應用部署速度和提升彈性體驗。

前提條件

  • 已建立ACK或ACK Serverless叢集。更多資訊,請參見建立ACK託管叢集建立叢集

    說明

    僅支援在版本≥1.16.9的託管版、專有版和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企業版執行個體

地區限制

金融雲與政務雲地區不支援按需載入功能。

轉換加速鏡像

目前支援倉庫層級配置,自動將推送的原始鏡像轉換為加速鏡像。鏡像轉換時間取決於您的鏡像大小,原始鏡像不受任何影響。

說明

加速鏡像的命名空間和倉庫名稱與原始鏡像保持一致,tag格式為原始鏡像tag加_accelerated尾碼。

  1. 登入Container Registry控制台

  2. 在頂部功能表列,選擇所需地區。

  3. 在左側導覽列,選擇執行個體列表

  4. 執行個體列表頁面單擊目標企業版執行個體。

  5. 在企業版執行個體管理頁左側導覽列中選擇倉庫管理 > 鏡像倉庫

  6. 在鏡像倉庫頁面單擊目標鏡像倉庫名稱或目標鏡像倉庫右側操作列下的管理

  7. 在基本資料頁面左上方單擊編輯

  8. 修改基本資料對話方塊中,開啟鏡像加速,單擊確定

安裝鏡像加速組件

為了啟動加速容器,需要在Worker節點安裝按需載入相關的鏡像儲存外掛程式。

  1. 為節點添加鏡像加速標籤。

    在建立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。更多資訊,請參見添加已有節點

  2. 安裝鏡像加速組件。

    1. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

    4. 組件管理頁面的其他地區找到aliyun-acr-acceleration-suite,單擊右側的安裝

    5. 提示對話方塊中單擊確定

      • 叢集管理頁面左側導覽列,選擇工作負載 > 守護進程集,在守護進程集頁面,查看組件守護進程安裝詳情。

      • 叢集管理頁面左側導覽列,選擇工作負載 > 無狀態,在無狀態頁面查看組件無狀態應用安裝詳情。

      當目標組件的容器組數量顯示全部啟動完成,表示組件安裝成功。

卸載鏡像加速組件

重要

卸載前請確保目前無正在啟動並執行加速容器。

  1. 登入Container Service管理主控台

  2. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  3. 在叢集管理頁左側導覽列選擇營運管理 > 組件管理

  4. 組件管理頁面其他地區找到aliyun-acr-acceleration-suite,單擊右側的卸載

  5. 提示對話方塊中單擊確定

啟用加速鏡像

  1. 設定鏡像倉庫訪問憑證。

    • 鏡像免密外掛程式方式。

      • 若已使用免密外掛程式,且企業版執行個體的免密配置正確,無需其他動作。

      • 若未使用免密外掛程式,您可使用免密外掛程式,更多資訊,請參見使用免密組件拉取容器鏡像

    • 指定鏡像拉取憑證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"
  2. 添加鏡像加速標籤。

    您可以為應用負載添加鏡像加速標籤,例如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"]
    • 為命名空間添加鏡像加速標籤

      • 通過控制台添加鏡像加速標籤。

        1. 登入Container Service管理主控台

        2. 在控制台左側導覽列中,單擊叢集

        3. 叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

        4. 在叢集管理頁左側導覽列單擊命名空間與配額

        5. 命名空間頁面單擊目標命名空間操作列的編輯

        6. 編輯命名空間對話方塊中設定標籤變數名稱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調度到加速節點。