在拉取阿里雲鏡像服務ACR中的鏡像時,您可以通過配置免密簡化配置,加速鏡像拉取。本文介紹如何在工作流程叢集中使用鏡像緩衝加速建立工作流程Pod。
前提條件
已建立ACR企業版執行個體並完成鏡像倉庫相關配置。具體操作,請參見使用企業版執行個體推送和拉取鏡像。
已記錄ACR企業版執行個體ID、地區、網域名稱等資訊。
步驟一:配置workflow免密拉取ACR企業版鏡像
通過在workflow.yaml檔案中增加Pod的annotations: k8s.aliyun.com/acr-instance-id指定鏡像所在的ACR企業版執行個體,其中acr-instance-id配置格式為ACR企業版執行個體所在地區:執行個體ID,如果工作流程與ACR企業版執行個體在同一地區,則直接配置ACR企業版執行個體ID,省略地區。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
spec:
entrypoint: whalesay
podMetadata:
annotations:
k8s.aliyun.com/acr-instance-id: "cn-hangzhou:cri-f34lmbk2rxqx41u8" # 指定鏡像所在的ACR企業版執行個體的地區和ID。
templates:
- name: whalesay
container:
image: acr-en-hangzhou-registry.cn-hangzhou.cr.aliyuncs.com/workflow/whalesay # 從ACR企業版拉取鏡像。
command: [ cowsay ]
args: [ "hello world" ]步驟二:使用鏡像緩衝加速建立工作流程Pod
您可以通過以下自動建立和手工建立兩種方式使用鏡像緩衝ImageCache,加速建立工作流程Pod。關於使用鏡像緩衝的更多資訊,請參見使用鏡像緩衝。
自動建立並使用鏡像緩衝ImageCache
通過在workflow.yaml檔案中增加Pod的annotations: k8s.aliyun.com/eci-image-cache: "true"開啟鏡像緩衝功能,自動使用工作流程中的鏡像建立鏡像緩衝。
如果鏡像緩衝已存在,則直接使用鏡像緩衝建立工作流程Pod,無需鏡像下載,可加速Pod建立過程。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
spec:
podMetadata:
annotations:
k8s.aliyun.com/eci-image-cache: "true" # 開啟自動鏡像緩衝功能。
entrypoint: whalesay
templates:
- name: whalesay
container:
image: docker/whalesay
command: [ cowsay ]
args: [ "hello world" ]手工建立並使用鏡像緩衝ImageCache
使用以下YAML內容,建立imagecache.yaml檔案。
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-helloworld annotations: k8s.aliyun.com/imc-enable-reuse: "true" # 開啟鏡像緩衝複用。 spec: images: # 用於建立鏡像緩衝的容器鏡像列表。 - docker/whalesay imagePullSecrets: # 鏡像倉庫對應的Secret列表,公開鏡像可省略。 - default:secret1 imageCacheSize: # 鏡像緩衝大小。預設為20 GiB。取值範圍為[20~32768] GiB。 20 retentionDays: # 鏡像緩衝保留時間長度,到期會被清理。單位為天。預設永不到期。 7執行以下命令,部署鏡像緩衝ImageCache。
kubectl apply -f imagecache.yaml執行以下命令,擷取ImageCache狀態。
kubectl get imagecaches預期輸出:
NAME AGE CACHEID PHASE PROGRESS imagecache-helloworld 3m36s imc-f8zfxxxx Ready 100%待狀態變為
Ready後,即可使用此ImageCache建立工作流程。在工作流程中指定ImageCache ID,避免鏡像下載,加速工作流程建立過程。
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- spec: podMetadata: annotations: k8s.aliyun.com/eci-image-snapshot-id: "imc-f8zf****" # 明確指定使用的哪個ImageCache緩衝建立Pod。 entrypoint: whalesay templates: - name: whalesay container: image: docker/whalesay command: [ cowsay ] args: [ "hello world" ]