录入服务模板时,若您需要使用已在计算巢发布的容器镜像部署物,可以使用容器镜像关联的功能。
背景信息
使用容器镜像关联功能,您需要在服务模板中定义容器镜像关联的标识位和访问凭证标识位,并在容器镜像关联中设置关联的容器镜像部署物,在创建服务实例时,计算巢会自动识别模板中标识位,自动替换成部署物对应的容器镜像版本。
功能配置
在模板中定义容器镜像关联标识位和访问计算巢镜像仓库的凭证标识位。
在配置容器镜像关联功能前,需要先在模板中定义容器镜像标识位和计算巢镜像仓库访问凭证标识位。容器镜像关联标识位的固定表达式为:
{{ 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>