オリジナル: http://yunke.science/2018/04/15/k8s-hook/
コンテナのライフサイクルフック
Kubernetesは、コンテナのライフサイクルフックを提供します。
フックコンテナは、そのライフサイクルのイベントを認識し、対応するライフサイクルフックが呼び出されたときに指定されたコードを実行することができます。
2つのカテゴリに分類フックコンテナがポイントをトリガ:コンテナとコンテナが作成PostStart PRESTOP前に終了されます。
ポストスタート
フックはコンテナが作成された直後に実行されます。
しかし、フックはコンテナENTRYPOINT前に実行される保証はありません。
引数は、処理プログラムに渡されません。
ENTRYPOINTコンテナとフックが非同期操作を実行しています。
コンテナを実行したり、ハングアップすることはできませんが長すぎるの容器を取りフックが実行されている状態を達成しない場合
転送
コンテナが終了する前に、このフックはすぐに呼ばれています。
それは、それが同期されることを意味し、ブロックしているので、コンテナが削除される前にコールが発行して行われなければなりません
フックは実行時にハングする場合、ポッドフェーズは実行状態のままにして失敗した状態に達することはありません。
PostStartまたはPRESTOPフックが失敗した場合、容器が殺すされます。
ユーザーは、自分のフックハンドラはのような軽量にする必要があります。
フックハンドラを実装
コンテナフックはハンドラフックを実装し、登録することでアクセスすることができます。
コンテナの二つのタイプは、フックハンドラを達成することができます:
- Execの-コンテナとのcgroupの名前空間は、そのようなpre-stop.shで特定のコマンドを実行します。
リソースの消費は、コマンドの容器に含まれています。 - HTTP - 容器上の特定のエンドポイントのためのHTTP要求を行います。
いかなる場合においてもポッドフックハンドラをログに記録します。ハンドラが何らかの理由で失敗した場合、それがイベントを放送しています。
FailedPreStopHookイベントであるPRESTOPためFailedPostStartHookイベントでPostStart、、、のために。
あなたは、<pod_name>ポッドを記述kubectl実行することによって、これらのイベントを表示することができます。
事前定義された開始及びプレイベント動作の終了
以下は、ポッドは、コンテナが含まれて作成され、我々はこの容器に操作の事前設定事前開始と終了を行います。
https://raw.githubusercontent.com/kubernetes/website/master/docs/tasks/configure-pod-container/lifecycle-events.yaml
apiVersion:v1の |
安全な終了サービスを確保するためにPRESTOPフックを使用します
更新サービスプロセスに、実際の運用環境でSpringフレームワークを使用して、サービスコンテナを直接要求の一部は、まだ500エラーが生じ、コンテナの終了に配布され、終了され、このデータ量は、会計上の誤りを要求し、それを無視することができます。
エラーがなくなるまで、終了、最小の要求エラーのエレガントな方法を追加することを検討してください。
ここで、バネクラウド・サービス・ディスカバリー・コンポーネントである:
ユーレカはロードバランシングおよび中間層のフェイルオーバ・サーバのロケーションサービスのためのサービスセンターとして登録され、RESTベースのサービスです。
各サービスが起動したら、それはユーレカServerに(などのIP、ポート、サービス情報、)自分の情報を登録します、ユーレカServerは、この情報を格納する
マイクロサービスが開始した後、定期的に(デフォルト30秒)ユーレカサーバーにハートビートを送信します彼らの「リース」や他のマイクロアドレス情報を更新することはユーレカサービス、関連するロジックの実装から取得することができます。
今の時間の期間保持した後、サービス(InstanceStatus.OUT_OF_SERVICE)のうちの状態を変更し、サービスを削除し、登録ユーレカサーバーインスタンスを考えてみましょう。
サービスを無効にする:
-X PUTカール" HTTP:// ADMIN:[email protected] :? 8761 /ユーレカ/アプリ/ appNameの{} / {}するinstanceId /状態値= OUT_OF_SERVICE"
説明:管理者:直接この目の前を削除しない場合、管理者は、ユーレカログイン名とパスワードである;
するinstanceIdは、上記のリンクに表示されるサービスのオープンラベルのコンテンツのリストである、のような:myappに:192.168.1.100:8080
K8Sの具体的な動作では:
apiVersion:拡張/ v1beta1の |
役に立たない情報を削除し、ライフサイクルに焦点を当てて
最初の異なるサービスを変更するのは簡単、変数として個別に環境変数名とポートサービスを定義し、この部分。
ユーレカ状態OUT_OF_SERVICEに構成されたカールPUTを使用してください。
ストップバッファ時間として、スリープ時間を設定します。