RunDeckを使ってみる
今回はRunDeckというツールを試してみる事にしました。
RunDeckとは?
RunDeckとは
「データセンターやクラウド環境において、決まった手順を自動化する助けとなるソフトウェア」ということです。
ジョブ管理ツールですね。
今回はまずインストールして簡単に触るところまで。
インストールする
インストールはyumを使えば簡単です。
# rpm -Uvh http://rundeck.org/latest.rpm http://rundeck.org/latest.rpm を取得中 準備中... ########################################### [100%] 1:rundeck-repo ########################################### [100%] # yum install rundeck Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp rundeck-release | 951 B 00:00 rundeck-release/primary | 1.8 kB 00:00 rundeck-release 8/8 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package rundeck.noarch 0:1.3.0-2.48 set to be updated --> Processing Dependency: java-1.6.0-openjdk for package: rundeck --> Processing Dependency: rundeck-config for package: rundeck --> Running transaction check ---> Package java-1.6.0-openjdk.x86_64 1:1.6.0.0-1.22.1.9.8.el5_6 set to be updated --> Processing Dependency: jpackage-utils >= 1.7.3-1jpp.2 for package: java-1.6.0-openjdk --> Processing Dependency: libasound.so.2(ALSA_0.9)(64bit) for package: java-1.6.0-openjdk --> Processing Dependency: libasound.so.2(ALSA_0.9.0rc4)(64bit) for package: java-1.6.0-openjdk --> Processing Dependency: tzdata-java for package: java-1.6.0-openjdk --> Processing Dependency: libXtst.so.6()(64bit) for package: java-1.6.0-openjdk --> Processing Dependency: libasound.so.2()(64bit) for package: java-1.6.0-openjdk --> Processing Dependency: libgif.so.4()(64bit) for package: java-1.6.0-openjdk ---> Package rundeck-config.noarch 0:1.3.0-2.48 set to be updated --> Running transaction check ---> Package alsa-lib.x86_64 0:1.0.17-1.el5 set to be updated ---> Package giflib.x86_64 0:4.1.3-7.3.3.el5 set to be updated ---> Package jpackage-utils.noarch 0:1.7.3-1jpp.2.el5 set to be updated ---> Package libXtst.x86_64 0:1.0.1-3.1 set to be updated ---> Package tzdata-java.x86_64 0:2011g-1.el5 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: rundeck noarch 1.3.0-2.48 rundeck-release 45 M Installing for dependencies: alsa-lib x86_64 1.0.17-1.el5 base 414 k giflib x86_64 4.1.3-7.3.3.el5 updates 39 k java-1.6.0-openjdk x86_64 1:1.6.0.0-1.22.1.9.8.el5_6 updates 37 M jpackage-utils noarch 1.7.3-1jpp.2.el5 base 61 k libXtst x86_64 1.0.1-3.1 base 16 k rundeck-config noarch 1.3.0-2.48 rundeck-release 7.9 k tzdata-java x86_64 2011g-1.el5 updates 180 k Transaction Summary ================================================================================ Install 8 Package(s) Upgrade 0 Package(s) Total download size: 82 M Is this ok [y/N]: y
リポジトリの設定ファイルはこんな感じでした。
# cat /etc/yum.repos.d/rundeck.repo [rundeck-release] name=Rundeck - Release baseurl=http://rundeck.org/repo/rundeck/1/release gpgkey=http://rundeck.org/repo/RPM-GPG-KEY-RunDeck.org gpgcheck=0 [rundeck-updates] name=Rundeck - Updates baseurl=http://rundeck.org/repo/rundeck/1/updates gpgkey=http://rundeck.org/repo/RPM-GPG-KEY-RunDeck.org gpgcheck=0 enabled=0 [rundeck-bleeding] name=Rundeck - Bleeding Edge baseurl=http://rundeck.org/repo/rundeck/1/bleedingedge gpgcheck=0 enabled=0
ユーザー登録
ユーザーを登録します。設定ファイルは「/etc/rundeck/realm.properties」です。
ユーザー名:パスワード(クリアテキスト)の形で設定します。
# The format is # <username>: <password>[,<rolename> ...]
パスワードはMD5形式で指定することが出来ました。
例えば、「admin」というパスワードを設定したければ、以下のように計算します。
# echo "admin" | md5sum 456b7016a916a4b178dd72b947c152b7 -
MD5を使ってハッシュ化したパスワードの設定例は以下の通りです。
admin: MD5:456b7016a916a4b178dd72b947c152b7,server-administrator,content-administrator,admin
※LDAP, ActiveDirectoryと連携したユーザー管理も可能なようです。どこかで試してみようと思います。
起動してみる
今回はRPMパッケージでインストールしたので、普通に起動スクリプトをキックすればOK。
# /etc/init.d/rundeckd start rundeckd を起動中: [ OK ]
その後、Webブラウザから「http://xxx.xxx.xxx.xxx:4440」へアクセスします。
以下の画面が表示されれば、起動しています。
設定したユーザーでログインすると以下の画面が表示されます。
簡単なジョブを作ってみる
複数サーバーに対してリモートログインして、決められたコマンドを順番に発行するというのを試します。
今回検証用に3ノード用意しました。詳細は以下の通りです。
- rundeck-test1(リモート操作用ノード#1)
- rundeck-test2(リモート操作用ノード#2)
- rundeck-test3(Rundeckを動かすノード)
sshログインはrundeckユーザー経由で実行されます。
rundeck-test3上で、パスフレーズ無しの公開鍵/秘密鍵のペアを作成します。
その後公開鍵はそれぞれ、rundeck-test1、rundeck-test2に配布しました。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/rundeck/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/rundeck/.ssh/id_rsa. Your public key has been saved in /home/rundeck/.ssh/id_rsa.pub. The key fingerprint is: ac:bf:2f:53:b7:b4:6d:40:b0:21:7e:1d:ee:86:85:07 rundeck@rundeck-test3
「rundeck-test1」「rundeck-test2」にSSHログイン後、Apache/MySQLを再起動できるようにするために、以下の設定を行います。
# visudo (1)以下の行をコメントアウト #Defaults requiretty (2)以下の行を追加 rundeck ALL=(root) NOPASSWD:/etc/init.d/httpd, /etc/init.d/mysqld
管理画面ログイン後、上部メニュー「Jobs」→右メニューの「New Jobs...」をクリックし、
ジョブを登録します。
具体的に登録したジョブは以下の通りです。
■rundeck-test1に対してApache/MySQLの停止・起動 (1) [rundeck@rundeck-test1] $sudo /etc/init.d/httpd stop (2) [rundeck@rundeck-test1] $sudo /etc/init.d/mysqld stop (3) [rundeck@rundeck-test1] $sudo /etc/init.d/mysqld start (4) [rundeck@rundeck-test1] $sudo /etc/init.d/httpd start ■rundeck-test2に対して、Apache/MySQLの停止・起動 (5) [rundeck@rundeck-test2] $sudo /etc/init.d/httpd stop (6) [rundeck@rundeck-test2] $sudo /etc/init.d/mysqld stop (7) [rundeck@rundeck-test2] $sudo /etc/init.d/mysqld start (8) [rundeck@rundeck-test2] $sudo /etc/init.d/httpd start
実行すると、無事指定した順番に停止→起動のオペレーションを行う事が出来ました。
■rundeck-test1に対してApache/MySQLの停止・起動 (1) dispatch -p test -I hostname="xxx.xxx.xxx.5" -- sudo /etc/init.d/httpd stop [Thu Sep 15 01:50:18 2011] [notice] caught SIGTERM, shutting down (2) dispatch -p test -I hostname="xxx.xxx.xxx.5" -- sudo /etc/init.d/mysqld stop 110915 1:50:20 [Note] /usr/libexec/mysqld: Normal shutdown 110915 1:50:20 InnoDB: Starting shutdown... 110915 1:50:21 InnoDB: Shutdown completed; log sequence number 0 43655 110915 1:50:21 [Note] /usr/libexec/mysqld: Shutdown complete 110915 01:50:21 mysqld ended (3) dispatch -p test -I hostname="xxx.xxx.xxx.5" -- sudo /etc/init.d/mysqld start 110915 01:50:23 mysqld started 110915 1:50:23 InnoDB: Started; log sequence number 0 43655 110915 1:50:23 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.0.77' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution (4) dispatch -p test -I hostname="xxx.xxx.xxx.5" -- sudo /etc/init.d/httpd start [Thu Sep 15 01:50:24 2011] [notice] SELinux policy enabled; httpd running as context user_u:system_r:httpd_t:s0 [Thu Sep 15 01:50:24 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Thu Sep 15 01:50:24 2011] [notice] Digest: generating secret for digest authentication ... [Thu Sep 15 01:50:24 2011] [notice] Digest: done [Thu Sep 15 01:50:24 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations ■rundeck-test2に対して、Apache/MySQLの停止・起動 (5) dispatch -p test -I hostname="xxx.xxx.xxx.6" -- sudo /etc/init.d/httpd stop [Thu Sep 15 01:50:29 2011] [notice] caught SIGTERM, shutting down (6) dispatch -p test -I hostname="xxx.xxx.xxx.6" -- sudo /etc/init.d/mysqld stop 110915 1:50:32 [Note] /usr/libexec/mysqld: Normal shutdown 110915 1:50:32 InnoDB: Starting shutdown... 110915 1:50:32 InnoDB: Shutdown completed; log sequence number 0 43655 110915 1:50:32 [Note] /usr/libexec/mysqld: Shutdown complete 110915 01:50:32 mysqld ended (7) dispatch -p test -I hostname="xxx.xxx.xxx.6" -- sudo /etc/init.d/mysqld start 110915 01:50:35 mysqld started 110915 1:50:36 InnoDB: Started; log sequence number 0 43655 110915 1:50:36 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.0.77' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution (8) dispatch -p test -I hostname="xxx.xxx.xxx.6" -- sudo /etc/init.d/httpd start [Thu Sep 15 01:50:37 2011] [notice] SELinux policy enabled; httpd running as context user_u:system_r:httpd_t:s0 [Thu Sep 15 01:50:37 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Thu Sep 15 01:50:37 2011] [notice] Digest: generating secret for digest authentication ... [Thu Sep 15 01:50:37 2011] [notice] Digest: done [Thu Sep 15 01:50:38 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
Web画面上に、コマンドの実行状況も表示されていました。中々いい感じです。
今回は簡単なケースを想定してジョブを作ってみましたが、
工夫すれば色々オペレーションの自動化が出来そうな予感。
ただ、今回の方式ですとセキュリティ面の考慮は課題が残りました。
(パスワード認証無しのsudoを使っていること)
また試してみようと思います。
今日はこんな所で。