批量在多台ECS内执行命令的最佳实践
背景与痛点
阿里云的客户远程在ECS内部执行命令是最常见的运维操作之一了,比如在ECS内安装卸载软件,启动停止某个进程,等等。很多情况下,还需要对一个ECS列表中的多台ECS,统一的执行某个相同的命令并汇聚执行的结果。
一个可行的方案是利用SSH远程连接到ECS上执行命令,但是开放ECS的SSH端口给internet访问是危险的。客户可以通过自建跳板机来间接访问ECS以解决安全性的问题,但是这带来了复杂度和成本的上升。
Ansible是业界比较流行的开源的运维工具,但是其认证是独立于阿里云的账号体系之外的,无法通过阿里云的官方工具进行权限控制,其操作记录也无法在阿里云上进行审计。
如果用户使用的是Windows版本的ECS,虽然可以利用PowerShell远程执行命令,但是配置和维护过程更加困难。
在此,我们向大家推荐阿里云官方的批量在多台ECS内执行命令的最佳实践:运维编排服务OOS+云助手。云助手提供了在ECS内执行命令的原子能力,运维编排服务OOS则附加了更丰富的批量、定时、事件驱动、自定义模板等能力,两者结合,可以让ECS运维工作变得既安全又简单高效。
准备工作
准备工作只有两个简单步骤。
首先,请访问运维编排OOS的控制台点一下“立即开通”按钮完成服务的开通。这是一个免费服务,请放心开通。
https://oos.console.aliyun.com/
开通之后,请确保您已安装和配置了阿里云命令行工具CLI,且版本号大于等于 3.0.19。该CLI在Github上的下载链接为:https://github.com/aliyun/aliyun-cli/releases
开始执行
我们直接先看一个例子,我要针对cn-beijing地域的["i-1234","i-5678"]这两台远程Linux ECS,执行“echo 123”这个shell命令,我只需要在我本地的shell终端里,输入命令:
ali-xxxxxx:~ shengbo$ aliyun oos StartExecution --region cn-beijing --TemplateName ACS-ECS-BulkyRunCommand --Parameters '{"commandType":"RunShellScript", "commandContent":"echo 123", "targets":{"Type":"ResourceIds", "ResourceIds":["i-1234","i-5678"]}, "rateControl":{"maxErrors":0,"mode":"Concurrency"}, "OOSAssumeRole":"" }'
简单解释一下上面这个命令,它调用了oos的StartExecution的API,启动官方提供的公共模板ACS-ECS-BulkyRunCommand,传入包含了ECS实例列表(ResourceIds)和执行内容(commandContent)的参数。
该命令会返回一个json结构,如果你能找到"ExecutionId": "exec-xxxxx", 那么恭喜你,你指定的命令已经开始在远程执行了。
屏幕快照 2019-10-14 下午7.25.30.png
请记录下ExecutionId,然后作为参数输入到下面的ListExecutions命令查询执行的过程和结果:
ali-6c96cfde303d:~ shengbo$ aliyun oos ListExecutions --region cn-beijing --ExecutionId exec-xxxx
如果命令正在运行中,你会看到类似如下的结果,Status是“running”。TotalTasks是总的命令数,SuccessTasks是已经执行成功的命令数。两个数字的差,就是还待执行的命令数。
你可以多次执行同样的ListExecutions命令进行查看,直到看到Outputs表示整个命令的结果,对于本例,为两台ECS上的标准输出:
进阶-自定义模板
在上面的例子里,命令的参数有点过于复杂,其实我可以自定义模板把参数固定下来,让执行的命令变得格外简单。
自定义模板的命令如下,你可以根据自己的需要进行改写:
aliyun oos CreateTemplate --region cn-beijing --TemplateName sample123 --Content '{ "FormatVersion": "OOS-2019-06-01", "Tasks": [ { "Name": "runCommand", "Action": "ACS::ECS::RunCommand", "Properties": { "commandContent": "echo 1234", "instanceId": "{{ ACS::TaskLoopItem }}", "commandType": "RunShellScript" }, "Loop": { "Items": [ "i-1234", "i-5678" ], "Outputs": { "commandOutputs": { "AggregateType": "Fn::ListJoin", "AggregateField": "commandOutput" } } }, "Outputs": { "commandOutput": { "Type": "String", "ValueSelector": "invocationOutput" } } } ], "Outputs": { "commandOutputs": { "Type": "List", "Value": "{{ runCommand.commandOutputs }}" } } }'
今后,你只需要执行如下命令就可以完成和前面一样的效果了
ali-6c96cfde303d:~ shengbo$ aliyun oos StartExecution --region cn-beijing --TemplateName sample123 --Parameters '{}'
此命令调用oos的StartExecution这个API,执行sample123这个自定义模板,不需要额外传入参数。
当然,前面用CLI所做的一切操作,都可以在OOS控制台用白屏化的方式执行,链接为:
https://oos.console.aliyun.com/
了解更多
运维编排OOS是阿里云的运维自动化平台,适用于批量、定时、事件驱动、跨区域运维等场景,除了在ECS内执行命令外,还可以完成ECS创建释放,启停,变配,网络带宽升级,挂载云盘等等各种操作。
如果想了解更多,加入钉钉群“运维编排OOS支持群”,群号23330931。我们会有值班人员在线支持。
OOS管理控制台的链接:https://oos.console.aliyun.com
OOS帮助文档的链接 https://help.aliyun.com/product/119529.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【Kubernetes系列】第6篇 Ingress controller - nginx组件介绍
1. 概述 在上一篇文章中我们介绍了如何通过helm进行安装部署traefik组件,文中还提到常用的ingress controller除了traefik还有Nginx、HAProxy、Kong等,在本篇文章中我们就介绍如何安装部署Nginx-ingress,只有在经过积累不同组件的使用经验之后,我们才能更好的比较其优劣,形成最佳实践。 2. nginx-ingress组件的安装部署 2.1 通过helm查找nginx-ingress # step1: 通过helm查找nginx-ingress > helm search nginx-ingress > helm inspect stable/nginx-ingress 2.2 镜像下载及上传 部分企业由于服务器没有外网访问策略以及防火墙的原因无法获取国外Docker镜像,所以我们事先需要将所需镜像准备好,并上传到企业私有镜像仓库。 # step2: 镜像准备 > docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0....
- 下一篇
什么是阿里云备案服务号及相关疑问解答 要网站备案的朋友必看!
备案服务号是用于在阿里云备案系统填写备案信息时,关联阿里云服务器的验证码。本文档解答在申请备案服务号时遇到的一些常见疑问。老魏搜索网站备案知识时,无意中看到这些内容,感觉对于新手会有很大帮助,毕竟很多人都是初次接触网站备案,这些基础知识点还是应该尽快了解的。 1、云虚拟主机和云享主机可以申请备案服务号吗? 阿里云虚拟主机以及云享主机可以申请备案服务号。云虚拟主机通过备案平台或者云虚拟主机平台申请备案服务号。云享主机通过备案平台申请备案服务号。 2、我买的是阿里云的域名,服务器是其他供应商的,这种情况怎么申请备案服务号? 备案是在服务器提供商处的备案平台提交申请,请联系您的服务器提供商进行备案操作。 3、我没有买阿里云产品服务器如何获得备案服务号? 需要先购买可备案的阿里云服务器才能申请服务号。 4、为什么显示该ECS实例无可备案的IP? 目前阿里云可备案的ECS是包年包月且有公网带宽的国内节点服务器。如果没有公网IP,请先购买带宽。 5、已经备案一个网站,现在要增加一个网站,新域名如何申请备案服务号? 不同的云服务器在申请备案服务号时有相应数量限制: 6、为什么我没有在申请备案服务号页...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群