这边有个需求,能帮忙评估下吗?
每天凌晨把各ECS重启下,(启动前后需要设置 slb 权重)
目前想法就是:
可以设置一个 stringlist参数
然后循环取出这些,先判断 ecs 状态,如果 OK 就修改其slb权重,然后重启,重启好后 ,把slb权重搞回来。然后循环把每台机器都搞一遍。
这个stringlist 参数,可以是复杂类型吗?比如json, oos 是否支持解析 json
原因 :各ecs slb 的权重不一样,想把这个以配对的形式维护到参数里。
这些要是伪代码描述,一般几行就搞完了。不太知道 运维编排oos 是否都能支持?
这个感觉不需要用参数,重启前把权重改成0,重启后改回之前的权重就可以吧。可以使用oos搞。此回答整理自钉群“运维编排OOS支持群”。
具体来说:
stringlist参数支持JSON格式,OOS可以解析JSON。
你可以定义一个ECS实例与SLB权重对的JSON数组作为参数。
再定义一个工作流,循环取出这个JSON数组中的每个实例:
判断ECS状态
修改其SLB权重
重启ECS实例
恢复SLB权重
工作流可以用Python、 Shell等语言编写,部署到OOS上执行。
需要注意的是:
确保修改SLB权重和重启实例之间时间尽量短,以减少流量影响
可以按批次分几次执行,不要同时操作太多实例
需要做好异常处理,某台ECS出现问题时不影响其他实例
大概的工作流伪代码可以写为:
python
Copy
for instance in instance_list:
if check_instance_status(instance['id']) == 'running':
slb.set_weight(instance['id'], 0) # 设置SLB权重0,舍出流量
instance.reboot() # 重启实例
slb.set_weight(instance['id'], instance['weight']) # 恢复权重
逻辑上看是可行的,但任务模板配置会比较复杂。
创建模板
任务循环,比如循环取出实例id,判断状态,再执行重启
执行的action
1、调用ecs查询状态
2、根据返回状态,执行Reboot
对于您的需求,我认为可以使用运维编排工具 OOS(AWS 的 OperatorHub 中的一个工具)来实现。OOS 支持使用 JSON 格式的参数,您可以将 ECS 实例 ID 和 SLB 权重以配对的形式保存在 JSON 中作为参数传递给 OOS。
下面是一个可能的 OOS 任务步骤的伪代码描述:
定义一个 JSON 参数,包含 ECS 实例 ID 和 SLB 权重的配对信息,如:
{
"instances": [
{ "id": "instance-1", "weight": 50 },
{ "id": "instance-2", "weight": 30 },
{ "id": "instance-3", "weight": 20 }
]
}
循环遍历 JSON 参数中的每个实例:
for instance in instances:
# 判断 ECS 实例状态是否 OK
if check_instance_status(instance["id"]) == "OK":
# 修改 SLB 权重为指定值
modify_slb_weight(instance["id"], instance["weight"])
# 重启 ECS 实例
restart_instance(instance["id"])
# 将 SLB 权重恢复为原始值
restore_slb_weight(instance["id"], instance["weight"])
以上只是一个简单的伪代码示例,实际实现可能需要根据您的具体环境和要求进行调整。您可以根据 OOS 的文档和 API 来实现这个任务,确保对 ECS 实例和 SLB 进行正确的操作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。