web-dev-qa-db-ja.com

Kubernetes Jobsのサイドカーコンテナーですか?

ここでは、大量のバッチコンピューティングにKubernetes Jobsを使用しています。監視のサイドカーを使用して各ジョブを計測し、ジョブの進行状況で集中型追跡システムを更新します。

唯一の問題は、ジョブ内の複数のコンテナーのセマンティクスが何であるか(または想定されているか)を理解できないことです。

私はとにかく(Alpineサイドカーを1秒ごとに "hello"と出力して)ショットを与え、メインタスクが完了した後、JobsはSuccessfulと見なされ、kubectl get pods Kubernetes 1.2.0の場合:

NAME                                         READY     STATUS      RESTARTS   AGE
    job-69541b2b2c0189ba82529830fe6064bd-ddt2b   1/2       Completed   0          4m
    job-c53e78aee371403fe5d479ef69485a3d-4qtli   1/2       Completed   0          4m
    job-df9a48b2fc89c75d50b298a43ca2c8d3-9r0te   1/2       Completed   0          4m
    job-e98fb7df5e78fc3ccd5add85f8825471-eghtw   1/2       Completed   0          4m

そして、それらのポッドの1つを説明すると

State:              Terminated
  Reason:           Completed
  Exit Code:        0
  Started:          Thu, 24 Mar 2016 11:59:19 -0700
  Finished:         Thu, 24 Mar 2016 11:59:21 -0700

次に、ジョブのyamlをGETingすると、コンテナごとの情報が表示されます。

  status:
    conditions:
    - lastProbeTime: null
      lastTransitionTime: 2016-03-24T18:59:29Z
      message: 'containers with unready status: [pod-template]'
      reason: ContainersNotReady
      status: "False"
      type: Ready
    containerStatuses:
    - containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937
      image: luigi-reduce:0.2
      imageID: docker://sha256:5a5e15390ef8e89a450dac7f85a9821fb86a33b1b7daeab9f116be252424db70
      lastState: {}
      name: pod-template
      ready: false
      restartCount: 0
      state:
        terminated:
          containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937
          exitCode: 0
          finishedAt: 2016-03-24T18:59:30Z
          reason: Completed
          startedAt: 2016-03-24T18:59:29Z
    - containerID: docker://3d2b51436e435e0b887af92c420d175fafbeb8441753e378eb77d009a38b7e1e
      image: Alpine
      imageID: docker://sha256:70c557e50ed630deed07cbb0dc4d28aa0f2a485cf7af124cc48f06bce83f784b
      lastState: {}
      name: sidecar
      ready: true
      restartCount: 0
      state:
        running:
          startedAt: 2016-03-24T18:59:31Z
    hostIP: 10.2.113.74
    phase: Running

だから私のサイドカーはメインプロセスを監視する必要があるようです(どのように?)。これが正しい場合、ベストプラクティス/パターンはありますか(サイドカーはメインコンテナーの戻りコードで終了する必要がありますか?しかし、それをどのように取得しますか?)?

**更新**さらに実験を重ねた結果、次のことも発見しました。ポッドに2つのコンテナがある場合、ポッド内のすべてのコンテナが終了コード0で戻るまで、成功とは見なされません。

さらに、restartPolicy: OnFailureがポッド仕様に設定されている場合、ゼロ以外の終了コードで終了するポッド内のコンテナーは、同じポッドで再起動されます(これは、監視サイドカーが再試行回数をカウントし、ジョブを削除した後に役立つ場合があります)特定の数(Kubernetesジョブで現在利用可能な最大再試行回数を回避するため))。

25
JKnight

downward api を使用してサイドカー内から独自のポッド名を把握し、apiserverから独自のポッドを取得して、存在ステータスを検索できます。これがどうなるか教えてください。

5
Prashanth B