All Products
Search
Document Center

Compute Nest:Helm chart package

Last Updated:Jun 20, 2026

This topic describes the use cases and principles of a Helm chart deployment package and explains how to create and use it.

Use cases

  • If you need to keep your Helm charts private when deploying services, we recommend using Helm chart deployment packages in Compute Nest. These packages are stored in a Compute Nest ACR repository and are pulled securely using a temporary key.

    Important

    For publicly accessible Helm charts, you can deploy them by specifying their public URL in the service's ROS template. No extra configuration is required.

  • Helm charts are typically used for services with complex structures and numerous YAML deployment files to manage these files in a structured way. In Compute Nest, Helm chart deployment packages are hosted in an ACR repository. For more information about the upload and pull mechanism, see container image artifact.

How it works

To use a Helm chart deployment package in a service template, you must define the following two placeholders. These placeholders are replaced with actual values during deployment:

  • {{computenest::helmchart::test}}: The deployment package placeholder. This is replaced with the full URL of the Helm chart, for example, oci://compute-nest-chart-registry.cn-hangzhou.cr.aliyuncs.com/${aliUid}/wordpress:15.4.1.

  • {{computenest::helm::dockerconfigjson}}: The repository pull secret, used to pull Helm charts hosted in the Compute Nest ACR repository.

Helm chart deployment uses the public module MODULE::ACS::ComputeNest::FluxOciHelmDeploy defined by Compute Nest. This module uses the open-source component FluxCD and currently supports only chart repositories in OCI format. The repository for Compute Nest Helm chart deployment packages uses the OCI format. The following sample template shows how to deploy a Helm chart deployment package by using MODULE::ACS::ComputeNest::FluxOciHelmDeploy:

Resources:
  FluxHelmDeploy:
    Type: MODULE::ACS::ComputeNest::FluxOciHelmDeploy
    Version: v1
    Properties:
      ClusterId:
        Ref: ClusterId
      ReleaseName: wordpress
      Namespace: wordpress
      HelmChartUrl: '{{ computenest::helmchart::test }}'
      DockerConfigJson: '{{ computenest::helm::dockerconfigjson }}'
      ChartValues:
        mariadb:
          primary:
            persistence:
              enabled: true
              storageClass: alicloud-disk-essd
              size: 20Gi
        persistence:
          enabled: false
...

Creation and usage

Prerequisites

Ensure that the Helm CLI is installed and you have a packaged Helm chart. If you do not, see Push and pull Helm charts.

Create a Helm chart package

  1. Configure basic information for the deployment package.

    1. Log on to the Compute Nest console. In the left-side navigation pane, choose Service Deployment Package. On the Packages tab, click Create Deployment Package.

    2. In the Basic Information section, configure the following parameters.

      Parameter

      Description

      Deployment Package Name

      The name can contain Chinese characters, English letters, digits, and underscores (_). The name must be 3 to 128 characters long, where a Chinese character counts as two characters. The deployment package name cannot be changed after creation.

      Version Name

      The name can contain Chinese characters, English letters, digits, and underscores (_). The name must be 3 to 50 characters long, where a Chinese character counts as two characters.

      Description

      The description must be 10 to 500 characters long. A Chinese character counts as two characters.

      Resource Group

      Select the resource group to which the deployment package belongs.

      Resource groups allow you to group your cloud resources by usage, permissions, or ownership, enabling hierarchical resource management for multiple users and projects within an organization. For more information, see resource groups.

      Tag Settings

      Select or enter a complete tag key and tag value to add a tag to the deployment package. You can bind up to 20 tags to a resource. If no tag keys or values are available, you can create a custom tag. For more information, see Create and bind a custom tag.

  2. Configure the Helm chart deployment package.

    1. In the Deployment Package Content section, set Deployment Package Type to Helm chart.

    2. Click Obtain Access Credential to get a temporary key for the namespace. Then, run the provided commands in your terminal.

      On the Helm chart tab, the page displays a three-step process. Step 1: Log in to the image repository by running the helm registry login command. Step 2: Tag the chart and push it to the image repository. Step 3: Enter the chart name, for example, chart-name, and run the helm push chart-name.tgz oci://xxx command to complete the push.

    3. After you upload the Helm chart to the Compute Nest ACR repository, select the newly uploaded chart and click Publish Deployment Package.

  3. View the deployment package.

    1. Return to the Service Deployment Package page. Click the name of your deployment package to open the Deployment Package Details page and check the creation progress.

    2. When the status changes to Available, the deployment package is ready to use.

