文件部署物

计算巢通过文件部署物解决脚本部署中软件资源下载的问题(云资源无公网访问或下载源不稳定)。本文为您介绍文件部署物使用场景与原理,以及如何创建和使用文件部署物。

使用背景

  • 为什么使用文件部署物?

    计算巢通过文件部署物解决了云资源无公网访问、大文件或不稳定源导致的软件下载问题。服务商将文件上传至指定OSS Bucket后,系统自动复制到多个区域,并在部署过程中自动替换模板中的标识位为对应区域的内网OSS链接,确保了数据传输的稳定性和安全性。

  • 文件部署物的优势?

    服务商仅需在模板中撰写关联标识位,并在计算巢控制台的服务详情页面配置文件部署物关联即可。

    1. 文件复制:计算巢会将服务商上传的文件复制到计算巢的通用账号下,在此账号下的OSS Bucket中完成文件多地域复制。

    2. 文件关联:计算巢会识别模板中标识位({{ computeneset::file::xxx}}),在创建服务时将标识位与文件部署物关联。用户部署时,计算巢会识别用户的部署地域,自动选择该地域对应的OSS URL替换模板的标识位,实现文件URL的动态替换。

    3. 权限管理:部署物权限跟随服务,若未关联服务,部署物权限为私有。若关联至少一个公开权限服务,则文件部署物权限为公开。若全部关联私有权限服务,则文件部署物权限为私有。

    4. 内网下载:计算巢通过内网下载文件部署物,在标识位替换时,计算巢默认会自动生成一个内网OSS的HTTP地址替换标识位。通过内网下载,链路稳定安全。

使用说明

服务ROS模板中定义文件关联的标识位,并在文件关联中设置文件部署物,在创建服务实例时,计算巢会自动识别模板中的标识位,并根据服务实例部署地域,自动替换成部署物对应地域的文件URL。

文件关联标识位的固定表达式如下:

  • (推荐)若部署物的文件URL为私网URL时,文件的固定表达式为:{{ computenest::file:: ${key}}}

  • 若部署物的文件URL为公网URL时,文件的固定表达式为:{{ computenest::publicfile::${key}}}

    说明

    其中${key}为任意单词,中间不可用空格隔开。

使用文件部署物进行部署的示例YAML如下:

重要
  • 模板中定义文件关联标识位时,推荐使用单引号('')或双引号(“”)将标识位的内容引起来。

  • 如果使用wget命令下载,推荐加入-O参数指定输出文件名。

  • 常用模板定义标识位。

    userData中下载文件并将文件的名称修改为TestFirst.txtTestSecond.tar为例,展示模板中定义的标识位。

    TiDBServer:
        Type: ALIYUN::ECS::InstanceGroup
        Properties:
          ……
          UserData:
            Fn::Sub:
              - |
                #!/bin/sh
                sleep 10
                wget '{{ computenest::file::DemoFirst }}' -O TestFirst.txt
                wget '{{ computenest::file::DemoSecond }}' -O TestSecond.tar
                ……
  • 数据库类型MigrateTask中定义标识位。

    SQLDump:
        Type: ALIYUN::RDS::MigrateTask
        Properties:
            ……
          DBName: mytest
          DBInstanceId:
            Fn::GetAtt:
              - Database
              - DBInstanceId
          OssObjectPositions: {{ computenest::file::DemoFirst }}

创建和使用

前提条件

准备您要上传的文件。

