2017-05-11 9 views
1

ドッカーのオーケストレーションでは、現在、ジョブ実行をスケジュールするために、mesosとchronosを使用しています。DC OSでドッキング・イメージを強制的にプルする方法は?

ここで、クロノスを落として、メゾスとメトロノームを使ってDCOでセットアップしようとしました。クロノスで

、私はYMLコンフィグその経由でドッキングウィンドウの画像を引く力を活性化させることができます:

container: 
    type: docker 
    image: registry.example.com:5001/the-app:production 
    forcePullImage: true 

さて、メトロノームとmesosを使用してDC/OSで、私も欲しい、それは常にアップを引っ張って、それを強制しますキャッシュされたバージョンに頼るのではなく、レジストリから最新のイメージを取得します。

しかし、ドッキングウィンドウのためのJSON configが限られそうです:

"docker": { 
    "image": "registry.example.com:5001/the-app:production" 
}, 

私はproductionタグに新しいイメージをプッシュする場合は、古いイメージがmesos上で実行するジョブに使用されます。ちょうどそれのために、私はフラグを追加しようとした

を:

"docker": { 
    "image": "registry.example.com:5001/my-app:staging", 
    "forcePullImage": true 
}, 

をまだプット要求に、私はエラーを取得する:

http PUT example.com/service/metronome/v1/jobs/the-app < app-config.json 

HTTP/1.1 422 Unprocessable Entity 
Connection: keep-alive 
Content-Length: 147 
Content-Type: application/json 
Date: Fri, 12 May 2017 09:57:55 GMT 
Server: openresty/1.9.15.1 

{ 
    "details": [ 
     { 
      "errors": [ 
       "Additional properties are not allowed but found 'forcePullImage'." 
      ], 
      "path": "/run/docker" 
     } 
    ], 
    "message": "Object is not valid" 
} 

私はDC OSということを達成するにはどうすればよいです常に最新の画像を取得しますか?または、私は常にユニークなイメージタグを介してジョブ定義を更新する必要がありますか?

+0

[DCOS問題トラッカーに関する問題](https://jira.mesosphere.com/browse/MARATHON-7346)を開設しました。 – k0pernikus

答えて

-2

"forcePullImage": truedocker辞書で動作するはずです。

チェック: "力プルオプション" で https://mesosphere.github.io/marathon/docs/native-docker.html

ルック。

+0

メトロノーム上でジョブを更新しようとすると、 '422 Unprocessable Entity'を取得します。更新された質問をご覧ください。 – k0pernikus

+0

マラソンでは動作しますが、マトロノームでは動作しません –

0

これは現在できませんので、私はfeature requestを作成しました。一方


、私はtypescriptですと、要求-約束ライブラリを使用して、すべての登録されたジョブのための画像タグを更新できるようにする回避策を作成しました。

metronome apiからすべてのジョブをフェッチし、私のアプリケーション名からidでフィルタリングしてからドッカー画像を変更し、変更されたジョブごとにメトロノームAPIにPUTリクエストを発行して設定を更新します。

は、ここに私のソリューションです:

const targetTag = 'stage-build-1501'; // currently hardcoded, should be set via jenkins run 
const app = 'my-app'; 
const dockerImage = `registry.example.com:5001/${app}:${targetTag}`; 

interface JobConfig { 
    id: string; 
    description: string; 
    labels: object; 
    run: { 
     cpus: number, 
     mem: number, 
     disk: number, 
     cmd: string, 
     env: any, 
     placement: any, 
     artifacts: any[]; 
     maxLaunchDelay: 3600; 
     docker: { image: string }; 
     volumes: any[]; 
     restart: any; 
    }; 
} 

const rp = require('request-promise'); 

const BASE_URL = 'http://example.com'; 
const METRONOME_URL = '/service/metronome/v1/jobs'; 
const JOBS_URL = BASE_URL + METRONOME_URL; 

const jobsOptions = { 
    uri: JOBS_URL, 
    headers: { 
     'User-Agent': 'Request-Promise', 
    }, 
    json: true, 
}; 

const createJobUpdateOptions = (jobConfig: JobConfig) => { 
    return { 
     method: 'PUT', 
     body: jobConfig, 
     uri: `${JOBS_URL}/${jobConfig.id}`, 
     headers: { 
      'User-Agent': 'Request-Promise', 
     }, 
     json: true, 
    }; 
}; 

rp(jobsOptions).then((jobs: JobConfig[]) => { 
    const filteredJobs = jobs.filter((job: any) => { 
     return job.id.includes('job-prefix.'); // I don't want to change the image of all jobs, only for the same application 
    }); 

    filteredJobs.map((job: JobConfig) => { 
     job.run.docker.image = dockerImage; 
    }); 

    filteredJobs.map((updateJob: JobConfig) => { 
     console.log(`${updateJob.id} to be updated!`); 
     const requestOption = createJobUpdateOptions(updateJob); 
     rp(requestOption).then((response: any) => { 
      console.log(`Updated schedule for ${updateJob.id}`); 
     }); 
    }); 

}); 
3

メトロノームAPIはまだこれをサポートしていない、私は私のイメージレポが認証された同様の問題があったと私は必要な認証を提供することができなかったhttps://github.com/dcos/metronome/blob/master/api/src/main/resources/public/api/v1/schema/jobspec.schema.json

+0

仕様がdocker.forcePullImageをサポートしているようです –

+0

はい、しかしそれはDC/OSリリースではまだありません – Tobi

+0

あなたは正しいです。私は5分後にそれを発見した:)おそらくDC/OS 1.11.0で出てくるだろう –

0

を見ますメトロノームの構文を使用して情報。画像を直接参照するのではなく、2つのコマンドを指定することでこれを回避しました。

docker --config /etc/.docker pull 
docker --config /etc/.docker run 
関連する問題