問題タブ [kubernetes-deployment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kubernetes - preStop フックとterminationGracePeriodSecondsの関係
基本的に私がやろうとしているのは、ポッドのライフサイクルをいじって、ポッドが終了する前にログのコピーなどのクリーンアップ/バックアップを実行できるかどうかを確認することです。
必要なもの: 終了する前に、ログ/ヒープダンプをコンテナーから hostPath/S3 にコピーします。
私が試したこと:
メッセージをエコーするために bash コマンドで preStop フックを使用しました (機能するかどうかを確認するためだけに!!)。プロセスが機能するかどうかを確認するために、preStop に遅延を指定してterminationGracePeriodSeconds を使用し、それらを切り替えました。元。terminateGracePeriodSeconds:30 秒 (デフォルト) を保持し、preStop コマンドを 50 秒までスリープするように設定します。それまでにコンテナーが終了するため、メッセージは生成されません。これは期待どおりに機能します。
私の質問:
- preStop フックで許可される (推奨される) プロセスの種類は? 15 GB 以上のログ/ヒープダンプをコピーするには、かなりの時間がかかります。この時間は、terminationGracePeriodSeconds を定義するために使用されます。
- preStop が設定された gracePeriod よりも時間がかかるとどうなりますか? (ログが巨大な場合は 10 ギガ)
- フックがなくてもterminationGracePeriodSecondsを設定するとどうなりますか? コンテナはその猶予時間まで稼働したままになりますか?
これに密接に関連するこの記事を見つけましたが、https://github.com/kubernetes/kubernetes/issues/24695をたどることができませんでした
すべての入力に感謝します!!
bash - Kubernetes のデプロイ: preStop は aws コマンドを実行しません
ポッドが終了する直前にログを S3 に転送しようとしています。このためには、
AWS-CLI を持つようにコンテナーを構成します。postStart フックのスクリプトを使用して、これを成功させました。
AWS S3 コマンドを実行して、hostPath から S3 バケットにファイルを転送します。ほとんどこれを持っていました!!!
これが私のKube展開です(minikubeで実行):
installS3Script.sh
transferFilesToS3.sh
何が失敗したか: transferFilesToS3.sh は正常に実行されますが、AWS コマンドは実行されません。
何が機能するか: テストログファイルを作成し、aws コマンドを postStart フック (installS3Script.sh) に配置すると、正常に動作します!!
preStop フックを別の方法で検討している可能性があると思います。ライフサイクルとpreStopフックに関する記事をいくつか読みました。また、猶予期間付きの preStop フックの使用に関する相対的な質問もありました。
私が見逃している可能性があるものについての提案/ヘルプをいただければ幸いです。
kubernetes - ステートフル アプリの Kubernetes アプリケーション アップグレード戦略
次のような多くのアップグレード戦略があります。
ローリング アップグレード
ブルーグリーン
A/B テスト
カナリア
シェアード ナッシング アーキテクチャのアプリで機能します。また、一部の戦略は、ElasticSearch のローリング アップグレードなどの分散クラスター アプリでも機能します。
これらの戦略のいずれも、ステートフルでデータ層でのクラスタリングをサポートしていないアプリには適用されないことを確認する必要があります。(一度に外部データベース [および永続ボリューム] に書き込むことができるアプリのインスタンスは 1 つだけなど) ?
アップグレードする唯一の方法は、現在の展開を停止して削除し、新しい展開を展開することです。