rundeck 介绍


Rundeck 是一款能在数据中心或云环境中的日常业务中使程序自动化的开源软件。Rundeck 提供了大量功能,可以减轻耗时繁重的体力劳动。团队可以相互协作,分享如何过程自动化,查看业务活动或执行任务。Rundeck 允许您运行任意数量的节点从一个基于 web 的任务或命令行界面。Rundeck 还包括其他功能,使其易于扩展,您自动化努力包括 ︰ 访问控制、 工作流建设、 调度、 记录和与外部源节点和选项数据集成。具体流程图参照官网的如下:

rundeck发布_第1张图片



安装


Rundeck 是你主机系统的服务器应用程序你指定一个中央行政控制中心。内部,Rundeck 将作业定义和执行历史记录存储在关系数据库中。输出从命令和工作处决保存在磁盘上,但可以转发到远程存储例如logstash。


Rundeck 分布式执行使用默认为 SSH 但插件允许您使用其他手段如 MCollective、 Salt、 WinRM 或自定义的方法的可插拔的节点执行层的命令。Rundeck 服务器配置包括定义允许的远程主机的出站用户的设置。远程计算机不需要回发到服务器进行连接。


1、安装JDK


Rundeck 是一个基于 Java Servlet 服务器,因此需要支持Java 运行环境


#java -version

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

2、安装Rundeck


这里使用的是rundeck的jar包安装,读者也可以采用rpm包方式的安装,这里看个人喜好,版本为目前最新版本,下载地址 http://rundeck.org/downloads.html


rundeck-launcher-2.6.3.jar

定义Rundeck的环境变量来进行下一步的安装


#vim /etc/profile 在末尾添加

export RDECK_BASE=/opt/programs/rundeck_2.6.3 安装目录可以自己定义

#source /etc/profile

#echo $RDECK_BASE

/opt/programs/rundeck_2.6.3

定义安装目录后创建之后才能安装


#mkdir -p $RDECK_BASE

复制下载的jar包到安装目录夹中


#cp rundeck-launcher-2.6.3.jar $RDECK_BASE

启动jar包


#cd $RDECK_BASE

#java -XX:MaxPermSize=256m -Xmx1024m -jar rundeck-launcher-2.6.3.jar

等待启动成功的信息


2010-11-19 13:35:51.127::INFO:  Started [email protected]:4440

当出现如上图的信息,表示当前服务启动成功,端口监听在默认端口4440,初始用户和密码都是admin

rundeck发布_第2张图片



启动成功后,我们可以看到rundeck的目录下有以下目录:


#ls 

etc  libext  projects  rundeck-launcher-2.6.3.jar  server  tools  var

启动和关闭

在初始化jar包之后,下一次启动和关闭可以进行如下操作:


#Startup

$RDECK_BASE/server/sbin/rundeckd start

#Shutdown

$RDECK_BASE/server/sbin/rundeckd stop

我这里采用的是普通用户apprun登录,RPM包默认的是rundeck用户,读者可以定义启动的用户,具体修改如下:


#vim /$RDECK_BASE/etc/framework.properties

framework.ssh.keypath = /home/apprun/.ssh/id_rsa #ssh认证用户的key存放目录

framework.ssh.user = apprun                      #启动默认用户

#chown apprun:apprun rundeck_2.6.3/ -R           #修改完之后,别忘了修改rundeck目录的宿主

简单使用Rundeck


1、几个基本概念


Role-based Access Control Policies︰ Rundeck 访问控制策略将授予用户和用户组某些权限执行权限限制访问rundeck 资源,如项目、 工作、 节点、 命令和 API。


Projects ︰ 项目是分开管理活动的地方。所有的 Rundeck 活动发生在项目的上下文内。多个项目可以保持相同的 Rundeck 服务器上。


Jobs ︰ 作业封装步骤、 作业选项和节点在哪里执行步骤的序列。


Nodes ︰ 节点是一种资源,是网络访问主机物理或虚拟实例。资源模型是在项目中的节点表示。


Commands ︰ 命令是在一个节点上执行单个可执行字符串。Rundeck 调用命令通过节点的遗嘱执行人并计算命令字符串来执行它的节点上。


Executions ︰ 执行是活动的表示某一正在运行或已完成的命令或工作。关于执行数据在 rundeck 用于监测进展的工作或命令和后来的报道发生了什么事。


Plugins ︰ Rundeck 所做的大多数是通过其插件之一。插件的存在在节点上执行命令、 执行中的工作步骤、 发送关于作业状态的通知,收集有关您的网络中的主机的信息,将一个文件复制到远程的服务器、 存储和流日志,或谈到用户目录。


在开始之前,简述一下我的环境:

rundeck-server:bd-stg-test-97

rundeck-node1:bd-stg-test-98

rundeck-node2:bd-stg-test-99

ssh认证已经做好,97上的apprun均可以免密码登录到98和99


2、添加Project


点击添加

rundeck发布_第3张图片


添加项目名以及描述

rundeck发布_第4张图片


选择ssh认证key存放位置


rundeck发布_第5张图片



点击创建

rundeck发布_第6张图片


创建完成后可以看到如下。此时并没有任何job和node:

rundeck发布_第7张图片rundeck发布_第8张图片


3、添加Node


在创建完一个project之后,在rundeck的主目录下面,保存着它的一个配置,在node的配置文件中添加节点如下:


#vim /opt/programs/rundeck_2.6.3/projects/Rundeck_Test/etc/resources.xml 

 

 

 

添加完成后,不需要重启服务,刷新后,可以看到node信息已经出现在web界面上:

rundeck发布_第9张图片



我们来进行一个测试,是否能在web界面上远程控制操作两台node,这个过程类似于saltstack:


rundeck发布_第10张图片


执行命令很简单,每一台的执行结果也清晰地展现出来了,说明服务端与节点之间的配置已经完成了,如果出现了ssh认证错误,还要重现检查一下目录权限和ssh认证配置有没有错误。


4、添加Job


创建job

rundeck发布_第11张图片


添加job的命名和描述,这里只是一个简单的测试,所以还是用的上面的例子

rundeck发布_第12张图片


点击创建

rundeck发布_第13张图片


执行job

rundeck发布_第14张图片


查看执行结果

rundeck发布_第15张图片rundeck发布_第16张图片


  1. 在后面写命令的时候,可通过${option.op1}调用op1变量 ;

    • 发送邮件,如图: 
       
      在任务开始、失败、成功时都可以发送邮件,邮件的配置信息需要添加在rundeck/server/config/rundeck-config.properties中,配置如下: 
       
      这里使用的是QQ邮箱,注意必须开通邮箱的POP3/SMTP功能。

    • 定时任务,如图: 
       
      可通过Crontab来定时任务,规则就不详细讲了,度娘很明白!

    • 其他,还可以配置允许同时多次执行同一个任务,失败或超时时自动重试,重试次数也可自行设定。

4.修改数据存储

默认所有的数据都是以文件的形式存储的,时间越久数据量越大,操作起来就越慢,服务器突然断电的情况下Rundeck很有可能就再也起不来了,故我们可以将数据存储在Mysql中,配置文件也是在rundeck/server/config/rundeck-config.properties中,配置如下:

```
dataSource.url=jdbc:mysql://192.168.1.34/rundeck?autoReconnect=true&useUnicode=true&characterEncoding=UTF8
dataSource.username=root
dataSource.password=****
```

重启Rundeck即可。