トラブルシューティング、治療、予防をkubernetes

トラブルシューティング、治療、予防をkubernetes

トラブルシューティングと秩序のアイデア

最初のステップ:

ノードが正常であるを通して、私たちは、第二は、クラスタノードの異常でネットワーク・ノードがあるかどうかを確認することです、K8SのAPIサーバーが正常であることを確認するために必要な、見ることができます。我々は最初の段階でハングアップしているノード発見した場合は、今回我々はノードを再起動することができ、ノード上のアプリケーションが回復します。私たちは、クラスタノードがリソース不足でハングアップしていることが判明した場合、我々は速やかにクラスタノードを増やす、あるいはクラスタを再起動する必要があり、この時は、まだハングすることがあります。

ステップ2:

最初のステップでは、我々は、クラスタ内のノードは、任意の質問を持って見つけることができませんでした、私は、アプリケーション自体の一部を確認する必要があるかもしれません、我々は、ログアプリケーション自体を見てする必要が関与ログポッドを表示する必要があります。アプリケーションログを遮るもののないビューが動作中にいくつかの問題が発見されない次の2点の確認の実装を見ることができ、ポッドインフラストラクチャネットワークに1人の表情をされ、何かが間違っログが内側にありません。第二は、起動時に発生する一般的な問題を解決することです。

第三段階:

私たちはエラーがポッド、我々はKUBE-apiserver、KUBE-スケジューラ、KUBE-コントローラマネージャログを含む、K8Sのコアコンポーネントを見てする必要があるかもしれない、この時間は発生しません見つけたとします。この時点で、我々は問題がないかどうかを確認するために、コンフィギュレーションK8Sコアコンポーネントを表示することができます。

ステップ4:

第四のステップは、私たちがDNSまたはKUBE-プロキシログを調べる必要があり、この時間は、あなたは非常に単純なDNSまたはKUBE-プロキシエラーがないを見ることができ、サービスは訪問を働かせることができるかどうかをチェックすることです。習慣的に、特定のポッドキャプチャまたはノード上で実行キャプチャの一部の人々は、この効率は非常に低いです。

ステップ5:

見つけることは何ら問題は、災害があっただろうKubeletこのノードので、Kubeletにエラーメッセージが発生した場合にも、各ノードの表情Kubeletを取ることができ、ありませんが、我々はノードを再実行する必要があります。

以上の5例は、クラスタ自体でのネットワーク、ストレージ、アプリケーションのほとんど例外を解決することができます。コア自体は、クラスタに依存している警報システムを監視し、監視システムを持って、私たちの監視システムで直接この方法で例外がないクラスタ・ノードを参照してください。我々はマイクロサービスのアプリケーションであれば、あなたもサービスが切断されたマイクロリンクの一つではありません見ることができます。

一般的なアプリケーションの障害

第一ポッドがノードにスケジュールされていないことを示す、保留中の状態にあっ開始ポッドです。私たちの現実世界のシナリオでは、主な原因ノード上のリソースの不足を引き起こしました。

第二は、HOSTPORT原因ポートの競合を使用することで、サービスが正常に起動しません。

第三は、あなたが待っているでプログラムならば、それはポッドがノードにチューニングではなく稼働して、kubectlによって記述された手段であり、 このコマンドは、情報を表示します。ミラーを引っ張っが失敗している最も一般的な原因は、このような状況は、プライベートクラウド環境では非常に一般的です。

第四は、ここでは、コードパラメータまたはアプリケーション自体を使用して、当社の独自のアプリケーションと関係を持っている典型的な例を--MySQLです。私はK8S上のMySQLユーザーの展開は、この問題が発生する可能性があると考えています。お使いのディスクキャッシュが不足している場合は、使用中のMySQLは、我々はMySQLのエラーを、それをルックアップする必要があるこの時間は、エラーメッセージが明確にあなたがコントローラのコマンドで見つけることができるすべてである大規模なパラメータを、転送する必要があると言われます。ポッドが再起動された場合、我々はそれの前にログを表示する必要があるかもしれません。

第五に、サービスは複数のサービスと複数のポッドの間でロードバランシングを提供します。私たちは、この時点で検討する必要があるときに、あなたのサービスにアクセスできないことをサービスコントローラは、コンクリートポッドマウントされていないの下で、あなたがそこに見ることができると仮定。

一般的なクラスタの障害

1、ノード異常
2、基本的なネットワークの異常
図3は、異常成分をK8S
4、ネットワーク及びストレージコンテナ

私たちのクラスタは、時々の状況は、そのような私たちの下にCPUやメモリの不足、異常ノードにつながる、またはクラスタ全体のネットワークの停止、フラッシュのように、発生します。

