錄入服務模板時,若您需要使用已在計算巢發布的容器鏡像部署物,可以使用容器鏡像關聯的功能。
背景信息
使用容器鏡像關聯功能,您需要在服務模板中定義容器鏡像關聯的標識位和訪問憑證標識位,并在容器鏡像關聯中設置關聯的容器鏡像部署物,在創建服務實例時,計算巢會自動識別模板中標識位,自動替換成部署物對應的容器鏡像版本。
功能配置
在模板中定義容器鏡像關聯標識位和訪問計算巢鏡像倉庫的憑證標識位。
在配置容器鏡像關聯功能前,需要先在模板中定義容器鏡像標識位和計算巢鏡像倉庫訪問憑證標識位。容器鏡像關聯標識位的固定表達式為:
{{ computenest::acrimage::xxx }}
。說明表達式中的xxx為任意單詞,中間不可包含空格。
此處以在ALIYUN::CS::ClusterApplication資源中定義容器鏡像標識位
{{ computenest::acrimage::yourimage }}
和.dockerconfigjson
格式的計算巢鏡像倉庫訪問憑證標識位為例,展示模板中容器鏡像關聯標識位和計算巢鏡像倉庫憑證標識位。Resources: ClusterApplication: Type: 'ALIYUN::CS::ClusterApplication' Properties: DefaultNamespace: Ref: 'ALIYUN::StackName' YamlContent: | apiVersion: v1 data: .dockerconfigjson: {{ computenest::acr::dockerconfigjson }} kind: Secret metadata: name: computenestrepo namespace: default type: kubernetes.io/dockerconfigjson --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: springboot-demo-deployment name: springboot-demo-deployment spec: selector: matchLabels: app: springboot-demo-pod template: metadata: labels: app: springboot-demo-pod spec: containers: - name: springboot-demo-container image: {{ computenest::acrimage::yourimage }} imagePullPolicy: Always ports: - containerPort: 8080 protocol: TCP env: - name: DB_HOST value: mysql - name: DB_USER value: root - name: DB_PASSWORD value: Qwer1234 restartPolicy: Always ...
配置容器鏡像關聯。
在創建服務界面的部署物關聯區域,單擊設置容器鏡像關聯。
在容器鏡像關聯彈窗中,選擇需要關聯的容器鏡像部署物和對應的版本。
若您沒有容器鏡像部署物,需先創建容器鏡像部署物后再選擇。關于如何創建容器鏡像部署物,請參見創建部署物。
單擊確定。
功能展示
服務創建完成后,當用戶在創建服務實例時,計算巢會將模板中的內容根據部署物信息自動替換為鏡像地址。
容器鏡像處替換如下:
計算巢鏡像倉庫訪問憑證替換如下:
線下調試
若您想要對容器鏡像進行線下手動調試時,可以在有K8s集群操作權限的機器上,手動執行YAML文件進行容器鏡像的部署。
容器鏡像需要對應的secret才能Pull,所以進行線下手動調節時,需要先創建secret后再部署容器鏡像。
創建secret
創建secret前需要先登錄鏡像倉庫后,再到K8s集群創建secret。獲取登錄計算巢鏡像倉庫命令方式,請參見管理容器鏡像部署物。
示例如下:
# 登錄計算巢服務鏡像倉庫,登錄命令和賬號密碼詳見創建容器部署物 docker login compute-nest-registry.cn-hangzhou.cr.aliyuncs.com --username=cr_temp_user --password=eyJhdXRoVG9rZW5JZGVudGlmaWVyIjoiNTU5NGE3OTlkZWNlNGM0Njk4NDc4NTI3MWY2MWYxODQiLCJpbnBN0YW5jZlkIjoiY3JpLWNuZ21qdnRnb3J4Ym9meXAiLCJ0aW1lIjoiMTY5MDQ1NzM5NDAwMCIsInR5cGUiOiJzdHiLCJ1c2VySWQiOiIMTE5ODIxMTU2ODkzODgyIn0:322290403cf9a2b40a7086d4f01edd4603xxxxxx # 在k8s集群中創建secret,名稱為<secretName>,可以自定義,<path/to/.docker/config.json>為執行操作的機器上,安裝docker時對應的config.json的位置。 kubectl create secret generic <secretName> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
部署容器鏡像
部署容器鏡像時,YAML文件中的
<imageName>
為上傳到計算巢容器倉庫中的倉庫名稱和版本,<secretName>
為創建secret時生成的secret名稱。apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: <imageName> ports: - containerPort: 80 imagePullSecrets: - name: <secretName>