全部產品
Search
文件中心

Compute Nest:檔案部署物

更新時間:Nov 15, 2024

計算巢通過檔案部署物解決指令碼部署中軟體資源下載的問題(雲資源無公網訪問或下載源不穩定)。本文為您介紹檔案部署物使用情境與原理,以及如何建立和使用檔案部署物。

使用背景

  • 為什麼使用檔案部署物?

    計算巢通過檔案部署物解決了雲資源無公網訪問、大檔案或不穩定源導致的軟體下載問題。服務商將檔案上傳至指定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

相關文檔

  • 關於建立計算巢服務的詳細內容,請參見建立服務

  • 當您不再需要部署物或部署物版本時,可刪除該部署物或部署物版本,請參見刪除部署物

  • 當您需要變更部署物的分發地區、部署物內容等資訊時,可通過建立新版本來實現,請參見建立新版本

  • 設定部署物的升級配置,請參見服務升級配置