仕事で使ってみようということで実際にインストールしてみたメモ
インストール
java
yum install java
rundeck
rpm -ivh http://repo.rundeck.org/latest.rpm yum install rundeck
設定の変更
- /etc/rundeck/rundeck-config.properties
#grails.serverURL=http://localhost:4440 grails.serverURL=http://example.com/rundeck
ホームのURLを記入します
リバプロ環境
/rundeck
でrundeckへアクセスできるようにします
- /etc/rundeck/framework.properties
framework.server.name = example.com framework.server.hostname = example.com framework.server.url = http://example.com
- /etc/rundeck/profile
export RDECK_JVM="-Djava.security.auth.login.config=/etc/rundeck/jaas-loginmodule.conf \ ..... + -Dserver.web.context=/rundeck \ ..... -Djava.io.tmpdir=$RUNDECK_TEMPDIR"
- nginx.conf
server { listen 80 default_server; location /rundeck { proxy_pass http://10.0.121.13:4440/; rewrite ^/rundeck/(.*) /rundeck/$1 break; rewrite ^/rundeck /rundeck/ break; proxy_set_header Host $host/rundeck; proxy_set_header X-Forwarded-Host $host; proxy_redirect http://$host:4440/ /rundeck; proxy_redirect https://$host:4440/ https://$host/rundeck; } }
この設定だととりあえず動くけどログイン直後にリダイレクトループが発生してしまう。。。
MySQLの使用
データベース、ユーザーの作成
create database rundeckdb; grant ALL on rundeckdb.* to ‘rundeckuser’@‘localhost’ identified by ‘rundeckpassword’
設定変更
- /etc/rundeck/rundeck-config.properties
localhostの箇所はmysqlのサーバホスト名、今回は同一サーバにMySQLをインストールして使用するためlocalhost
rundeck.v14.rdbsupport=true dataSource.url = jdbc:mysql//localhost/rundeckdb?autoReconnect=true dataSource.username = rundeckuser dataSource.password = rundeckpassword dataSource.driverClassName=com.mysql.jdbc.Driver rundeck.projectsStorageType = db rundeck.config.storage.converter.1.type = jasypt-encryption rundeck.config.storage.converter.1.path = projects rundeck.config.storage.converter.1.config.password = mysecret rundeck.storage.provider.1.type = db rundeck.storage.provider.1.path = keys rundeck.storage.converter.1.type = jasypt-encryption rundeck.storage.converter.1.path = keys rundeck.storage.converter.1.config.password = mysecret
jdbcDriverのインストール
オラクルのjdbcdriverを取得してきてrundeckのwebサーバから参照できる場所に配置します
curl -L -H 'Cookie:oraclelicense=accept-classes-cookie' -o /var/lib/rundeck/exp/webapp/WEB-INF/lib/ojdbc14.jar http://download.oracle.com/otn/utilities_drivers/jdbc/10205/ojdbc14.jar
設定
鍵の設定(rundeck)
既にデプロイ用ユーザーを作成済みであることが前提
- 鍵認証
デプロイ用ユーザーの秘密鍵をrundeckの鍵として設定
cp /home/appuser/.ssh/id_rsa /var/lib/rundeck/.ssh/appuser_id_rsa chown rundeck:rundeck /var/lib/rundeck/.ssh/appuser_id_rsa
- プロジェクト作成時のデフォルトの鍵に設定
sudoの設定(各node)
デプロイユーザーのみ端末以外からのsudoを許可する設定を追加
su - visudo
- 下記行を追加
Defaults:appuser !requiretty
この設定を入れないと端末からのsudoでは無いので怒られる
: sorry, you must have a tty to run sudo
プロジェクトの登録
ここからは管理画面での設定をしていきます
リソースモデルの設定
プロジェクトで使うホストの設定します
/var/rundeck/projects/test2/etc/resources.xml
xml,json,ymlの三つから選ぶ事が出来る(デフォルトはxml)
リソースモデル
サーバのメタデータが紐付けられているノードの事
フォーマットは色々あるので好きな形式を使うといいともいます
ファイルで管理する方法に関してはjson,xml,ymlに対応してます
最初は手動で入力する必要がある感じですね
AWSならプラグインを使うことで自動的にリソースモデルを取得してくれるので使わない手は無いでしょう
それ以外の場合はサービスで管理しているサーバ一覧ファイルを用いて自動で成形するようにしたいところですね
ジョブの登録
Workflow
スクリプトをアップロードしたり、他のジョブを指定したり、直接コマンドを打ったりといった定義をする
基本はコマンド入力だけでも十分そう
また、ステップ単位でコマンドなりスクリプトなりジョブなりをつなげることが出来る
失敗したらそこで終了するようチェックしておくこともできる
Nodes
対象のノードを指定する
大抵は「Dispatch to nodes」でしょう
対象ノードはフィルターを掛けたり、タグで対象を絞ったりすることができるのでリソースモデルの定義の仕方次第
リソースモデルの作成時にいい感じにタグづけしてあげてると幸せになれそう
- Thread Count
2.6系になってマルチスレッド実行の対応がされたようです
同時並列実行が可能になりました
ansibleでいうところのserialみたいな感じですね
Timeout
タイムアウト時間を設定できる
Multiple Executions?
多重起動防止?
Schedule to run repeatedly?
Yesにすることでcronのように定期実行を行うことができる
通常のcrontabと若干仕様が違うので注意
下記参照
秒単位で実行できる!必要があるかどうかは置いといて結構いいのではないでしょうか
カーソル乗せると今どの項目なのかも出てくるので親切ですね
今までデーモンで実行していたものとかもこっちに移行してしまってもいいかもしれません
- Enable Scheduling?
Noにしておくとスケジューリングでの実行が出来ない
- Enable Execution?
Noにしておくとジョブ単体での実行も出来ない
これも2.5の時は無かったような。。。
これはありがたい!
監視用のjobを毎分実行してるけどメンテのときのみ停止したいとかそういう場合に使えますね
Notification
jobが成功した、スタートした、失敗したそれぞれのタイミングで通知を送ることが出来ます
デフォルトだとwebhook,mailの二種類
設定完了
最低限必要そうな設定は以上
定期実行なら実行されるのを待つだけ、手動で実行ならRunボタンを押下するだけ
コマンドの実行
定型処理としては使わないけど、各ノードに対して同じコマンドを実行したい時とかに使えます
ここで実行した結果はジョブと同様履歴として残ります
また、ここからジョブを登録することも出来ます
感想
ある程度しか触ってませんがcronでの運用に比べてメリットは結構あると感じました
各サーバでのjobが一元管理できる
- いちいち各サーバにログインして確認しなくていい
job毎に通知を制御することが出来る
- 意味の無いメールがこなくなる(warningsなど)
- 本当に重要な通知に気づける
実行結果が閲覧できる
- cronだと。。。
ansibleとかシェルでやっていたような事をWebUIで実行できるのと、実行毎にログが残せて保存ができるので、可視化にもつながる。。?
EC2のプラグイン、通知、ユーザー管理についてはまた後日まとめます
プロダクションで導入するには運用方法、監視、バックアップについても考える必要がありますね
特にjobの一覧をどうやって管理していくかは悩むところではあります。出来ればテキストで管理したい。。。w