Use a Helm chart package

This section explains how to use a Helm chart deployment package, using the creation of a private service as an example.

  1. Log on to the Compute Nest console.

  2. In the left-side navigation pane, click My Services. On the Created Services tab of the My Services page, click Create Service.

  3. On the Create New Service page, select Custom launch as the creation method, select Private Service as the service type, and click Next: Configure Settings.

  4. Enter the basic information for the service and provide a ROS template.

    In the service's ROS template, add the Helm chart deployment package placeholder {{ computenest::helmchart::test}} and the pull secret placeholder {{ computenest::helm::dockerconfigjson}}.

    Sample template

    Note

    This sample template is for testing purposes only.

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: new ack deployment
      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 subscription duration is measured in months, valid values for Period are 1 to 9, 12, 24, 36, 48, and 60. <br><b><font color='red'>This parameter is valid only when ECS instances are subscription-based.</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: 可用区
      EcsInstanceType:
        Type: String
        Label:
          en: Instance Type
          zh-cn: 实例类型
        AssociationProperty: ALIYUN::ECS::Instance::InstanceType
        AssociationPropertyMetadata:
          ZoneId: ${ZoneId}
          InstanceChargeType: ${InstanceChargeType}
      EcsInstancePassword:
        NoEcho: true
        Type: String
        AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
        Label:
          en: Instance Password
          zh-cn: 实例密码
        ConstraintDescription:
          en: The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
          zh-cn: 长度 8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
        MinLength: 8
        MaxLength: 30
        AssociationProperty: ALIYUN::ECS::Instance::Password
      ServerSystemDiskCategory:
        Type: String
        AllowedValues:
          - cloud_efficiency
          - cloud_ssd
          - cloud_essd
        AssociationPropertyMetadata:
          LocaleKey: DiskCategory
          InstanceType: ${EcsInstanceType}
        Label:
          en: Server System Disk Category
          zh-cn: Server系统盘磁盘类型
        Default: cloud_essd
      ServerSystemDiskSize:
        Type: Number
        Label:
          en: Server System Disk Size(GB)
          zh-cn: Server节点系统盘大小(GB)
        MinValue: 1
        Default: 500
      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 CIDR block format. <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: The CIDR block must be a subnet of the VPC's CIDR block.
        Default: 192.168.1.0/24
        AssociationProperty: ALIYUN::VPC::VSwitch::CidrBlock
        AssociationPropertyMetadata:
          VpcCidrBlock: VpcCidrBlock
      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: 'Specify a valid private CIDR block from the following ranges or their subnets: 10.0.0.0/8, 172.16.0.0/12-16, and 192.168.0.0/16.<br>The CIDR block cannot overlap with the CIDR block of the VPC or those of existing Kubernetes clusters in the VPC. <font color=''blue''><b>This cannot be changed after 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: 'Supported ranges: 10.0.0.0/16-24, 172.16.0.0/16-24, and 192.168.0.0/16-24.<br>The CIDR block cannot overlap with the CIDR block of the VPC or those of existing Kubernetes clusters in the VPC. <font color=''blue''><b>This cannot be changed after 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: Allow access from the pod network.
              NicType: intranet
            - PortRange: '-1/-1'
              Priority: 1
              IpProtocol: all
              SourceCidrIp:
                Ref: VpcCidrBlock
              Description: Allow access from the VPC network.
              NicType: intranet
            - PortRange: '-1/-1'
              Priority: 1
              IpProtocol: icmp
              SourceCidrIp: 0.0.0.0/0
              Description: Allow access over ICMP.
              NicType: intranet
            - Priority: 1
              PortRange: 22/22
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
            - Priority: 1
              PortRange: 443/443
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
            - Priority: 1
              PortRange: 3001/3001
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
            - Priority: 1
              PortRange: 31001/31001
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
            - Priority: 1
              PortRange: 9000/9000
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
            - Priority: 1
              PortRange: 3389/3389
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
            - Priority: 1
              PortRange: 80/80
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
      CsghubServerInstance:
        Type: ALIYUN::ECS::InstanceGroup
        Properties:
          ZoneId:
            Ref: ZoneId
          IoOptimized: optimized
          InstanceChargeType:
            Ref: PayType
          PeriodUnit:
            Ref: PayPeriodUnit
          Period:
            Ref: PayPeriod
          VpcId:
            Ref: EcsVpc
          VSwitchId:
            Ref: EcsVSwitch
          SecurityGroupId:
            Ref: EcsSecurityGroup
          SystemDiskCategory:
            Ref: ServerSystemDiskCategory
          SystemDiskSize:
            Ref: ServerSystemDiskSize
          MaxAmount: 1
          ImageId: centos_7
          InstanceType:
            Ref: EcsInstanceType
          Password:
            Ref: EcsInstancePassword
          InternetMaxBandwidthOut: 50
          InstanceName:
            Fn::Join:
              - '-'
              - - Ref: ALIYUN::StackName
                - '[1,4]'
      InstanceRunCommand:
        Type: ALIYUN::ECS::RunCommand
        Properties:
          Type: RunShellScript
          Sync: true
          CommandContent:
            Fn::Sub:
              - |
                #!/bin/bash
                yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
                yum makecache fast
                yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin jq
                mkdir -p /etc/docker
                tee /etc/docker/daemon.json <<-'EOF'
                {
                    "registry-mirrors": [
                        "https://docker.m.daocloud.io",
                        "https://mirror.baidubce.com",
                        "https://dockerproxy.com",
                        "https://mirror.iscas.ac.cn",
                        "https://huecker.io",
                        "https://dockerhub.timeweb.cloud",
                        "https://noohub.ru",
                        "https://vlgh0kqj.mirror.aliyuncs.com"
                    ]
                }
                EOF
                systemctl enable docker
                systemctl start docker
                sleep 10
                # Install Server
                wget '{{ computenest::file::csgserver }}' -O csghub-main.tar.gz
                tar -xvf csghub-main.tar.gz
                cd /root/csghub-main/deploy/all_in_one
                sed -i 's/SERVER_DOMAIN=[^,)]*/SERVER_DOMAIN=${PublicAddress}/' .env
                sleep 10
                chmod 777 startup.sh
                ./startup.sh
                sleep 10
                docker compose restart user_server
                sleep 10
                docker compose restart nginx
                docker compose restart user_server
                # The successful execution of the command signals the WaitCondition to complete its wait.
              - PublicAddress: 
                  Fn::Select:
                    - 0
                    - Fn::GetAtt:
                        - CsghubServerInstance
                        - PublicIps
          InstanceIds:
            Fn::GetAtt:
              - CsghubServerInstance
              - InstanceIds
          Timeout: 3600
  5. In the Deployment Package Association section, configure the Associate Helm. Click Select Deployment Package, choose the desired deployment package and version from the dialog box, and click OK to associate it with the placeholder.

    In the dialog box, the Association identifier is displayed in a format like {{ computenest::helmchart::wordpress }}. You can only select Helm chart deployment packages. After the association is complete, the Helm Association section at the bottom of the page displays the mapping between the association identifier and the associated deployment package.

  6. After you create and successfully test the service, check the service against the Compute Nest review criteria and submit the service for review. For more information about the review criteria, see Review criteria.

  7. After the service is created, you can view the deployment package association on the service details page.

    On the service details page, click the Deployment Association tab, and then click the Helm Association sub-tab. You can view the association identifier (for example, {{ computenest::helmchart::wordpress }}) and the corresponding deployment package information and version number.

Related documents