Criação de uma política de dimensionamento de nós
O CCE fornece dimensionamento de nó por meio do complemento autoscaler. Os nodes com especificações diferentes podem ser adicionados automaticamente em AZs sob demanda.
Se uma política de dimensionamento de nó e a configuração no complemento autoscaler entrarem em vigor ao mesmo tempo, por exemplo, há pods que não podem ser agendados e o valor de uma métrica atinge o limite ao mesmo tempo, expansão é realizada primeiro para os pods não programáveis.
- Se a expansão for bem-sucedida para os pods não programáveis, o sistema ignora a lógica de regra baseada em métricas e entra no próximo loop.
- Se a expansãot falhar para os pods não programáveis, a regra baseada em métrica será executada.
Pré-requisitos
Antes de usar a função de dimensionamento de nó, instale o complemento autoscaler da v1.13.8 ou posterior no cluster.
Restrições
- Somente os pools de nós de pagamento por uso suportam o dimensionamento automático.
- As políticas de dimensionamento automático se aplicam aos pools de nós. Quando o número de nós em um pool de nós é 0 e a política de dimensionamento é baseada no uso da CPU ou da memória, o escalonamento de nós não é acionado.
- A redução de nó causará perda de dados de PVC/PV para os PVs locais associado ao nó. Esses PVCs e PVs não podem ser restaurados ou usados novamente. Numa redução de nó, o pod que usa o PV local é despejado do nó. Um novo pod é criado e permanece no estado pendente. Isso ocorre porque a PVC usada pelo pod tem um rótulo de nó, devido ao qual o pod não pode ser programado.
Procedimento
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- Escolha Node Scaling no painel de navegação.
- Se Uninstalled for exibido ao lado do nome do complemento, clique em Install, defina os parâmetros do complemento conforme necessário e clique em Install para instalar o complemento.
- Se Installed for exibido ao lado do nome do complemento, o complemento foi instalado.
- Clique em Create Node Scaling Policy no canto superior direito e defina os parâmetros da seguinte forma:
- Policy Name: nome da política a ser criada, que pode ser personalizada.
- Associated Node Pools: selecione o pool de nós a ser associado. Você pode associar vários pools de nós para usar a mesma política de dimensionamento.
- Rules: clique em Add Rule. Na caixa de diálogo exibida, defina os seguintes parâmetros:
Rule Name: insira o nome de uma regra.
Rule Type: você pode selecionar Metric-based ou Periodic. As diferenças entre os dois tipos são as seguintes:
- Metric-based:
Condition: selecione CPU allocation rate ou Memory allocation rate e insira um valor. O valor deve ser maior do que a porcentagem de dimensionamento configurada no complemento autoscaler.
- Alocação de recursos (%) = recursos solicitados pelos pods no pool de nós/recursos alocáveis aos pods no pool de nós
- Se várias regras atenderem às condições, as regras serão executadas em um dos seguintes modos:
Se as regras baseadas na CPU allocation rate e na memory allocation rate forem configuradas e duas ou mais regras atenderem às condições de expansão, a regra que adicionará a maioria dos nós será executada.
Se uma regra baseada na CPU allocation rate e uma regra periódica forem configuradas e ambas atenderem às condições de expansão, uma delas será executada aleatoriamente. A regra executada primeiro (regra A) altera o pool de nós para o estado de escala. Como resultado, a outra regra (regra B) não pode ser executada. Depois que a regra A for executada e o status do pool de nós se tornar normal, a regra B não será executada.
- Se regras baseadas na CPU allocation rate e na memory allocation rate estiverem configuradas, o período de detecção de política varia de acordo com a lógica de processamento de cada loop do complemento autoscaler. A expansão é acionada quando as condições são atendidas, mas é limitada por outros fatores, como o intervalo de resfriamento e o status do pool de nós.
- Periodic:
Trigger Time: você pode selecionar um ponto de tempo específico todos os dias, todas as semanas, todos os meses ou todos os anos.
Action: defina uma ação a ser executada quando a condição de gatilho for atendida.
Você pode clicar em Add Rule para adicionar mais políticas de dimensionamento de nó. Você pode adicionar no máximo uma regra baseada em uso de CPU e uma regra baseada em uso de memória. O número total de regras não pode exceder 10.
- Metric-based:
- Clique em OK.
Restrições em redução
Você pode definir políticas de expansão do nó somente ao instalar o complemento autoscaler.
A redução de nó pode ser acionada somente pela taxa de alocação de recursos. Quando as taxas de alocação de CPU e memória em um cluster são menores do que os limites especificados (definidos quando o complemento autoscaler é instalado ou modificado), a redução é acionada para os nós no pool de nós (essa função pode ser desativada), conforme mostrado na Figura 1
Exemplo YAML
Veja a seguir um exemplo YAML de uma política de dimensionamento de nó:
apiVersion: autoscaling.cce.io/v1alpha1 kind: HorizontalNodeAutoscaler metadata: creationTimestamp: "2020-02-13T12:47:49Z" generation: 1 name: xxxx namespace: kube-system resourceVersion: "11433270" selfLink: /apis/autoscaling.cce.io/v1alpha1/namespaces/kube-system/horizontalnodeautoscalers/xxxx uid: c2bd1e1d-60aa-47b5-938c-6bf3fadbe91f spec: disable: false rules: - action: type: ScaleUp unit: Node value: 1 cronTrigger: schedule: 47 20 * * * disable: false ruleName: cronrule type: Cron - action: type: ScaleUp unit: Node value: 2 disable: false metricTrigger: metricName: Cpu metricOperation: '>' metricValue: "40" unit: Percent ruleName: metricrule type: Metric targetNodepoolIds: - 7d48eca7-3419-11ea-bc29-0255ac1001a8
Parâmetro |
Tipo |
Descrição |
---|---|---|
spec.disable |
Bool |
Se ativar a política de dimensionamento. Este parâmetro tem efeito para todas as regras na política. |
spec.rules |
Array |
Todas as regras em uma política de dimensionamento. |
spec.rules[x].ruleName |
String |
Nome da regra. |
spec.rules[x].type |
String |
Tipo da regra. Atualmente, Cron e Metric são suportados. |
spec.rules[x].disable |
Bool |
Troca de regra. Atualmente, apenas false é suportado. |
spec.rules[x].action.type |
String |
Tipo de ação de regra. Atualmente, apenas ScaleUp é suportado. |
spec.rules[x].action.unit |
String |
Unidade de ação de regra. Atualmente, apenas Node é suportado. |
spec.rules[x].action.value |
Integer |
Valor da ação da regra. |
spec.rules[x].cronTrigger |
/ |
Opcional. Este parâmetro é válido apenas em regras periódicas. |
spec.rules[x].cronTrigger.schedule |
String |
Expressão Cron de uma regra periódica. |
spec.rules[x].metricTrigger |
/ |
Opcional. Esse parâmetro é válido somente em regras baseadas em métricas. |
spec.rules[x].metricTrigger.metricName |
String |
Métrica de uma regra baseada em métricas. Atualmente, Cpu e Memory são suportados. |
spec.rules[x].metricTrigger.metricOperation |
String |
Operador de comparação de uma regra baseada em métricas. Atualmente, apenas > é suportado. |
spec.rules[x].metricTrigger.metricValue |
String |
Limite métrico de uma regra baseada em métricas. O valor pode ser qualquer número inteiro de 1 a 100 e deve ser uma cadeia de caracteres. |
spec.rules[x].metricTrigger.Unit |
String |
Unidade do limite de regra baseado em métricas. Atualmente, apenas % é suportado. |
spec.targetNodepoolIds |
Array |
Todos os pools de nós associados à política de dimensionamento. |
spec.targetNodepoolIds[x] |
String |
ID do pool de nós associado à política de dimensionamento. |