Ajuste o número de instâncias em um grupo de dimensionamento ou de nós em um pool de nós de cluster ACK ao criar e executar uma regra de dimensionamento.
Nome do modelo
ACS-ESS-AdjustScalingGroupInstanceCount
Descrição do modelo
Este modelo cria e executa uma regra para ajustar a quantidade de instâncias em um grupo de dimensionamento. Observação:
Caso o grupo de dimensionamento tenha um número esperado de instâncias configurado e a contagem real seja diferente, o Auto Scaling adicionará ou removerá instâncias automaticamente para atingir esse valor. Após a execução do modelo, visualize o resultado no console do Auto Scaling.
Após uma redução de escala, a quantidade de nós em um cluster ACK não pode ser inferior ao mínimo exigido pelos componentes. Caso contrário, o sistema retornará o código de erro IncorrectCapacity.
Antes de executar o modelo, confirme se o saldo da conta cobre o custo das novas instâncias. Se o saldo for insuficiente, o sistema retornará o código de erro InvalidAccountStatus.NotEnoughBalance.
Para expandir um grupo de dimensionamento implantado em várias zonas, defina o parâmetro AdjustmentCount como: Número de instâncias a adicionar por zona × Número de zonas.
Instâncias ECS adicionadas após uma expansão usam o método de faturamento pagamento conforme o uso. Modifique o método para assinatura conforme necessário. Para mais informações, consulte Alterar o método de faturamento de pagamento conforme o uso para assinatura.
Há dois métodos de redução de escala disponíveis: remova um número específico de instâncias ECS ao configurar o parâmetro AdjustmentCount ou exclua instâncias ECS específicas ao definir AdjustmentCount como 0 e escolha as instâncias desejadas.
A quantidade de instâncias removidas durante uma redução de escala não pode ser inferior ao número criado inicialmente para o grupo de dimensionamento.
O modelo também ajusta o número de nós em um pool de nós de cluster ACK. Para mais informações, consulte Criar e gerenciar pools de nós. Observação:
Leia o documento vinculado e conceda permissões à função AliyunOOSLifecycleHook4CSRole.
Tipo de modelo
Automatizado
Proprietário
Alibaba Cloud
Parâmetros de entrada
|
Parâmetro |
Descrição |
Tipo |
Obrigatório |
Valor padrão |
Limite |
|
resourceType |
Tipo de recurso a ajustar. |
String |
Não |
ESS |
|
|
regionId |
ID da região do grupo de dimensionamento. |
String |
Não |
{{ ACS::RegionId }} |
|
|
scalingGroupId |
ID do grupo de dimensionamento. |
String |
Não |
"" |
|
|
adjustmentType |
Método de dimensionamento. |
String |
Não |
ScaleOut |
|
|
adjustmentCount |
Quantidade de instâncias ECS a adicionar ou remover no grupo de dimensionamento. |
Number |
Não |
0 |
|
|
instancesToBeRemoved |
Instâncias ECS a remover do grupo de dimensionamento. |
Json |
Não |
{'Type': 'ResourceIds', 'ResourceIds': [], 'RegionId': '{{ ACS::RegionId }}'} |
|
|
clusterId |
ID do cluster ACK. |
String |
Não |
"" |
|
|
nodepoolId |
ID do pool de nós. |
String |
Não |
"" |
|
|
desiredSize |
Número esperado de nós. |
Number |
Não |
0 |
|
|
OOSAssumeRole |
Função RAM assumida pelo CloudOps Orchestration Service (OOS). |
String |
Não |
"" |
Parâmetros de saída
|
Parâmetro |
Descrição |
Tipo |
|
adjustDetail |
String |
|
|
lifecycleHookOOSExecutionResult |
String |
Política necessária para executar o modelo
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:DescribeInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ess:CreateScalingRule",
"ess:DeleteScalingRule",
"ess:DescribeScalingActivities",
"ess:DescribeScalingActivityDetail",
"ess:ExecuteScalingRule",
"ess:RemoveInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"oos:ListExecutions"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"cs:DescribeClusterNodePoolDetail",
"cs:ModifyClusterNodePool"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Referências
ACS-ESS-AdjustScalingGroupInstanceCount
Conteúdo do modelo
FormatVersion: OOS-2019-06-01
Description:
en: <p class="p">Adjust the number of instances in a scaling group by creating and executing scaling group rules. Description:</p>
<ul class="ul">
<li class="li">If the scaling group has been configured with the desired number of instances, when the number of instances in the scaling group is not equal to the expected number of instances, the auto scaling service will automatically scale to ensure that the number of instances in the scaling group is always maintained After the execution is complete, please go to the ESS console to view the adjustment results. </li>
<li class="li">The number of cluster nodes after scaling down the nodes cannot be less than the minimum node requirements of the component, otherwise the scaling operation may return an error of code:IncorrectCapacity. </li>
<li class="li">Please ensure that your account balance is greater than the cost of the newly purchased instance, otherwise an error of code:InvalidAccountStatus.NotEnoughBalance will be returned. </li>
<li class="li">If it is multi-zone, please expand the multiple of the number of zones. </li>
<li class="li">The payment method for the expanded ECS is pay-as-you-go. If necessary, customers need to Manual subcontracting yearly and monthly. </a></li>
<li class="li"> There are two ways to scale down: scale down the specified number of ECS instances (<b>the number of ECS instance adjustments in the scaling group</b> is not 0), remove the specified ECS instances from the scaling group (<b>The number of ECS instance adjustments in the scaling group</b> is 0 and the ECS instances to be removed is selected)</li>
<li class="li">The scaling cannot be less than the number initially opened in the scaling group. </li>
</ul>
<p class="p">Adjust the number of instances in a scaling group by creating and executing scaling group rules. Description:</p>
<ul class="ul">
<li class="li">Adjust ACK cluster node pool<a href='https://www.alibabacloud.com/help/en/ack/ack-edge/user-guide/create-a-node-pool?spm=a3c0i.23458820.2359477120.9.57186e9b4Ewe21'>Expected number of nodes</a>, please read the linked document carefully and authorize the role 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: Choose next task by resource type
Properties:
DefaultTask: whetherToRemoveInstancesFromScalingGroup
Choices:
- When:
Fn::Equals:
- 'ACK'
- '{{ resourceType }}'
NextTask: getNodePoolDetail
- Name: whetherToRemoveInstancesFromScalingGroup
Action: 'ACS::Choice'
Description:
en: Choose next task by adjustment type
Properties:
DefaultTask: createScalingRule
Choices:
- When:
Fn::And:
- Fn::Equals:
- '{{adjustmentType}}'
- ScaleIn
- Fn::Equals:
- '{{adjustmentCount}}'
- 0
NextTask: getInstanceToBeRemoved
- Name: getInstanceToBeRemoved
Description:
en: Get the ECS instance to be removed
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: Remove instances from scaling group
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: Create a 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: Execute the 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: Poll scaling activity execution until success or failure
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: Delete ScalingRule
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: DeleteScalingRule
Parameters:
RegionId: '{{ regionId }}'
ScalingRuleId: '{{ createScalingRule.scalingRuleId }}'
- Name: describeScalingActivityDetail
Description:
en: Describe scaling activity detail
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: Get the lifecycle hook OOS execution output
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: Get cluster node pool info
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: Modify cluster node pool configuration
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: Wait for the cluster node pool configuration to complete
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: Scaling Rule Configure Parameters
- Parameters:
- OOSAssumeRole
Label:
default:
en: Control Options