notebook

都内でWEB系エンジニアやってます。

rundeckインストールメモ

仕事で使ってみようということで実際にインストールしてみたメモ

インストール

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
  • プロジェクト作成時のデフォルトの鍵に設定

f:id:swfz:20151106235125p:plain

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系になってマルチスレッド実行の対応がされたようです

f:id:swfz:20151106235608p:plain

同時並列実行が可能になりました

ansibleでいうところのserialみたいな感じですね

Timeout

タイムアウト時間を設定できる

Multiple Executions?

多重起動防止?

Schedule to run repeatedly?

Yesにすることでcronのように定期実行を行うことができる

通常のcrontabと若干仕様が違うので注意

下記参照

CronTrigger Tutorial

秒単位で実行できる!必要があるかどうかは置いといて結構いいのではないでしょうか

カーソル乗せると今どの項目なのかも出てくるので親切ですね

f:id:swfz:20151106235150p:plain

今までデーモンで実行していたものとかもこっちに移行してしまってもいいかもしれません

  • Enable Scheduling?

Noにしておくとスケジューリングでの実行が出来ない

  • Enable Execution?

Noにしておくとジョブ単体での実行も出来ない

これも2.5の時は無かったような。。。

これはありがたい!

監視用のjobを毎分実行してるけどメンテのときのみ停止したいとかそういう場合に使えますね

Notification

jobが成功した、スタートした、失敗したそれぞれのタイミングで通知を送ることが出来ます

デフォルトだとwebhook,mailの二種類

f:id:swfz:20151106235202p:plain

設定完了

最低限必要そうな設定は以上

定期実行なら実行されるのを待つだけ、手動で実行ならRunボタンを押下するだけ

コマンドの実行

f:id:swfz:20151106235213p:plain

定型処理としては使わないけど、各ノードに対して同じコマンドを実行したい時とかに使えます

ここで実行した結果はジョブと同様履歴として残ります

また、ここからジョブを登録することも出来ます

感想

ある程度しか触ってませんがcronでの運用に比べてメリットは結構あると感じました

  • 各サーバでのjobが一元管理できる

    • いちいち各サーバにログインして確認しなくていい
  • job毎に通知を制御することが出来る

    • 意味の無いメールがこなくなる(warningsなど)
    • 本当に重要な通知に気づける
  • 実行結果が閲覧できる

    • cronだと。。。

ansibleとかシェルでやっていたような事をWebUIで実行できるのと、実行毎にログが残せて保存ができるので、可視化にもつながる。。?

EC2のプラグイン、通知、ユーザー管理についてはまた後日まとめます

プロダクションで導入するには運用方法、監視、バックアップについても考える必要がありますね

特にjobの一覧をどうやって管理していくかは悩むところではあります。出来ればテキストで管理したい。。。w