创建文件部署物

  1. 配置部署物的基本信息。

    1. 登录计算巢控制台,在左侧导航栏选择服务部署物,并在部署物区域中单击创建部署物

    2. 部署物信息区域,完成部署物信息填写。

      配置项

      说明

      部署物名称

      由中文、数字、英文及下划线组成,长度在 3~50 个字符之间,一个中文字等于 2 个字符,部署物名称创建后不可修改。

      部署物版本名称

      由中文、数字、英文及下划线组成,长度在 3~50 个字符之间,一个中文字等于 2 个字符。

      部署物描述

      简介长度在10-500个字符之间,一个中文字等于2个字符。

      资源组

      选择创建的部署所归属的资源组名称。

      资源组对您拥有的云资源从用途、权限、归属等维度进行分组,实现企业内部多用户、多项目的资源分级管理。更多信息,请参见资源组

      标签配置

      选择或填写完整的标签键和标签值,为部署物定标签。每个资源最多可绑定20条标签。若无可选的标签键和标签值,可创建自定义标签。创建自定义标签的详细操作,请参见创建并绑定自定义标签

  2. 配置文件部署物。

    1. 部署物内容区块,选择部署物类型文件部署物

    2. 上传部署地域选择上传文件的地域,并根据您上传的本地文件大小,选择上传本地文件上传超过5G大文件

      (可选)上传超过5G的大文件时,您需要进行如下操作。

      1. 单击获取访问凭证,会弹出本地环境上传或ECS内网环境上传的上传命令,根据您的上传环境复制上传命令,并将命令中的<source_file><target_file>分别替换为您源文件名和上传到计算巢之后的文件名称。

      2. 阿里云CLI中运行上传命令,完成文件的上传。

        image

      3. 部署物配置处,填入已上传的文件名称。

    3. (可选)选择是否配置脚本命令功能,配置脚本命令主要用于服务实例升级功能,文件关联功能不需要配置脚本命令。

      若您开启了配置脚本命令功能,则需要完成如下参数配置。

      1. 操作系统:根据您服务的操作系统,选择对应的操作系统。

      2. 部署物下载目录:设置将部署物下载到ECS实例的目录。若设置的下载目录不存在,则下载部署物前,会先创建目录再下载。

      3. 命令类型:设置命令的类型。

      4. 命令内容:设置完成文件下载后需要执行的命令。

        若需要调用服务实例的具体配置参数,您需要在命令内容中使用命令进行调用。更多信息,请参见调用参数说明

    4. 设置分发区域,文件部署物默认全部地域分发。

    5. 单击发布部署物

      部署物发布后,不可对当前版本内容进行修改,只能通过创建新版本或新部署物的方式进行修改。

  3. 查看部署物。

    1. 返回服务部署物页面,单击部署物名称,进入部署物详情界面查看部署进度。

    2. 当状态为可用后单击查看,会获取到文件部署物的分发结果

      image

使用文件部署物