ノードに異常がある場合は、この時間は、リソースの不足にノードを追加し、すぐにノードを再起動する必要があります。ノードが頻繁にサービスドリフトが生じ振る場合は、この時間は、我々は、パラメータコントローラ・マネージャを確認し、応答パラメータを設定し、そのノード全体の状態検出期間を設定します。

私たちは、例外がK8Sを発生することが判明した場合、我々はコントローラ・マネージャーを見つけるなどのハングアップ、あるいはクラウド・コントローラー・マネージャがハングアップ、コアは、それらの再起動これらのノードにタイムリーに、ログを見ることです。コアの需要は、我々は、これらのコンポーネントは、複数のコピーに維持するために私達の必要性を含め、高可用性の主要コンポーネントを確保する必要があるということです。

ストレージおよびネットワーキング環境は、我々は、スクリーニングの最下層に上からネットワークのどの層に問題を必要とするように、一般的なネットワークの問題のように、それは他の位置決めようになり、全体で最も問題領域K8Sです。

失敗を回避する方法

クラスタリソースの1、リアルタイム監視

資源のポッド欠如は、ドリフトを回避するためにノードを追加するための時間をリード

2、ポッドに適切なリソースを設定します

K8SがlimitRangeのAPIを提供し、あなたはデフォルトの名前空間の制限、要求値を設定することができます

一方、クラスタプラグ(モニタリング、アラーム、ログ収集)およびその他のリソースは、クラスタ増加の拡大に伴い、占有されるので、リソースの制約を行う必要があります。あなたはリソース制限を設定しない場合、それは継続的につながる殺す(リソース不足、K8S追放ポッドの優先順位やポッドを殺すために優先権を与えるだろうがリソース制限を設定し、負荷が増加するなどのリソースが増加を監視し、リソースが占有されていません増加した後、適切なメモリの制限を設定していない、それは)再起動殺されていきます

3、ダイナミックコミュニティの懸念

コンポーネントクラスタ内のタイムリーな修理のバグ

図4に示すように、アプリケーション・レベルの最適化

ステートレス、組み合わせK8S展開リソースオブジェクト、マルチコピー、自動スケーリング機能のアプリケーションを作成するようにしてください。

負荷がK8Sので、クラスタ全体は、我々は通常、対応できないということですので、我々は問題を回避する方法を見つける必要があり、私は、開発者たちは、クラスタに遭遇する可能性のある状況を避けるために、次の4つのポイントをまとめました。

最初のポイントは、本番環境に、我々はクラスタを構築することを本当の秋で、我々は、クラスタ内の非常に従属監視システムは、我々はドッカーは、クラスタリソースのステータスをリアルタイムで監視するために私たちを助けるシステムを必要とし、プロメテウスする必要があります。例外がどのノードが発生した場合、我々は、タイムリーな通知を必要としています。

開発者や運用、保守担当者は、簡単に私たちは、それ自体がシステムリソースの一部を消費することになるこれらのシステムコンポーネントを無視して、我々はいくつかのコンポーネントのクラスタをデプロイまたはプロメテウスのログを想定し、それを無視することができます。

我々はノードを増加し続けるように、これらのシステム・コンポーネントは、オーバーヘッドの上に、それはまだリソースを消費することになります。もし、より多くのアプリケーションのシステム・コンポーネントは、これらの重要なシステムコンポーネントの崩壊につながることができ、十分なリソースを与えられていない、我々は彼らにリソース制限を設定する権利を与える必要があれば、ポッドはますます、これらのシステム・コンポーネントは、資源の消費を持っています常にクラスタのサイズを調整する必要があります。少なくとも、私たちは、警報システムの稼働時間を監視していることを確認します。

第二の点は非常に頻繁にK8Sは、セキュリティ上の問題の多くを公開する傾向があるが、我々は速やかに、リアルタイムに焦点を当てて、クラスタに発生する可能性がある問題を修正する必要があります。

三点目は、我々はすぐにそれを回復したい場合は、我々は、前提は、我々はアプリケーションはステートレスであることを確認する必要があり、それは任意のストレージに依存しないということであるときに、アプリケーションの問題が発生し、アプリケーション層を最適化することです。非国家アプリケーションまで多くの問題よりも回復の状態を復元するためのアプリケーションがあります。ステートレスアプリケーションでは、我々は一般的な従来のアプリケーションと差別場所ですK8Sスケジューリング機構を活用するために、部数を復元するアプリケーションをさせることができます。私たちは、このように問題のK8Sクラスタ内で使用することを避けることができます。

最も重要なことは、我々は、災害のラインを持っていた前に、私たちは、バックアップデータを復元するために、クラスタ内のデータをバックアップするためにタイムリーに必要で、業務に影響を与えませんでした。

おすすめ

転載: www.cnblogs.com/h-gallop/p/11682098.html