一个运维组件

简介

rundeck 是一个在多机器环境下实现自动化执行以及调度任务的开源工具。rundeck 提供了web 界面,用户可以通过web 界面定制任务,调度,观察节点的执行情况。

安装与配置

安装

rundeck 的官网位置rundeck
rundeck 运行依赖于java,因此需要首先安装并配置java

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

在 /etc/profile.d 目录下创建 java.sh, 在java.sh 中写入

#!/bin/bash
JAVA_HOME=/usr/bin/java
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME
export CLASSPATH=.

为java.sh 添加执行权限

chmod +x /etc/profile.d/java.sh

使java环境变量生效

source /etc/profile.d/java.sh

使用yum 安装rundeck

rpm -Uvh http://repo.rundeck.org/latest.rpm
yum install rundeck

如果使用yum 安装失败,可以使用rpm 的方式安装。

wget http://download.rundeck.org/rpm/rundeck-2.11.5-1.56.GA.noarch.rpm
wget http://download.rundeck.org/rpm/rundeck-config-2.11.5-1.56.GA.noarch.rpm
rpm -i rundeck-2.11.5-1.56.GA.noarch.rpm rundeck-config-2.11.5-1.56.GA.noarch.rpm

启动rundeck 服务

/etc/init.d/rundeckd start

检查rundeck 是否启动

ps -ef | grep rundeck
netstat -anp | grep 4440

配置

更改默认用户名密码

rundeck 默认用户名密码都是admin,可以更改/etc/rundeck/realm.properties 文件中相应位置。更改后重启rundeck 服务

service rundeckd restart

更改根url设置

如果只在部署rundeck的机器访问rundeck web界面则不需要

vim /etc/rundeck/rundeck-config.properties
vim /etc/rundeck/framework.properties

把这两个文件中所有的localhost 更改为本机的ip地址然后保存

添加node节点

在下面示例中展示

示例

在浏览器中输入rundeck 地址,以我部署的服务为例http://10.4.227.26:4440/
这里写图片描述
默认输入 admin admin 登录, 登录后新建一个project
这里写图片描述
输入新建project 的名称以及描述其他按照默认选择,以test 为例,滚动到页面最后点击create 创建
这里写图片描述
avatar
下一步继续按照默认配置保存
新建工程后,我们查看工程下的node 节点
avatar
可以看到默认情况工程下只有server node 节点。为了添加其他节点,我们进入到 /var/rundeck/projects/test/etc 路径,编辑resources.xml 文件,默认情况resources.xml 下只有server node, 如下图

<?xml version="1.0" encoding="UTF-8"?>

<project>
  <node name="10.4.227.26" description="Rundeck server node" tags="" hostname="10.4.227.26" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-123.el7.x86_64" username="rundeck"/>
</project>

以10.4.227.21为例,添加node节点,添加client node 节点后配置如下

<?xml version="1.0" encoding="UTF-8"?>

<project>
  <node name="10.4.227.26" description="Rundeck server node" tags="" hostname="10.4.227.26" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-123.el7.x86_64" username="rundeck"/>
  <node name="10.4.227.21" description="Rundeck client node" tags="" hostname="10.4.227.21" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-123.el7.x86_64" username="ce39906"/>
</project>

新增的hostname username 需要配置正确。
完成配置后,刷新web 界面,可以看到新增的10.4.227.21
avatar
仅仅在rundeck server 添加如下配置不能实现rundeck server 到client 的无密码连接。因此,我们登录到rundeck client机器(10.4.227.21),将 rundeck server(10.4.227.26) /var/lib/rundeck/.ssh/id_rsa.pub 的内容追加到 client 机器中的 ~/.ssh/authorized_keys
以上就完成rundeck node 节点的添加。下面我们测试通过web 界面配置在指定的node 节点上执行命令
avatar
选择所有节点后,我们以执行 ls /tmp 为例
avatar
点击右上角的执行,执行结果如下
avatar
除了简单的命令,rundeck job 支持实现更加复杂的任务。我们以执行脚本为例进行说明。首先新建一个job
avatar
配置job 的名称以及描述
avatar
在step 中选择执行脚本任务
avatar
点击后编辑脚本并保存
avatar
选择执行job 的node, 这里我们选择client node(10.4.227.21) 执行
avatar
其他使用默认配置,点击创建,创建完成后执行job
avatar
执行结果如下
avatar
可以看到在rundeck client 上执行了job 指定的脚本(执行 whoami 以及 ifconfig)

思考

rundeck 在完成初始配置后可以很方便用于在一组机器上执行各种任务,这种场景在生产环境以及日常运维中非常常见,类似的工具还有jenkins
前段时间公司部门要求开发自动部署工具,全套使用脚本+ ssh 的方式,健壮性和稳定性都存在不少问题。类似的自动部署的功能完全可以使用rundeck 配置job 的方式执行而不需要重新造轮子再搞一套鸡肋的东西。