Thanks HU yanyan, I still has some questions about your answers, and I
respond inline.
On 2015/11/23 10:43, Yanyan Hu wrote:
Hi, Xu Jun, please find some answers inline. Thanks.
2015-11-20 16:06 GMT+08:00 xu...@cmss.chinamobile.com
<mailto:xu...@cmss.chinamobile.com> <xu...@cmss.chinamobile.com
<mailto:xu...@cmss.chinamobile.com>>:
Thanks yanyan!
Xu Jun is a contributor from CMCC. He asked a very interesting
question about cluster scaling support in Senlin. To make the
discussion more thorough, I just post the question and my
answer here.
The question from Jun is as following:
For an action, senlin will check all according polices, like
if a cluster attach two scaling-in polices,
the two scaling-in polices will be checked when doing a
scaling-action on this cluster. This is not same as
OS::Heat::ScalingPolicy in heat?
How should I use senlin for following cases?
1. 15% < cpu_util < 30%, scaling_in 1 instance
2. cpu_util < 15%, scaling_in 2 instances
This is a very interesting question and you're right about the
difference between Senlin ScalingPolicy and
OS::Heat::ScalingPolicy. In Heat, OS::Heat::ScalingPolicy is
actually not just a policy. It is a combination of a webhook
and a rule about how ASG respond to the webhook
triggering(resource signal). So you can define two different
OS::Heat::ScalingPolicy instances to make them deal with two
cases you described respectively.
But in Senlin, ScalingPolicy is a REAL policy, it only
describes how a Senlin cluster react to an action triggered by
Senlin webhook which is defined separately. The problem is
when an cluster action e.g. CLUSTER_SCALE_IN is triggered, all
policies attached to it will be checked in sequence based on
policies priority definition._So if you create two Senlin
ScalingPolicy and attach them to the same cluster, only one of
them will take effect actually._
_
_
# 1. But in policy_check function, all the policies will be
checked in priority-based order for a CLUSTER_SCALING_IN
action if the cluster attached with SCALING multiple policies.
is this a bug? or what is the significanceof prority).
/Sorry, I didn't describe it clearly. I mean although both scaling
policies will be checked before CLUSTER_SCALING_IN action is executed,
count result from one ScalingPolicy will actually be overridden by the
result from another ScalingPolicy which has higher priority./
After debugging, I found that former result is not overridden by
another policy.
http://git.openstack.org/cgit/openstack/senlin/tree/senlin/engine/actions/base.py#n441
2. if a cluster attached a scaling policy with event =
CLUSTER_SCALE_IN, when aCLUSTER_SCALING_OUT action is
triggered, the policy also will be checked, is this reasonable?
/ When a ScalingPolicy is defined, you can use 'event'
property to specify the action type you want the policy to take effect
on, like:
http://git.openstack.org/cgit/openstack/senlin/tree/examples/policies/scaling_policy.yaml#n5
Although a ScalingPolicy will be checked for both
CLUSTER_SCALE_IN and CLUSTER_SCALE_OUT actions, the check routine will
return immediately if the action type is not what it is expecting.
http://git.openstack.org/cgit/openstack/senlin/tree/senlin/policies/scaling_policy.py#n133/
Yes it's not checked in pre_op, but all ScalingPolicies still will be
checked whether in cooldown.
http://git.openstack.org/cgit/openstack/senlin/tree/senlin/engine/actions/base.py#n431*
*
Currently, you can use the following way to support your use
case in Senlin:
1. Define two Senlin webhooks which target on the
CLUSTER_SCALE_OUT action of the cluster and specify the
'param' as {'count': 1} for webhook1 and {'count': 2 } for
webhook2;
1. Define two ceilometer/aodh alarms with the first one
matching case1 and second one matching case2. Then define
webhook1 url as alarm1's alarm-action and webhook2 url as
alarm2's alarm-action.
#
Your suggestion has a problem when I want different cooldown
for each ceilometer/aodh alarms, for following cases, how
should I do?
1. 15% < cpu_util < 30%, scaling_in 1 instance with 300s
cooldown time
2. cpu_util < 15%, scaling_in 2 instances with 600s
cooldown time
/ You can define the cooldown by specifying it when creating the
policy or attaching it to a cluster. The cooldown check logic will
prevent a policy taking effect if cooldown is still in progress.
http://git.openstack.org/cgit/openstack/senlin/tree/senlin/engine/actions/base.py#n431
/
For a senlin webhook, could we assign a policy which will be
checked ?
/ User is not allowed to specify the policy when defining a webhook.
The webhook target is decided by target object(cluster or node) and
target action type./
Yes we can define cooldown for each policy, but my meaning is that
each cluster_scaling_in action is only checked by specified
scaling_policy like OS::Heat::ScalingPolicy in heat.
1) In heat, we could define two scaling_in actions(via define two
OS::Heat::ScalingPolicy polices ), each scaling_in action is checked by
one OS::Heat::ScalingPolicy, so each scaling_in action's cooldown is
only checked in one OS::Heat::ScalingPolicy.
2)But in senlin, each scaling_in action will be checked by all
attached scaling_policies, so all scaling_polices' cooldown will be
checked.How does senlin support different cooldown time for each
scaling_in action?
Then each time alarm1 is triggered, cluster will be scaled out
with count 1 which means one new node will be created and
added to cluster. When alarm2 is triggered, cluster will be
scaled out with count 2 that two new nodes will be created and
added to cluster.
The question you asked is really interesting and we did
consider to support this kind of requirement using a 'complex'
ScalingPolicy which defined both trigger(alarm), webhook and
some rules for scaling. But after some discussion, we felt
that maybe we should let some high level service/enduser to
define this kind of 'POLICY' since it's more like a workflow
definition rather than a description of the rule cluster
scaling. So currently, we only provide atomic operation(e.g.
webhook, 'simple' ScalingPolicy) in Senlin while leaving the
work of combining these operations to support a use case to
enduser/high-level service.
Thanks a lot for throwing this interesting question and I do
agree that we should make more discussion about it to think
whether we need to adjust our policy design to support this
kind of scenario more smoothly.
--
Best regards,
Yanyan
--
Best regards,
Yanyan
__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
--
Best regards,
Jun Xu
__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev