Início
Métricas suportadas
Autoscaling
Criando escalonamento de pod horizontal
Visualizando escalonamento de pod horizontal
Início
O escalonamento horizontal de um pod, definido pelo objeto HorizontalPodAutoscaler, especifica como o sistema deve automaticamente incrementar ou decrementar o escalonamento de um controlador de replicação ou configuração de deployment, baseado em métricas coletadas dos pods que pertencem ao controlador de replicação ou configuração de deployment.
Métricas suportadas
Atualmente apenas escalabilidade baseada em consumo de CPU está disponível.
Autoscaling
Você pode criar um escalonamento horizontal com o comando oc autoscale e especificar o número mínimo e máximo de pods que deseja executar, assim como a utilização de CPU que seus pods devem alcançar antes de escalar.
Depois que um autoescalonamento de pod é criado, começa a fazer consultas nas métricas dos pods. Isso pode levar um ou dois minutos antes do sistemas obter as métricas iniciais.
Depois que as métricas estão disponíveis no Heapster (o sistema de métricas), o autoescalonamento horizontal do pod computa o ratio entre o valor atual da métrica com a o valor configurado e escala para mais ou menos. O escalonamento irá ocorrer no intervalo de coleta, mas pode levar um ou dois minutos antes das métricas aparecerem no Heapster.
IMPORTANTE: O percentual informado no comando deve ser calculado a partir de uma regra proporcional ao tamanho do container. Veja abaixo como calcular este valor.
Para controladores de replicação, o escalonamento corresponde diretamente as replicas do controlador. Para configurações de deployment, vai escalar o deployment mais novo, ou, se nenhum deployment estiver presente, o template do controlador de replicação. O escalonamento irá ocorrer somente se o ultimo deployment estiver marcado como Complete.
Criando escalonamento de pod horizontal
Utilize o comando oc autoscale e especifique pelo menos o número máximo de pods que você quer rodar em qualquer momento. Você pode opcionalmente especificar o número mínimo de pods e o máximo de utilização de CPU que seus pods podem utilizar, caso contrário os valores default definido pelo servidor OpenShift prevalecerão.
O percentual de CPU deve ser calculado de acordo com a seguinte fórmula:
((limits_cpu * (threshold_cpu / 100))/requests_cpu) * 100
requests_cpu é o limite do consumo de cpu que vamos usar pra escalar (80% nesse exemplo).
Para descobrir os valores de limits_cpu e requests_cpu, execute:
$ oc describe dc/frontend |grep -A2 '\(Limits\|Requests\)'
Limits:
cpu: 366m <-- limits_cpu
memory: 512Mi
Requests:
cpu: 10m <-- requests_cpu
memory: 128Mi
Por fim, basta calcular o valor do percentual de cpu e configurar o autoscale:
$ cpu=$(bc -l <<<"((366 * (80 / 100))/10) * 100" | cut -f1 -d.)
$ oc autoscale dc/frontend --min 1 --max 10 --cpu-percent=$cpu
deploymentconfig "frontend" autoscaled
O exemplo anterior cria um escalonamento horizontal com a seguinte definição:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: frontend
spec:
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 2928
scaleTargetRef:
kind: DeploymentConfig
name: frontend
apiVersion: v1
O nome de objeto do escalonamento horizontal desse pod
O tipo de objeto que vai escalar
O nome do objeto a ser escalado
A versão de API do objeto a ser escalado
O número minimo de replicas a ser escalado
O número máximo de replicas a ser escalado
A porcentagem da CPU que cada pod deve estar utilizando
Visualizando escalonamento de pod horizontal
Para visualizar o status de um escalonamento horizontal. Utilize a flag -w para acompanhar a atualização em tempo real:
$ oc get hpa/frontend NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE frontend DeploymentConfig/default/frontend/scale 2928% 310% 1 10 1m
Mais detalhes podem ser obtidos com o comando: $ oc describe hpa/frontend Name: frontend Namespace: default Labels: <none> CreationTimestamp: Mon, 26 Oct 2015 21:13:47 -0400 Reference: DeploymentConfig/default/frontend/scale Target CPU utilization: 2928% Current CPU utilization: 310% Min pods: 1 Max pods: 10
Comentários
1 comentário
No exemplo o retorno foi copiado junto com o comando que deve ser dado. O correto seria:
Por exemplo:
$ oc autoscale dc/frontend --min 1 --max 10 --cpu-percent=80
e o retorno será:
deploymentconfig "frontend" autoscaled
Por favor, entre para comentar.