本节以创建私有化部署服务为例,重点介绍在创建服务时文件部署物相关配置。

  1. 登录计算巢控制台

  2. 在左侧导航栏中选择我的服务,在我创建的服务区域下单击创建新服务

  3. 创建私有化部署服务。

    image

  4. 根据提示填入服务基本信息,在录入模板中根据实际情况选择ROS模板。

    当ROS模板中存在{{ computenest::file::test }}或者{{ computenest::publicfile::test }},则在部署物关联区块中可设置文件关联

    示例模板

    说明

    本示例模板仅可用于测试。

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: 新建ack部署
      zh-cn: new ack
    Parameters:
      PayType:
        Type: String
        Label:
          en: ECS Instance Charge Type
          zh-cn: 付费类型
        Default: PostPaid
        AllowedValues:
          - PostPaid
          - PrePaid
        AssociationProperty: ChargeType
        AssociationPropertyMetadata:
          LocaleKey: InstanceChargeType
      PayPeriodUnit:
        Type: String
        Label:
          en: Pay Period Unit
          zh-cn: 购买资源时长周期
        Default: Month
        AllowedValues:
          - Month
          - Year
        AssociationProperty: PayPeriodUnit
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      PayPeriod:
        Type: Number
        Description:
          en: When the resource purchase duration is Month, the value of Period ranges from 1 to 9, 12, 24, 36, 48, or 60. <br><b><font color='red'> When ECS instance types are PrePaid valid </b></font>
          zh-cn: 当购买资源时长为Month时,Period取值:1~9 <br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font>
        Label:
          en: Period
          zh-cn: 购买资源时长
        Default: 1
        AllowedValues:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          - 9
        AssociationProperty: PayPeriod
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      ZoneId:
        Type: String
        AssociationProperty: ALIYUN::ECS::Instance:ZoneId
        Label:
          en: Zone ID
          zh-cn: 可用区
        Default: cn-hangzhou-h
      VpcCidrBlock:
        Type: String
        Label:
          en: VPC CIDR IPv4 Block
          zh-cn: 专有网络IPv4网段
        Description:
          zh-cn: VPC的ip地址段范围,<br>您可以使用以下的ip地址段或其子网:<br><font color='green'>[10.0.0.0/8]</font><br><font color='green'>[172.16.0.0/12]</font><br><font color='green'>[192.168.0.0/16]</font>
          en: 'The ip address range of the VPC in the CidrBlock form; <br>You can use the following ip address ranges and their subnets: <br><font color=''green''>[10.0.0.0/8]</font><br><font color=''green''>[172.16.0.0/12]</font><br><font color=''green''>[192.168.0.0/16]</font>'
        Default: 192.168.0.0/16
        AssociationProperty: ALIYUN::VPC::VPC::CidrBlock
      VSwitchCidrBlock:
        Type: String
        Label:
          en: VSwitch CIDR Block
          zh-cn: 交换机子网网段
        Description:
          zh-cn: 必须属于VPC的子网段。
          en: Must belong to the subnet segment of VPC.
        Default: 192.168.1.0/24
        AssociationProperty: ALIYUN::VPC::VSwitch::CidrBlock
        AssociationPropertyMetadata:
          VpcCidrBlock: VpcCidrBlock
      LoginPassword:
        NoEcho: true
        Type: String
        Description:
          en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
          zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
        Label:
          en: Instance Password
          zh-cn: 实例密码
        ConstraintDescription:
          en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
          zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
        AssociationProperty: ALIYUN::ECS::Instance::Password
        AllowedPattern: ^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$
        MinLength: 8
        MaxLength: 30
        Default: computenest*12345
      WorkerInstanceType:
        Type: String
        Label:
          en: Worker Nodes Types
          zh-cn: Worker节点规格
        AssociationProperty: ALIYUN::ECS::Instance::InstanceType
        AssociationPropertyMetadata:
          ZoneId: ${ZoneId}
        Default: ecs.g6.large
      WorkerSystemDiskCategory:
        Type: String
        AllowedValues:
          - cloud_efficiency
          - cloud_ssd
          - cloud_essd
        AssociationPropertyMetadata:
          LocaleKey: DiskCategory
          InstanceType: ${WorkerInstanceType}
        Label:
          en: Worker System Disk Category
          zh-cn: Worker 系统盘磁盘类型
        Default: cloud_essd
      WorkerSystemDiskSize:
        Type: Number
        Label:
          en: Worker System Disk Size(GB)
          zh-cn: Worker节点系统盘大小(GB)
        MinValue: 1
        Default: 120
      PodCidr:
        Type: String
        Description:
          zh-cn: 请填写有效的私有网段,即以下网段及其子网:10.0.0.0/8,172.16-31.0.0/12-16,192.168.0.0/16<br>不能与 VPC 及 VPC 内已有 Kubernetes 集群使用的网段重复。<font color='blue'><b>创建成功后不能修改</b></font>
          en: 'Please fill in a valid private segment, i.e. the following segments and their subnets: 10.0.0.0/8, 172.16-31.0.0/12-16, 192.168.0.0/16<br> which cannot duplicate the network segments already used by clusters in VPC and VPC Kunetberes. <font color=''blue''><b>Cannot be modified after successful creation</b></font>'
        Label:
          zh-cn: Pod 网络 CIDR
          en: Pod Network CIDR
        AssociationProperty: ALIYUN::CS::ManagedKubernetesCluster::PodCidr
        Default: 10.0.0.0/16
      ServiceCidr:
        Type: String
        Description:
          zh-cn: 可选范围:10.0.0.0/16-24,172.16-31.0.0/16-24,192.168.0.0/16-24<br>不能与 VPC 及 VPC 内已有 Kubernetes 集群使用的网段重复。<font color='blue'><b>创建成功后不能修改</b></font>
          en: 'Optional range: 10.0.0.0/16-24, 172.16-31.0.0/16-24, 192.168.0.0/16-24<br> cannot duplicate segments already used by existing Kubernetes clusters in VPC and VPC.<font color=''blue''><b>Cannot be modified after successful creation</b></font>'
        Label:
          zh-cn: Service CIDR
          en: Service CIDR
        AssociationProperty: ALIYUN::CS::ManagedKubernetesCluster::ServiceCidr
        Default: 172.16.0.0/16
    Resources:
      EcsVpc:
        Type: ALIYUN::ECS::VPC
        Properties:
          VpcName:
            Ref: ALIYUN::StackName
          CidrBlock:
            Ref: VpcCidrBlock
      EcsVSwitch:
        Type: ALIYUN::ECS::VSwitch
        Properties:
          VSwitchName:
            Ref: ALIYUN::StackName
          VpcId:
            Ref: EcsVpc
          ZoneId:
            Ref: ZoneId
          CidrBlock:
            Ref: VSwitchCidrBlock
      EcsSecurityGroup:
        Type: ALIYUN::ECS::SecurityGroup
        Properties:
          SecurityGroupName:
            Ref: ALIYUN::StackName
          VpcId:
            Ref: EcsVpc
          SecurityGroupEgress:
            - PortRange: '-1/-1'
              Priority: 1
              IpProtocol: all
              DestCidrIp: 0.0.0.0/0
              NicType: intranet
          SecurityGroupIngress:
            - PortRange: '-1/-1'
              Priority: 1
              IpProtocol: all
              SourceCidrIp:
                Ref: PodCidr
              Description: pod网络访问开放
              NicType: intranet
            - PortRange: '-1/-1'
              Priority: 1
              IpProtocol: all
              SourceCidrIp:
                Ref: VpcCidrBlock
              Description: vpc网络访问开放
              NicType: intranet
            - PortRange: '-1/-1'
              Priority: 1
              IpProtocol: icmp
              SourceCidrIp: 0.0.0.0/0
              Description: icmp协议端口放开
              NicType: intranet
      ManagedKubernetesCluster:
        Type: ALIYUN::CS::ManagedKubernetesCluster
        Properties:
          Name:
            Ref: ALIYUN::StackName
          ChargeType:
            Ref: PayType
          Period:
            Ref: PayPeriod
          PeriodUnit:
            Ref: PayPeriodUnit
          VSwitchIds:
            - Ref: EcsVSwitch
          VpcId:
            Ref: EcsVpc
          WorkerInstanceTypes:
            - Ref: WorkerInstanceType
          NumOfNodes: 3
          ClusterSpec: ack.pro.small
          ContainerCidr:
            Ref: PodCidr
          ServiceCidr:
            Ref: ServiceCidr
          ZoneIds:
            - Ref: ZoneId
          SecurityGroupId:
            Ref: EcsSecurityGroup
          WorkerSystemDiskCategory:
            Ref: WorkerSystemDiskCategory
          WorkerSystemDiskSize:
            Ref: WorkerSystemDiskSize
          LoginPassword:
            Ref: LoginPassword
          SnatEntry: true
          Addons:
            - Name: flannel
              Config: ''
      ComputenestHelmApplication:
        Type: MODULE::SHARE::1563457855438522::HelmDeploy
        Version: v5
        DependsOn:
          - ManagedKubernetesCluster
        Properties:
          ClusterId:
            Fn::GetAtt:
              - ManagedKubernetesCluster
              - ClusterId
          ChartIdentifier: '{{ computenest::helmpull::springBoot }}'
          ChartValues:
            image:
              fullname: '{{ computenest::acrimage::springBootDemo }}'
            dockerConfigJson: '{{ computenest::acr::dockerconfigjson }}'
            service:
              type: LoadBalancer
              port: 8080
          Namespace:
            Ref: ALIYUN::StackName
          ReleaseName: spring-boot-chart
      # 睡眠1分钟,以便于获取资源时可以拿到
      HelmSleep:
        Type: ALIYUN::ROS::Sleep
        DependsOn:
          - ComputenestHelmApplication
        Properties:
          CreateDuration: 60
      # 获取service信息,输出到output中
      ClusterApplicationResources:
        Type: DATASOURCE::CS::ClusterApplicationResources
        DependsOn:
          - HelmSleep
        Properties:
          ClusterId:
           Fn::GetAtt:
            - ManagedKubernetesCluster
            - ClusterId
          Kind: Service
          Name: spring-boot-chart
          Namespace:
            Ref: ALIYUN::StackName
          JsonPath: $.status.loadBalancer.ingress[0].ip
          FirstMatch: true
    Outputs:
      # 将公网ip做为http返回的地址显示在控制台
      Endpoint:
        Description:
          zh-cn: 对外暴露的公网IP地址
          en: Public IP Addresses
        Value:
          Fn::Sub:
            - "http://${ServerAddress}:8080"
            - ServerAddress:
                Fn::GetAtt:
                  - ClusterApplicationResources
                  - Response
    Metadata:
      ALIYUN::ROS::Interface:
        ParameterGroups:
          - Parameters:
              - PayType
              - PayPeriodUnit
              - PayPeriod
            Label:
              en: PayType Configuration
              zh-cn: 付费类型配置
          - Parameters:
              - ZoneId
              - VpcCidrBlock
              - VSwitchCidrBlock
              - LoginPassword
            Label:
              en: Basic Configuration
              zh-cn: 基础配置
          - Parameters:
              - WorkerInstanceType
              - WorkerSystemDiskCategory
              - WorkerSystemDiskSize
              - ServiceCidr
              - PodCidr
            Label:
              en: Kubernetes
              zh-cn: Kubernetes配置
  5. 单击设置文件关联下方的关联部署物,在弹框中选择部署物和版本单击确定完成。

    image

    image

  6. 完成服务的创建,并测试通过后, 请根据计算巢服务的发布审核标准进行自检,并提交审核。发布审核标准的详细信息,请参见发布审核标准

  7. 审核通过后,上线服务。详细步骤,请参见上线服务

    当用户创建了服务实例后,计算巢会将模板中的内容根据服务实例部署地域和部署物自动替换为对应部署地域的文件URL。

    • 常用模板定义标识位替换后的结果如下所示。

      • 当部署物的文件URL为私网URL时,替换结果如下。

        image

      • 当部署物的文件URL为公网URL时,替换结果如下。

        image

    • 数据库类型MigrateTask中,计算巢会将文件部署物的URL更改为OssObjectPositions参数的格式。

      由于OssObjectPositions参数是由OSS Endpoint地址、OSS Bucket名称和OSS上的备份文件Key三段组成,每段中间用英文冒号:分隔(例如:oss-ap-southeast-1.aliyuncs.com:rdsmssqlsingapore:autotest_2008R2_TestMigration_FULL.bak,更多信息,请参见ALIYUN::RDS::MigrateTask),因此计算巢会将文件部署物的URL替换成该格式,如下图所示。

      image

相关文档

  • 关于创建计算巢服务的详细内容,请参见创建服务

  • 当您不再需要部署物或部署物版本时,可删除该部署物或部署物版本,请参见删除部署物

  • 当您需要变更部署物的分发地域、部署物内容等信息时,可通过创建新版本来实现,请参见创建新版本

  • 设置部署物的升级配置,请参见服务升级配置