2016-04-09 11 views
0

同じレプリケーションコントローラまたは同じレプリカセットによって制御されるポッドのセットから、指定された正確に選択されたポッドを削除したいとします。
ユースケースは次のとおりです。セット内の各ポッドは、ステートフルな(しかし、メモリ内の)アプリケーションを実行します。私は、ポッドを優雅なやり方で取り除きたい、つまり、取り除く前に、ポッドによって処理されている進行中のアプリケーションセッションがないことを確認したいと思います。アプリケーションレベルでポッドを空にするという課題を解決できるとしましょう。つまり、選択したポッドに新しいセッションが割り当てられていないため、ポッド内の進行中のセッション数を測定できるため、ポッドをいつ削除するかを決定できます。難しい部分は、このポッドを取り除くことです。RCまたはRSは、「複製物」の価値に基づいてポッドを新しいポッドに置き換えません。
解決策が見つかりませんでした。最も近いものは、http://kubernetes.io/docs/user-guide/replication-controller/#isolating-pods-from-a-replication-controller で示唆されているように、RCまたはRSからポッドを分離することです。RCまたはRSは、同じドキュメントに従って、隔離されたポッドを新しいものに置き換えます。そして、わかっているように、ポッドを分離して、「レプリカ」の価値を原子的に減らす方法はありません。
今後のPetSetのサポートを確認しましたが、私のアプリケーションでは不要です。永続ストレージ、または永続的なポッドID。このような機能は私の場合は必要ではないので、私のアプリケーションは本当にこのような観点からはペットではありません。
APIを使用してパッチを当てることができる新しいポッド状態(「削除対象」 - 状態名は重要ではない)が作成され、「レプリカ」の値がRCまたはRSであるとみなされる可能性があります"減少していますか?明示的に選択されたポッドの正常なシャットダウン

答えて

1

次の3つのステップでこれを達成することができます:

  1. 削除する以外のすべてのポッドにラベルを追加します。ポッドのラベルはレプリカセットのセレクタを満たしているため、新しいポッドは作成されません。

  2. セレクタに新しいラベルを追加し、レプリカセットのレプリカをアトミックに減らします。削除したいポッドは、新しいラベルを持たないため、レプリカセットでは選択されません。

  3. 選択したポッドを削除します。

+0

ありがとうございます!そして私はそれを反復可能にするために、余分なラベルをRSから4番目のステップとして削除し、次に5番目のステップとしてすべてのポッドから削除する必要があります。私は、この手順の原子的性質の欠如について少し心配していますが、実際には、日当たりの良いケースではうまくいくでしょう。ありがとうございました! – janosi

+0

はい、4番目と5番目のステップは意味があります:) – caesarxuchao

関連する問題