おぼえがき

おぼえがき

Rundeckを弄る。リモートサーバーの制御/バックアップ/jobの登録など

2015-10-17 | soft




サーバーがたくさんあって、各サーバーにcronがあって、
管理が面倒だなぁと思っていたので、rundeckを検討してみる


■やりたいこと
--------------------------------------

localからremotehostの処理を実行する。
psshの代替になるか?
サービス運営を考えた上の事も考える必要があるから
バックアップも考えないとね。


■現在の環境
--------------------------------------
local(ubuntu)->remotehost(sakura VPS)


■インストール
--------------------------------------
apt-get install openjdk-7-jdk

http://rundeck.org/downloads.html
から、DLしてきてインストール
dpkg -i rundeck-2.6.0-1-GA.deb

おそい。30分位かかる

■ブラウザアクセス
--------------------------------------
sudo /etc/init.d/rundeckd start
http://localhost:4440

デーモンスタートして、この画面みられるまで1分位かかるね。
自分のPCが遅いんかいな

■rundeck全体の設定
--------------------------------------
/etc/rundeck配下にある


■プロジェクトの作成
--------------------------------------
プロジェクト作ると
/var/rundeck/projects/${project.name}
が作られて、ディレクトリ構造は下記の通り

.
├── acls
└── etc
├── ここに、readme.mdファイルを置くと、トップページにプロジェクトの説明が出るから採用しよう
├── project.properties
└── resources.xml<= ここに、サーバーの設定を追加するみたい




■実行ユーザーってだれ?
--------------------------------------
idを表示するjobを登録して実行してみたら、
uid=125(rundeck) gid=139(rundeck) groups=139(rundeck)

rundeckユーザーってやつで実行しているんだね

■node(サーバー)の追加(resources.xmlにサーバーを追加)
--------------------------------------
/var/rundeck/projects/XXXXX/etc
<node name="sakura" description="sakura server node" tags="sakura-www" hostname="hoge.vs.sakura.ne.jp" username="AAAA"/>

■リモートサーバーを制御する前に鍵を作る
--------------------------------------
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): id_rsa(ファイル名をid_rsaにする)
Enter passphrase (empty for no passphrase):「パスフレーズなし」
Enter same passphrase again: 「パスフレーズなし」

これで、鍵の作成はOK。
id_rsaとid_rsa.pubができているはずなので、
/var/lib/rundeck/.ssh/配下に2つのファイルを移動する
※パーミッションは変えてあげないとね

.ssh/
合計 16
-rw------- 1 rundeck rundeck 401 10月 17 12:05 id_rsa.pub
-rw------- 1 rundeck rundeck 1675 10月 17 12:05 id_rsa


■対象サーバー(リモートサーバーに公開鍵を置く)
--------------------------------------
先ほど作成したid_rsa.pubをリモートサーバーの.ssh/authorized_keysにおく

rundeckユーザーはリモートサーバーにいないし、rundeckユーザーを作るつもりもない。
対象サーバーには、AAAAユーザーが存在していて、そのユーザーが作成したスクリプトを実行したいわけだから、
対象サーバーのAAAAユーザーの、.ssh/authorized_keysにid_rsa.pubを追加する

というわけで、

localhost(rundeckユーザー)--->sshで対象サーバーに入れるようになって、コマンドを実行できるようになった。

■resource.xmlの確認
--------------------------------------
sshで入るリモートホストのユーザー名が、resource.xmlのusernameと同じになっているか確認すること


■psshの代替になれるか確認
--------------------------------------
# dispatch -p sample-remote2 -F "tags:sakura-www" -- ls
上記コマンドを実行してみると、下記URLに実行結果が載っている。やばいなこれ、便利すぎる・・・
Succeeded queueing adhoc
Queued Execution ID: 22 <http://localhost:4440/execution/show/22>

# dispatch -p sample-remote2 -F "tags:sakura-www" -f -- ls
上記コマンドを実行すると、画面上に実行結果が入ってくる

■sudoできるの??
--------------------------------------
# dispatch -p sample-remote2 -F "tags:sakura-www" -f -- "sudo ls"
sorry, you must have a tty to run sudo
だってさ、
リモートホストの、/etc/sudoersの
Defaults requiretty
をコメントにする

再度実行したらできた

■rundeckデーモンが落ちたらどうなるの??(キューイングされる前編)
--------------------------------------
rundeckは、jobとして、キューイングされて実行されるみたい。
まずは、キューイングされる前に落としてみる

