开发者社区> 问答> 正文

运维编排oos 这边有个需求,能帮忙评估下吗?

这边有个需求,能帮忙评估下吗?
每天凌晨把各ECS重启下,(启动前后需要设置 slb 权重)
目前想法就是:
可以设置一个 stringlist参数
然后循环取出这些,先判断 ecs 状态,如果 OK 就修改其slb权重,然后重启,重启好后 ,把slb权重搞回来。然后循环把每台机器都搞一遍。

这个stringlist 参数,可以是复杂类型吗?比如json, oos 是否支持解析 json
原因 :各ecs slb 的权重不一样,想把这个以配对的形式维护到参数里。
这些要是伪代码描述,一般几行就搞完了。不太知道 运维编排oos 是否都能支持?

展开
收起
2401。 2023-08-06 20:24:57 88 0
4 条回答
写回答
取消 提交回答
  • 这个感觉不需要用参数,重启前把权重改成0,重启后改回之前的权重就可以吧。可以使用oos搞。此回答整理自钉群“运维编排OOS支持群”。

    2023-08-07 21:20:23
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    具体来说:

    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']) # 恢复权重

    2023-08-07 15:13:11
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    逻辑上看是可行的,但任务模板配置会比较复杂。

    创建模板
    任务循环,比如循环取出实例id,判断状态,再执行重启
    image.png

    执行的action
    1、调用ecs查询状态
    2、根据返回状态,执行Reboot

    2023-08-07 15:11:10
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    对于您的需求,我认为可以使用运维编排工具 OOS(AWS 的 OperatorHub 中的一个工具)来实现。OOS 支持使用 JSON 格式的参数,您可以将 ECS 实例 ID 和 SLB 权重以配对的形式保存在 JSON 中作为参数传递给 OOS。

    下面是一个可能的 OOS 任务步骤的伪代码描述:

    1. 定义一个 JSON 参数,包含 ECS 实例 ID 和 SLB 权重的配对信息,如:

      {
      "instances": [
       { "id": "instance-1", "weight": 50 },
       { "id": "instance-2", "weight": 30 },
       { "id": "instance-3", "weight": 20 }
      ]
      }
      
    2. 循环遍历 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 进行正确的操作。

    2023-08-06 23:48:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载