1

サービスを提供するのではなく、ジョブ/バッチ・ワークロードを提供する配備内のポッドに、コロケーションされた補助コンテナをどのように実装するのだろうか?Kubernetesは同じ場所にあるジョブコンテナを提供していますか?

私の質問の背景は、各インスタンスが開始後に構成を必要とするスケーラブルなサービスを展開したいということです。この構成は、HTTP POSTを介してローカルにコロケートされたサービスインスタンスに行われます。私はcolocationの機能から恩恵を受けるためにこれのための補助的なコンテナを実装しました。したがって、補助コンテナは、どのインスタンスを設定する必要があるかを常に知っています。

問題は、restartPolicyをPodレベルで定義する必要があるということです。サービスの再起動ポリシーalwaysと設定ジョブの別の再起動ポリシーonFailureを探しています。

k8sがそのようなワークロードのためにJobリソースを提供していることは知っています。しかし、これらの仕事をポッドに配置するオプションはありますか?

さらに、私は注釈によって定義されるかもしれないいわゆる初期コンテナを見つけました。しかし、これらの欠点は、k8によって、実際のP​​odがinitコンテナの実行後にのみ開始されることが保証されるという欠点があります。だから私の非常にシナリオでは、それは不適切と思われる。

答えて

0

私はあなたのサービスを実行する必要があると理解しています。

あなたの解決策は実行可能であり、restartPolicy: alwaysを設定すると、既に実行されていた設定コンテナをオフにすることができます。 emptyDirボリュームを作成して設定コンテナに接続し、その上にファイルを作成して設定が成功したことを確認し、プロセスからこのファイルを確認できます。初期化の後、ループでスリープ状態に入ります。欠点は、いくつかのリソースもそのコンテナに取り込まれることです。

また、同じコンテナに余分なプロセスを追加して、設定を行うこともできます(上記のファイルを2回設定するのを防ぐためのガードとして)。したがって、このような単純なシェルスクリプトを書いて、あなたのメイン処理の代わりにそれを実行します。

#!/bin/sh 

(
    [ -f /mnt/guard-vol/stamp ] && exit 0 
    /opt/my-config-process parameters && touch /mnt/guard-vol/stamp 
) & 

exec /opt/my-main-process "[email protected]" 

別の方法としては、ラベルconfigured=falseを使用してサービスのポッドのためkubernetesのAPIを照会する別のポッドを実装することができます。これを設定し、APIを使用してラベルを削除します。 configured=trueポッドを選択するようにサービスを変更する必要があります。

+0

あなたは大歓迎です。 –

+0

サイト上の新しいユーザーとして、http://meta.stackexchange.com/questions/686/accepting-answer-without-upvoting useful - 需要や何かではないかもしれません。 –

+0

私の質問に答えていただきありがとうございます。 これまでの回避策は、あなたの提案と似ています。 1回のジョブは、既に実行されていた場合は、cronとマークでローカルに実行されます。だから、より多くの鉱石はそれほど解決されません。 このような解決策の問題は、ユーザーの観点からはセマンティクスが変更されていることです。首尾よく終了しているかもしれないし、していないかもしれないワンショットコンテナは今や常に走っているサービスです。したがって、ユーザは 'kubectl get/describe pod ... 'をチェックするのではなく、状態を評価するために実装の詳細を知る必要があります。 –

関連する問題