通过容器部署物创建并更新服务

本文介绍服务商如何通过容器部署物管理容器镜像版本,创建关联部署物的服务,向用户提供创建和更新服务实例功能。

准备工作

  1. 本示例中,将在ACK集群中创建容器资源。因此需要提前准备一个可用的ACK集群。关于创建ACK集群操作,请参见创建ACK托管集群

  2. 本示例中,使用Nginx镜像模拟部署物升级流程,并将镜像版本从nginx 1.7升级至nginx 1.8。您需要将镜像提前下载到本地。

    docker pull nginx:1.7
    docker pull nginx:1.8

流程介绍

5.png

步骤一:创建和发布部署物

创建服务前,需要先完成部署物的创建和发布。

  1. 登录计算巢控制台

  2. 在左侧导航栏中,选择服务部署物,在部署物页签中单击创建部署物

    2024-05-16_16-17-55.png

  3. 在创建部署物界面,填写部署物信息,然后根据页面提示,获取访问凭证并推送nginx:1.7镜像。更多信息,请参见创建部署物

    image

  4. 单击发布部署物

    可在部署物管理页面单击部署物名称。进入部署物详情界面后即可看到部署物版本1已经是可用状态了。2.jpeg

步骤二:创建服务

  1. 登录计算巢控制台

  2. 在左侧导航栏中,选择我的服务,并在我的服务页面中选择我创建的服务,然后单击创建新服务

  3. 创建新服务界面,根据规划配置相关参数。

    此处只列举创建服务需要特别配置的参数,其他参数配置,请参见创建私有部署服务

    1. 录入模板区域的模板内容,填写使用自定义镜像创建单ECS实例的服务模板。模板内容,请参见模板示例

    2. 部署物关联处,设置容器镜像关联。

      关联已创建的容器镜像部署物,并选择部署物的版本为版本1。2024-05-16_16-22-08.png

  4. 单击保存服务

  5. 测试服务。

    服务保存后,您需要对创建的服务进行测试,保证其正常可用。更多信息,请参见测试服务

  6. 发布服务。

    服务测试通过后,再提交审核,审核通过后即可发布上线。更多信息,请参见上线服务

步骤三:创建和查看服务实例

  1. 创建服务实例。

    更多信息,请参见创建私有部署服务实例

  2. 查看服务实例的版本信息。

    在计算巢控制台,找到您创建的服务实例,然后单击服务实例ID进入服务实例详情页,查看服务实例的版本信息。3.jpeg

  3. 在ACK容器服务控制台查看容器镜像信息。4.jpeg

步骤四:更新部署物

  1. 登录计算巢控制台

  2. 在左侧导航栏,单击服务部署物,进入部署物管理页面。

  3. 找到已创建的部署物,单击创建新版本,进入创建新版本页面,获取访问凭证推送nginx:1.8镜像。p749799.jpeg

  4. 单击发布部署物

步骤五:更新服务

  1. 登录计算巢控制台

  2. 到需要更新的服务,单击创建新版本,进入创建新版本界面,更新参数。

    此处只列举更新镜像需要特别配置的参数,其他参数配置,请参见更新服务

    1. 部署物关联设置容器镜像关联处,将关联镜像修改为部署物更新后的镜像版本。2024-05-16_16-25-01.png

    2. 升级配置区域的升级信息处,配置升级信息。

      配置项

      配置示例值

      是否支持升级

      支持用户升级服务实例

      是否支持回滚

      支持用户回滚服务实例

      升级描述

      nginx1.8版本

      支持升级版本

      全部版本

      升级服务组件

      服务配置

  3. 单击提交审核

步骤六:升级服务实例

  1. 登录计算巢控制台

  2. 在左侧导航栏中选择服务实例

  3. 单击服务实例ID,进入服务实例详情页面。单击右上角的升级服务实例。进入升级服务实例弹窗。

  4. 选择升级版本,然后单击开始升级7.jpeg

步骤七:查看升级后的服务实例版本和镜像信息

  1. 登录计算巢控制台

  2. 在左侧导航栏中,单击服务实例

  3. 找到您创建的服务实例,单击服务实例ID,进入服务实例详情页,查看服务实例版本是否更新。在容器服务控制台查看Nginx镜像是否已经更新。8.jpeg

模板示例

ROSTemplateFormatVersion: '2015-09-01'
Description:
  en: A simple demo that deploys a MySQL and a container-base app into ack. 
  zh-cn: 在ACK中部署容器应用和MySQL。
Parameters:
  ClusterId:
    Type: String
    Description:
      en: >-
        The ID of Kubernetes ClusterId in which application deployed.
      zh-cn: >-
        部署应用程序的K8s集群ID
    AllowedPattern: '[0-9a-z]+$'
    Label:
      en: Kubernetes ClusterId
      zh-cn: K8s集群ID
    ConstraintDescription:
      en: >-
        must be lowercase letters or numbers
      zh-cn: '集群ID必须由小写字母或者数字组成'
Resources:
  ClusterApplication:
    Type: ALIYUN::CS::ClusterApplication
    Properties:
      ClusterId:
        Ref: ClusterId
      DefaultNamespace:
        Ref: ALIYUN::StackName
      YamlContent: |
        apiVersion: v1
        data:
          .dockerconfigjson: {{ computenest::acr::dockerconfigjson }}
        kind: Secret
        metadata:
          name: computenest
        type: kubernetes.io/dockerconfigjson
        ---
        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: {{ computenest::acrimage::nginx }}
                ports:
                - containerPort: 80
              imagePullSecrets:
              - name: computenest
        ---
        apiVersion: v1
        kind: Service
        metadata:
          labels:
            app: nginx
          name: nginx-svc
        spec:
          ports:
          - port: 80
            protocol: TCP
            targetPort: 80
          selector:
            app: nginx
          type: LoadBalancer
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - ClusterId
        Label:
          en: ACK Configuration
          zh-cn: ACK参数配置