容器镜像关联

录入服务模板时,若您需要使用已在计算巢发布的容器镜像部署物,可以使用容器镜像关联的功能。

背景信息

使用容器镜像关联功能,您需要在服务模板中定义容器镜像关联的标识位和访问凭证标识位,并在容器镜像关联中设置关联的容器镜像部署物,在创建服务实例时,计算巢会自动识别模板中标识位,自动替换成部署物对应的容器镜像版本。

功能配置

  1. 在模板中定义容器镜像关联标识位和访问计算巢镜像仓库的凭证标识位。

    在配置容器镜像关联功能前,需要先在模板中定义容器镜像标识位和计算巢镜像仓库访问凭证标识位。容器镜像关联标识位的固定表达式为:{{ 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
                  ...
  2. 配置容器镜像关联。

    1. 在创建服务界面的部署物关联区域,单击设置容器镜像关联

    2. 容器镜像关联弹窗中,选择需要关联的容器镜像部署物和对应的版本。

      若您没有容器镜像部署物,需先创建容器镜像部署物后再选择。关于如何创建容器镜像部署物,请参见创建部署物2024-04-10_17-07-07.png

    3. 单击确定2024-04-10_17-09-47.png

功能展示

服务创建完成后,当用户在创建服务实例时,计算巢会将模板中的内容根据部署物信息自动替换为镜像地址。

  • 容器镜像处替换如下:容器镜像

  • 计算巢镜像仓库访问凭证替换如下:访问凭证

线下调试

若您想要对容器镜像进行线下手动调试时,可以在有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>