サービス運営上デーモンが落ちる可能性があるので、シミュレーションしてみる
リモートのサーバーにシェルを用意
cat s.sh
#!/bin/bash

sleep 120
echo "success!"

じゃあ検証
sudo dispatch -p sample-remote2 -F "name:sakura" -f -- "./s.sh"
を実行して、もうひとつのターミナルで、
sudo /etc/init.d/rundeckd stop

sudo dispatch -p sample-remote2 -F "name:sakura" -f -- "./s.sh"
error: Error making server request to http://localhost:4440: 接続を拒否されました
ってでた。

sudo /etc/init.d/rundeckd startしてみる。そもそも、キューに登録されていない


■rundeckデーモンが落ちたらどうなるの??(キューイングされた後編)
--------------------------------------
今度は、jobとして、キューイングされたあとに同じことやってみる
sudo dispatch -p sample-remote2 -F "name:sakura" -f -- "./s.sh"
Succeeded queueing adhoc
Queued Execution ID: 33 <http://localhost:4440/execution/show/33>
error: Error making server request to http://localhost:4440: 接続を拒否されました

33番どうなったかな・・・
killedになってる。なるほどー、rundeck落ちたら、ダメなんだ。んーーー考えもんだ


■rundeckデーモンが落ちたらどうなるの??(jobとして登録してみる編)
--------------------------------------
今度は、jobとして、キューイングされたあとに同じことやってみる
今までは、dispatchコマンドでやってみていたけど、今度は、jobとして、rundeckに登録して
スケジュールを組んでやってみる
さてさて・・・
だめだ、killedになって なる。そうかぁ・・・そりゃそうか。

結局、このrundeckサーバーが落ちるといろいろやばいというのがわかった
バックアップは課題だな


■job登録のオプションを調べてみる
--------------------------------------
なんか、いろいろできるんだね

optionname:message
allowed values:listを選択してopt1,opt2,opt3
とかにして、
ワークフローに
./test.sh ${option.message}
とかやると、オプションが渡せる。
選択式だから事故が少ない

■jobの登録とエラーハンドリング
--------------------------------------
phpがこけてもちゃんとstatas failになってくれるね
エラーをキャッチして、何かコマンドを実行するような想定で作ってみよう
Stop at the failed step.
Node-oriented
execute repomote command に、hoge.phpを入力(このphpはこける)
error handler に、エラーが発生したら作動スクリプトを書く。

これで、エラーを検知してログ出力とか、なんかできるね
※エラー発生時のメール配信は、Send Notificationを使えばできる

オプション使い回ししたいなー。できなそうだ


■ユーザー登録
--------------------------------------
このツールたくさん使う人がいることが想定されるので、
だれが設定したかを認識するために、ユーザーを追加する必要がある

#java -cp /var/lib/rundeck/bootstrap/jetty-all-7.6.0.v20120127.jar org.eclipse.jetty.util.security.Password ユーザー名 パスワード
OBF:xxxx
MD5:xxxxxxx
CRYPT:xxxxx
って出てきたから、
vi /etc/rundeck/realm.propertiesで

ユーザー名:MD5:XXXX,user,admin
で入れる

なんか、ユーザーをグルーピングしたら、アクセスコントロールとか設定が
できるみたい。
http://rundeck.org/docs/man5/aclpolicy.html
に書いてあるけど、ちょっと面倒になったのでスキップ。

adminユーザーがフルコントロールなのは、
/etc/rundeck/admin.aclpolicy
に定義があるため

とりあえず、誰が実行したかがわかるからこれでいいや

■バックアップと復元
--------------------------------------
サーバー飛ぶかもしれないし、別サーバーにすぐ同じ環境を再現しなくてはならない
なので、設定一式をどこかに格納する方法を確認しておく

右上のネジボタンのところから、
Setup SCM Plugin: Git Exportのところで、リモートリポジトリを指定してみる。
リポジトリをこれにする:
 https://github.com/XXXXXXX/test.git

これでgitの環境下に設定が入るけど、ただし、jobだけ。
nodesの情報は入ってこない。
resource.xmlも対象にしたほうがいいよなぁ
jobを追加すると、自動で、
/var/rundeck/projects/${プロジェクト名}/scm
配下に置かれる

これを、rundeckのjobで定期的に、push origin masterでセットしておけば、githubのリモートリポジトリに格納される。

復元もここからやれば良いのか。なるほどね。これで行けそうな気がする

最新の画像もっと見る

コメントを投稿