[jenkinsci-ja:574] 自律的に生成・消滅していく Slave 群を作成するにあたって

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[jenkinsci-ja:574] 自律的に生成・消滅していく Slave 群を作成するにあたって

Akira Sosa
はじめまして。今回、初めて投稿させていただきます。Akira Sosa と申します。

掲題の件について幾つか質問があり、アドバイスをいただければと思い投稿いたしました。今回実現したいと考えているのは、主に下記の数ステップから成る仕組みづくりです。
  1. job を生成する際に、その job を処理可能かつ Idling になっている Slave が存在するかチェックする
  2. もし、そのような Slave が存在しなければ、Snapshot などから Slave の Instance を必要な数だけ生成する
  3. 生成されたインスタンスは chef 等で自動的に Slave として provisioning され、1 で生成された job queue を処理する
  4. provisioning 時に、起動から 50min, 1h50min, 2h50min ... に起動する cron を登録する. この cron では、Slave が job をひとつも処理していなければ、自身の Instance を破棄するための API を call する
  5. cron により、不要になった Instance は新たな毎時の課金が発生する前に破棄される
要するに、job queue が積まれないように、必要な Slave を on demand で作成し、スループットをあげようとしています。また、コストを最小化するため、不必要に Slave を立ち上げること無く、かつ用の済んだ Slave は適切なタイミングで破棄したと考えています。

ここで、2点技術的な質問があります.

a) 1 における、 job を処理可能かつ Idling になっている Slave の存在確認
「job を処理可能」とは「指定した label にマッチする Slave がある」とほぼ同義です。そのようにして見つけた Slave が、すぐに job を処理してくれるのかどうかを確認しようとしています。これはどのようにしたら実現できるのでしょうか?

b) 4 における、Slave が job を処理中か否かの確認
Slave 自身が、今 何らかの job を処理しているかどうかは、どのようにして確認できるのでしょうか? この確認をせずに Instance を破棄してしまうとまずいと考えています。

自身でも調べてみたのですが、なかなかそれといった方法が見つからず難儀しています.

以上、どうかよろしくお願い致します。

--
このメールは Google グループのグループ「日本Jenkinsユーザー会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、[hidden email] にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
Reply | Threaded
Open this post in threaded view
|

Re: [jenkinsci-ja:574] 自律的に生成・消滅していく Slave 群を作成するにあたって

Seiji Sogabe
曽我部です。

どういう手段を使おうと考えているのでしょうか。Java?  REST API?

REST APIなら、http://your.host/jenkins/computer/slave/api/xml?depth=1
で取得できる下記のようなXMLの
各<executor>の<idle>をみれば、該当スレーブのエグゼキュータを使用しているかどうかわかります。

<slaveComputer>
    <displayName>slave</displayName>
    <executor>
        <idle>true</idle>
        <likelyStuck>false</likelyStuck>
        <number>0</number>
        <progress>-1</progress>
</executor>

2013年9月15日 18:55 Akira Sosa <[hidden email]>:

> はじめまして。今回、初めて投稿させていただきます。Akira Sosa と申します。
>
> 掲題の件について幾つか質問があり、アドバイスをいただければと思い投稿いたしました。今回実現したいと考えているのは、主に下記の数ステップから成る仕組みづくりです。
>
> job を生成する際に、その job を処理可能かつ Idling になっている Slave が存在するかチェックする
> もし、そのような Slave が存在しなければ、Snapshot などから Slave の Instance を必要な数だけ生成する
> 生成されたインスタンスは chef 等で自動的に Slave として provisioning され、1 で生成された job queue を処理する
> provisioning 時に、起動から 50min, 1h50min, 2h50min ... に起動する cron を登録する. この cron
> では、Slave が job をひとつも処理していなければ、自身の Instance を破棄するための API を call する
> cron により、不要になった Instance は新たな毎時の課金が発生する前に破棄される
>
> 要するに、job queue が積まれないように、必要な Slave を on demand
> で作成し、スループットをあげようとしています。また、コストを最小化するため、不必要に Slave を立ち上げること無く、かつ用の済んだ Slave
> は適切なタイミングで破棄したと考えています。
>
> ここで、2点技術的な質問があります.
>
> a) 1 における、 job を処理可能かつ Idling になっている Slave の存在確認
> 「job を処理可能」とは「指定した label にマッチする Slave がある」とほぼ同義です。そのようにして見つけた Slave が、すぐに
> job を処理してくれるのかどうかを確認しようとしています。これはどのようにしたら実現できるのでしょうか?
>
> b) 4 における、Slave が job を処理中か否かの確認
> Slave 自身が、今 何らかの job を処理しているかどうかは、どのようにして確認できるのでしょうか? この確認をせずに Instance
> を破棄してしまうとまずいと考えています。
>
> 自身でも調べてみたのですが、なかなかそれといった方法が見つからず難儀しています.
>
> 以上、どうかよろしくお願い致します。
>
> --
> このメールは Google グループのグループ「日本Jenkinsユーザー会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、[hidden email]
> にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
s.sogabe at gmail.com

