本文為您介紹Helm Chart部署物使用場景與原理,以及如何創建和使用。
使用場景
當使用Helm Chart部署服務時,如果您的Chart包需要保持私密性不公開,則推薦使用計算巢的Helm Chart部署物。這些部署物存儲于計算巢Acr鏡像倉庫中,并通過臨時密鑰實現安全拉取。
重要對于那些可公開訪問的Helm Chart包,直接在服務ROS模板中指定其公開鏈接即可完成部署,無需額外配置。
Helm Chart一般用于服務結構比較復雜,對應的部署資源YAML文件比較多的場景,用來對部署資源YAML文件做結構化管理。Helm Chart部署物在計算巢中是托管到Acr倉庫中,具體上傳和拉取原理,請參見容器鏡像部署物。
應用原理
Helm Chart部署物在服務模板中怎么使用呢,主要需要在服務模板中定義以下兩個標識,在部署時進行替換:
{{computenest::helmchart::test}}
部署物占位符,替換成Helm Chart的完整地址,如oci://compute-nest-chart-registry.cn-hangzhou.cr.aliyuncs.com/${aliUid}/wordpress:15.4.1
{{computenest::helm::dockerconfigjson}}
倉庫拉取密鑰,用來拉取托管在計算巢Acr倉庫中的Chart包。
Helm Chart部署使用計算巢定義的公共模塊MODULE::ACS::ComputeNest::FluxOciHelmDeploy,里面使用了開源組件FluxCd, 目前僅支持Oci格式的Chart倉庫,計算巢Helm Chart部署物倉庫對應的格式為Oci格式。使用MODULE::ACS::ComputeNest::FluxOciHelmDeploy
部署Helm Chart部署物示例模板如下:
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
...
創建和使用
前提條件
已安裝Helm Chart并已有鏡像。如果您沒有,請參見推送和拉取Helm Chart。
創建Helm Chart部署物
配置部署物的基本信息。
登錄計算巢控制臺,在左側導航欄選擇服務部署物,并在部署物區域中單擊創建部署物。
在部署物信息區域,完成部署物信息填寫。
配置項
說明
部署物名稱
由中文、數字、英文及下劃線組成,長度在 3~50 個字符之間,一個中文字等于 2 個字符,部署物名稱創建后不可修改。
部署物版本名稱
由中文、數字、英文及下劃線組成,長度在 3~50 個字符之間,一個中文字等于 2 個字符。
部署物描述
簡介長度在10-500個字符之間,一個中文字等于2個字符。
資源組
選擇創建的部署所歸屬的資源組名稱。
資源組對您擁有的云資源從用途、權限、歸屬等維度進行分組,實現企業內部多用戶、多項目的資源分級管理。更多信息,請參見資源組。
標簽配置
選擇或填寫完整的標簽鍵和標簽值,為部署物定標簽。每個資源最多可綁定20條標簽。若無可選的標簽鍵和標簽值,可創建自定義標簽。創建自定義標簽的詳細操作,請參見創建并綁定自定義標簽。
配置Helm Chart部署物。
在部署物內容區塊,選擇部署物類型為Helm Chart。
單擊獲取訪問憑證,可以獲取對應命名空間的臨時密鑰,在命令行中按順序執行獲取的命令。
Helm Chart包上傳到計算巢ACR倉庫后,在選擇商品中選擇剛上傳的Chart包,并單擊發布部署物。
查看部署物。
返回服務部署物頁面,單擊部署物名稱,進入部署物詳情界面查看部署進度。
當狀態為可用時,表示創建完成。
使用Helm Chart部署物
本節以創建私有化部署服務為例,重點介紹在創建服務時使用Helm Chart部署物相關配置。
登錄計算巢控制臺。
在左側導航欄中選擇我的服務,在我創建的服務區域下單擊創建新服務。
創建私有化部署服務。
根據提示填入服務基本信息,在錄入模板中根據實際情況進行選擇并輸入ROS模板。
在服務ROS模板資源中填入Helm Chart部署物標識
{{ computenest::helmchart::test}}
和部署物拉取密鑰標識{{ computenest::helm::dockerconfigjson}}
。說明本示例模板僅可用于測試。
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: 可用區 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: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in) 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 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 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 - 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 # 安裝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 # 執行成功回調WaitCondition結束waitCondition的等待 - PublicAddress: Fn::Select: - 0 - Fn::GetAtt: - CsghubServerInstance - PublicIps InstanceIds: Fn::GetAtt: - CsghubServerInstance - InstanceIds Timeout: 3600
在部署物關聯區塊中可設置Helm關聯。單擊選擇部署物,在彈框中選擇部署物和版本,單擊確定完成Helm Chart部署物替換。
完成服務的創建,并測試通過后, 請根據計算巢服務的發布審核標準進行自檢,并提交審核。發布審核標準的詳細信息,請參見發布審核標準。
服務創建完成后,可以在服務詳情頁查看部署物關聯關系。