3

Apache Mesos + Marathon + Zookeeper を使用して Rails アプリをデプロイしています。Rails アプリと他のコンテナーの間でデータを共有する必要があります。次のようにマラソンでそれを行うための参考文献を見つけました:

marathon/docs/native-docker.html

{
"id": "privileged-job",
"container": {
    "docker": {
        "image": "mesosphere/inky"
        "privileged": true,
        "parameters": [
            { "key": "hostname", "value": "a.corp.org" },
            { "key": "volumes-from", "value": "another-container" },
            { "key": "lxc-conf", "value": "..." }
        ]
    },
    "type": "DOCKER",
    "volumes": []
},
"args": ["hello"],
"cpus": 0.2,
"mem": 32.0,
"instances": 1
}

しかし、マラソンが「mesos-uuid」の形式で名前を割り当てるため、レールアプリコンテナーの名前を見つける方法が見つかりません。それを解決するためのアイデアはありますか?またはコンテナからのボリュームをマラソンと共有する別の方法はありますか?

4

5 に答える 5

3

答えは、それを探している他の人に役立つかもしれません。

キー値「 MESOS_TASK_ID 」を使用して、JSON で環境設定を使用docker inspectおよび検索します。

これで、マッチングCONTAINER_IDMESOS_TASK_IDペアができました。

お役に立てれば。

アップデート

自動化された方法でそれを判断するには、まず docker デーモンにリモートでアクセスできることを確認してください。注: これにより、セキュリティ上の問題が発生する可能性があります

すべての mesos スレーブで docker を編集/etc/default/dockerして追加し、再起動します。DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375"

次のコードを使用して、MESOS_SLAVE CONTAINER_ID MESOS_TASK_IDマッピングを取得します

#!/bin/bash
HOSTS=($(curl -s -X GET -H "Accept: text/plain" http://mesosmaster:8080/v2/tasks | tail -n1 | cut -f3-))
hosts=()
for i in "${HOSTS[@]}"
do
hosts+=($(echo $i | awk -F":" '{print $1}'))
done
host=($(printf "%s\n" "${hosts[@]}" | sort -u))
for host in "${host[@]}"
do
INSTANCES=($(docker -H $host:2375 ps -q))
for container_id in "${INSTANCES[@]}"
do
mesos_id=$(docker -H $host:2375 inspect $container_id | grep MESOS_TASK_ID | awk -F '[="]' '{print $3}')
printf "$host\t$container_id\t$mesos_id\n"
done
done

これがあなたを助けることを願っています。

于 2015-04-01T05:33:06.270 に答える
2

アプリに制約を追加して、それらを特定のホストに強制することができます。

単純なケースでは、アプリを特定のホストに強制するために次のようなことを行うことができます:

{
 "instances": 1,
 "constraints": [["hostname", "LIKE", "worker-1"]]
}

次のオプションは、属性を取り込みます。カスタムタグを使用して、既知の数のホスト (3 としましょう) にタグを付けることができます。

次に、アプリの定義は次のようになります。

{
 "instances": 3,
 "constraints": [
   ["hostname", "UNIQUE"],
   ["your-custom-tag", "GROUP_BY"]
 ]
}

これを両方のアプリのアプリ定義に追加すると、タグ付けした 3 つのスレーブすべてでそれぞれの 1 つのインスタンスが実行されます。

属性の設定に関する参照ドキュメントを参照してください。

于 2015-02-23T21:36:59.607 に答える