--
このメールは Google グループのグループ「日本Jenkinsユーザー会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、[hidden email] にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
Reply | Threaded
Open this post in threaded view
|

Re: [jenkinsci-ja:576] 自律的に生成・消滅していく Slave 群を作成するにあたって

Akira Sosa
Akira Sosa です。

ありがとうございます。b) については REST API を使ってご指摘いただいた方法でできそうです。

a) は、REST API では label を使って Slave を見つける方法、または個別の Slave の label を取得する方法が、まだ見つけられていません。ただ、getAssignedLabels() を使えば少なくとも実現できるだろうことが分かりました。

以上です。

2013年9月15日日曜日 21時37分20秒 UTC+7 sogabe:
曽我部です。

どういう手段を使おうと考えているのでしょうか。Java?  REST API?

REST APIなら、http://your.host/jenkins/computer/slave/api/xml?depth=1
で取得できる下記のようなXMLの
各<executor>の<idle>をみれば、該当スレーブのエグゼキュータを使用しているかどうかわかります

<slaveComputer>
    <displayName>slave</displayName>
    <executor>
        <idle>true</idle>
        <likelyStuck>false</likelyStuck>
        <number>0</number>
        <progress>-1</progress>
</executor>

2013年9月15日 18:55 Akira Sosa <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="WQ5dkMTIcaEJ">akir...@...>:

> はじめまして。今回、初めて投稿させていただきます。Akira Sosa と申します。
>
> 掲題の件について幾つか質問があり、アドバイスをいただければと思い投稿いたしました。今回実現したいと考えているのは、主に下記の数ステップから成る仕組みづくりです。
>
> job を生成する際に、その job を処理可能かつ Idling になっている Slave が存在するかチェックする
> もし、そのような Slave が存在しなければ、Snapshot などから Slave の Instance を必要な数だけ生成する
> 生成されたインスタンスは chef 等で自動的に Slave として provisioning され、1 で生成された job queue を処理する
> provisioning 時に、起動から 50min, 1h50min, 2h50min ... に起動する cron を登録する. この cron
> では、Slave が job をひとつも処理していなければ、自身の Instance を破棄するための API を call する
> cron により、不要になった Instance は新たな毎時の課金が発生する前に破棄される
>
> 要するに、job queue が積まれないように、必要な Slave を on demand
> で作成し、スループットをあげようとしています。また、コストを最小化するため、不必要に Slave を立ち上げること無く、かつ用の済んだ Slave
> は適切なタイミングで破棄したと考えています。
>
> ここで、2点技術的な質問があります.
>
> a) 1 における、 job を処理可能かつ Idling になっている Slave の存在確認
> 「job を処理可能」とは「指定した label にマッチする Slave がある」とほぼ同義です。そのようにして見つけた Slave が、すぐに
> job を処理してくれるのかどうかを確認しようとしています。これはどのようにしたら実現できるのでしょうか?
>
> b) 4 における、Slave が job を処理中か否かの確認
> Slave 自身が、今 何らかの job を処理しているかどうかは、どのようにして確認できるのでしょうか? この確認をせずに Instance
> を破棄してしまうとまずいと考えています。
>
> 自身でも調べてみたのですが、なかなかそれといった方法が見つからず難儀しています.
>
> 以上、どうかよろしくお願い致します。
>
> --
> このメールは Google グループのグループ「日本Jenkinsユーザー会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、<a href="javascript:" target="_blank" gdf-obfuscated-mailto="WQ5dkMTIcaEJ">jenkinsci-ja+unsubscribe@googlegroups.com
> にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
s.sogabe at gmail.com

--
このメールは Google グループのグループ「日本Jenkinsユーザー会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、[hidden email] にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。