Nama Template
ACS-ESS-AdjustScalingGroupInstanceCount
Deskripsi Template
Menyesuaikan jumlah instance dalam grup penskalaan dengan membuat dan mengeksekusi aturan penskalaan. Catatan:
Jika grup penskalaan dikonfigurasi dengan jumlah instance yang diharapkan, ketika jumlah instance berbeda dari yang diharapkan, Auto Scaling secara otomatis menambah atau menghapus instance untuk menyamakan jumlah instance dengan yang diharapkan. Setelah mengeksekusi template ini, periksa hasil penskalaan di konsol Auto Scaling.
Jumlah node dalam kluster Container Service for Kubernetes (ACK) setelah pengurangan skala tidak boleh lebih kecil dari jumlah minimum node yang diperlukan oleh komponen. Jika tidak, kode kesalahan IncorrectCapacity akan dikembalikan.
Sebelum mengeksekusi template ini, pastikan saldo akun Anda mencukupi untuk pembelian instance baru. Jika tidak, kode kesalahan InvalidAccountStatus.NotEnoughBalance akan dikembalikan.
Untuk menambah skala grup penskalaan yang diterapkan di beberapa zona, hitung nilai parameter AdjustmentCount menggunakan rumus berikut: Jumlah instance yang ditambahkan per zona × Jumlah zona.
Instance Elastic Compute Service (ECS) yang ditambahkan setelah peningkatan skala dibebankan berdasarkan sistem bayar sesuai pemakaian. Anda dapat mengubah metode penagihan menjadi berlangganan sesuai kebutuhan bisnis. Untuk informasi lebih lanjut, lihat Ubah metode penagihan dari bayar sesuai pemakaian menjadi berlangganan.
Anda dapat menggunakan salah satu metode pengurangan skala berikut: hapus sejumlah instance ECS tertentu dengan mengonfigurasi parameter AdjustmentCount, atau hapus instance ECS tertentu dengan mengatur parameter AdjustmentCount ke 0 dan memilih instance ECS yang akan dihapus.
Jumlah instance yang dihapus untuk pengurangan skala tidak boleh kurang dari jumlah instance awal yang dibuat untuk grup penskalaan.
Menyesuaikan jumlah node dalam kolam node kluster ACK. Untuk informasi lebih lanjut, lihat Buat dan kelola kolam node. Catatan:
Baca dokumen terkait dan berikan izin kepada peran AliyunOOSLifecycleHook4CSRole.
Jenis Template
Otomatis
Pemilik
Alibaba Cloud
Parameter Input
Parameter | Deskripsi | Tipe | Diperlukan | Nilai Default | Batasan |
resourceType | Jenis sumber daya yang ingin Anda sesuaikan. | String | Tidak | ESS | |
regionId | ID wilayah instance ECS yang akan dikloning. | String | Tidak | {{ ACS::RegionId }} | |
scalingGroupId | ID grup penskalaan. | String | Tidak | "" | |
adjustmentType | Metode penskalaan. | String | Tidak | ScaleOut | |
adjustmentCount | Jumlah instance ECS yang akan dimodifikasi dalam grup penskalaan. | Number | Tidak | 0 | |
instancesToBeRemoved | Instance ECS yang akan dihapus dari grup penskalaan. | Json | Tidak | {'Type': 'ResourceIds', 'ResourceIds': [], 'RegionId': '{{ ACS::RegionId }}'} | |
clusterId | ID kluster. | String | Tidak | "" | |
nodepoolId | ID kolam node. | String | Tidak | "" | |
desiredSize | Jumlah node yang diharapkan. | Number | Tidak | 0 | |
OOSAssumeRole | Peran Resource Access Management (RAM) yang diasumsikan oleh CloudOps Orchestration Service (OOS). | String | Tidak | "" |
Parameter Output
Parameter | Deskripsi | Tipe |
adjustDetail | String | |
lifecycleHookOOSExecutionResult | String |
Kebijakan yang diperlukan untuk mengeksekusi template
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeInstances"
],
"Resource": "*",
"Effect": "Mengizinkan"
},
{
"Action": [
"ess:CreateScalingRule",
"ess:DeleteScalingRule",
"ess:DescribeScalingActivities",
"ess:DescribeScalingActivityDetail",
"ess:ExecuteScalingRule",
"ess:RemoveInstances"
],
"Resource": "*",
"Effect": "Mengizinkan"
},
{
"Action": [
"oos:ListExecutions"
],
"Resource": "*",
"Effect": "Mengizinkan"
},
{
"Action": [
"cs:DescribeClusterNodePoolDetail",
"cs:ModifyClusterNodePool"
],
"Resource": "*",
"Effect": "Mengizinkan"
}
]
}
Referensi
ACS-ESS-AdjustScalingGroupInstanceCount
Konten Template
FormatVersion: OOS-2019-06-01
Description:
en: <p class="p">Sesuaikan jumlah instance dalam grup penskalaan dengan membuat dan mengeksekusi aturan grup penskalaan. Deskripsi:</p>
<ul class="ul">
<li class="li">Jika grup penskalaan telah dikonfigurasi dengan jumlah instance yang diinginkan, ketika jumlah instance dalam grup penskalaan tidak sama dengan jumlah instance yang diharapkan, layanan auto scaling akan secara otomatis menskalakan untuk memastikan bahwa jumlah instance dalam grup penskalaan selalu dipertahankan. Setelah eksekusi selesai, silakan kunjungi konsol ESS untuk melihat hasil penyesuaian. </li>
<li class="li">Jumlah node kluster setelah penskalaan turun tidak boleh kurang dari persyaratan node minimum komponen, jika tidak operasi penskalaan mungkin mengembalikan kesalahan dengan kode:IncorrectCapacity. </li>
<li class="li">Pastikan saldo akun Anda lebih besar dari biaya instance yang baru dibeli, jika tidak kesalahan dengan kode:InvalidAccountStatus.NotEnoughBalance akan dikembalikan. </li>
<li class="li">Jika multi-zona, harap perluas kelipatan jumlah zona. </li>
<li class="li">Metode pembayaran untuk ECS yang diperluas adalah bayar sesuai pemakaian. Jika perlu, pelanggan perlu melakukan kontrak tahunan dan bulanan secara manual. </a></li>
<li class="li"> Ada dua cara untuk penskalaan turun: turunkan jumlah instance ECS tertentu ( tidak 0), hapus instance ECS tertentu dari grup penskalaan ( adalah 0 dan instance ECS yang akan dihapus dipilih)</li>
<li class="li">Penskalaan tidak boleh kurang dari jumlah yang awalnya dibuka dalam grup penskalaan. </li>
</ul>
<p class="p">Sesuaikan jumlah instance dalam grup penskalaan dengan membuat dan mengeksekusi aturan grup penskalaan. Deskripsi:</p>
<ul class="ul">
<li class="li">Sesuaikan kolam node kluster ACK<a href='https://www.alibabacloud.com/help/en/ack/ack-edge/user-guide/create-a-node-pool?spm=a3c0i.23458820.2359477120.9.57186e9b4Ewe21'>Jumlah node yang diharapkan</a>, harap baca dokumen terkait dengan cermat dan otorisasi peran AliyunOOSLifecycleHook4CSRole. </li>
</ul>
name-en: Elastic Scaling
categories:
- elastic_manage
- application_manage
- computenest
Parameters:
resourceType:
Type: String
Label:
en: ResourceType
AllowedValues:
- ACK
- ESS
Default: ESS
regionId:
Type: String
Label:
en: RegionId
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
scalingGroupId:
Type: String
Label:
en: ScalingGroupId
Default: ''
AssociationProperty: ALIYUN::ESS::AutoScalingGroup::AutoScalingGroupId
AssociationPropertyMetadata:
RegionId: regionId
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ESS
adjustmentType:
Type: String
Label:
en: AdjustmentType
AssociationPropertyMetadata:
LocaleKey: ESSGroupAdjustmentType
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ESS
AllowedValues:
- ScaleOut
- ScaleIn
- TotalCapacity
Default: ScaleOut
adjustmentCount:
Type: Number
Label:
en: AdjustmentCount
MinValue: 0
MaxValue: 100
Default: 0
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ESS
instancesToBeRemoved:
Type: Json
Label:
en: RemovedInstances
Default:
Type: ResourceIds
ResourceIds: []
RegionId: '{{ ACS::RegionId }}'
AssociationProperty: Targets
AssociationPropertyMetadata:
ResourceType: ALIYUN::ECS::Instance
RegionId: regionId
Visible:
Condition:
Fn::And:
- Fn::Equals:
- '${resourceType}'
- ESS
- Fn::Equals:
- '${adjustmentType}'
- ScaleIn
- Fn::Equals:
- '${adjustmentCount}'
- 0
clusterId:
Label:
en: ClusterId
Type: String
Default: ''
AssociationProperty: ALIYUN::CS::Cluster::ClusterId
AssociationPropertyMetadata:
RegionId: ${regionId}
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ACK
nodepoolId:
Label:
en: NodepoolId
Type: String
Default: ''
AssociationProperty: ALIYUN::CS::Cluster::ClusterNodePool
AssociationPropertyMetadata:
RegionId: ${regionId}
ClusterId: ${clusterId}
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ACK
desiredSize:
Label:
en: DesiredSize
Type: Number
MinValue: 0
MaxValue: 100
Default: 0
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- '${resourceType}'
- ACK
OOSAssumeRole:
Label:
en: OOSAssumeRole
Type: String
Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: chooseNextTaskByResourceType
Action: 'ACS::Choice'
Description:
en: Pilih tugas berikutnya berdasarkan jenis sumber daya
Properties:
DefaultTask: whetherToRemoveInstancesFromScalingGroup
Choices:
- When:
Fn::Equals:
- 'ACK'
- '{{ resourceType }}'
NextTask: getNodePoolDetail
- Name: whetherToRemoveInstancesFromScalingGroup
Action: 'ACS::Choice'
Description:
en: Pilih tugas berikutnya berdasarkan jenis penyesuaian
Properties:
DefaultTask: createScalingRule
Choices:
- When:
Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
NextTask: getInstanceToBeRemoved
- Name: getInstanceToBeRemoved
Description:
en: Dapatkan instance ECS yang akan dihapus
Action: ACS::SelectTargets
Properties:
ResourceType: ALIYUN::ECS::Instance
RegionId: '{{ regionId }}'
Filters:
- '{{ instancesToBeRemoved }}'
Outputs:
instanceIds:
Type: List
ValueSelector: Instances.Instance[].InstanceId
- Name: removeInstances
Action: 'ACS::ExecuteAPI'
OnSuccess: waitScalingActivityComplete
When:
Fn::Not:
Fn::Equals:
- '{{ getInstanceToBeRemoved.instanceIds }}'
- []
Description:
en: Hapus instance dari grup penskalaan
Properties:
Service: ESS
API: RemoveInstances
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
InstanceIds: '{{ getInstanceToBeRemoved.instanceIds }}'
Outputs:
scalingActivityId:
Type: String
ValueSelector: .ScalingActivityId
- Name: createScalingRule
Action: 'ACS::ExecuteAPI'
Description:
en: Buat ScalingRule
Properties:
Service: ESS
API: CreateScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingGroupId: '{{ scalingGroupId }}'
ScalingRuleName: '{{ ACS::ExecutionId }}'
AdjustmentType:
Fn::If:
- Fn::Equals:
- 'TotalCapacity'
- '{{ adjustmentType }}'
- TotalCapacity
- QuantityChangeInCapacity
AdjustmentValue:
Fn::If:
- Fn::Equals:
- ScaleIn
- '{{ adjustmentType }}'
- '-{{ adjustmentCount }}'
- '{{ adjustmentCount }}'
Outputs:
scalingRuleAri:
Type: String
ValueSelector: ScalingRuleAri
scalingRuleId:
Type: String
ValueSelector: ScalingRuleId
- Name: executeScalingRule
Description:
en: Eksekusi ScalingRule
OnError: deleteScalingRule
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: ExecuteScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingRuleAri: '{{ createScalingRule.scalingRuleAri }}'
Outputs:
scalingActivityId:
Type: String
ValueSelector: ScalingActivityId
- Name: waitScalingActivityComplete
Description:
en: Pantau eksekusi aktivitas penskalaan hingga berhasil atau gagal
OnError: deleteScalingRule
Retries: 30
Action: 'ACS::WaitFor'
Properties:
Service: ESS
API: DescribeScalingActivities
Parameters:
RegionId: '{{ regionId }}'
ScalingActivityId1:
Fn::If:
- Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
- '{{ removeInstances.scalingActivityId }}'
- '{{ executeScalingRule.scalingActivityId }}'
DesiredValues:
- Successful
StopRetryValues:
- Failed
- Rejected
- Warning
PropertySelector: 'ScalingActivities.ScalingActivity[0].StatusCode'
- Name: deleteScalingRule
When:
Fn::Not:
Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
Description:
en: Hapus ScalingRule
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: DeleteScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingRuleId: '{{ createScalingRule.scalingRuleId }}'
- Name: describeScalingActivityDetail
Description:
en: Jelaskan detail aktivitas penskalaan
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: DescribeScalingActivityDetail
Parameters:
RegionId: '{{ regionId }}'
ScalingActivityId:
Fn::If:
- Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
- '{{ removeInstances.scalingActivityId }}'
- '{{ executeScalingRule.scalingActivityId }}'
Outputs:
detail:
Type: String
ValueSelector: .Detail
- Name: getOOSExecutionOutput
Action: 'ACS::ExecuteAPI'
OnSuccess: ACS::END
Description:
en: Dapatkan output eksekusi OOS untuk lifecycle hook
Properties:
Service: OOS
API: ListExecutions
Parameters:
RegionId: '{{ regionId }}'
Tags:
ESS:ScalingActivityId:
Fn::If:
- Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
- '{{ removeInstances.scalingActivityId }}'
- '{{ executeScalingRule.scalingActivityId }}'
Outputs:
lifecycleHookOOSExecutionResult:
Type: String
ValueSelector: 'Executions[].Outputs'
- Name: getNodePoolDetail
Action: ACS::WaitFor
Description:
en: Dapatkan informasi kolam node kluster
Retries: 20
Properties:
Service: CS
API: DescribeClusterNodePoolDetail
Method: GET
URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
Parameters: {}
DesiredValues:
- active
PropertySelector: .status.state
Outputs:
nodePoolInfo:
Type: Json
ValueSelector: .
- Name: modifyClusterNodePool
Action: ACS::ExecuteAPI
Description:
en: Ubah konfigurasi kolam node kluster
Properties:
Service: CS
API: ModifyClusterNodePool
Method: PUT
Headers:
Content-Type: application/json
URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
Body:
Fn::Jq:
- First
- '.+({"scaling_group": (.scaling_group + {"desired_size": {{desiredSize}}})}) | del(.scaling_group.login_password)'
- '{{ getNodePoolDetail.nodePoolInfo }}'
- Name: untilClusterNodePoolReady
Action: ACS::WaitFor
Description:
en: Tunggu hingga konfigurasi kolam node kluster selesai
Retries: 20
Properties:
Service: CS
API: DescribeClusterNodePoolDetail
Method: GET
Parameters: {}
URI: /clusters/{{clusterId}}/nodepools/{{nodepoolId}}
DesiredValues:
- active
PropertySelector: .status.state
Outputs:
adjustDetail:
Type: String
Value: '{{ describeScalingActivityDetail.detail }}'
lifecycleHookOOSExecutionResult:
Type: String
Value: '{{ getOOSExecutionOutput.lifecycleHookOOSExecutionResult }}'
Metadata:
ALIYUN::OOS::Interface:
ParameterGroups:
- Parameters:
- regionId
- resourceType
- scalingGroupId
- adjustmentType
- adjustmentCount
- instancesToBeRemoved
- clusterId
- nodepoolId
- desiredSize
Label:
default:
en: Parameter Konfigurasi Aturan Penskalaan
- Parameters:
- OOSAssumeRole
Label:
default:
en: Opsi Kontrol