Kubernetes コンポーネントのトラブルシューティング方法

Kubernetes コンポーネントのトラブルシューティング方法

[[394145]]

この記事は、Qiao Ke 氏が執筆した WeChat パブリックアカウント「運用と保守の開発ストーリー」から転載したものです。この記事を転載する場合は、Operation and Maintenance Development Story のパブリック アカウントにお問い合わせください。

Kubernetes の基本コンポーネントは、家の基礎のようなものです。それらの重要性はいくら強調してもし過ぎることはありません。 Kubernetes クラスターのメンテナーとして、コンポーネントの問題に遭遇することがよくあります。通常、どのようにしてそれらを見つけて解決しますか?

以下は、トラブルシューティングのアイデアの簡単な分析です。

  • クラスタステータスから障害のあるノードまたはコンポーネントを見つける
  • コンポーネントログを分析する
  • pprofを使用してコンポーネントの特定のパフォーマンスを分析する

範囲を決定する

Kubernetes は基本コンポーネントが少なく、デプロイが非常に簡単なので、スコープを定義するのも簡単です。たとえば、kubectl get nodes を使用する場合、ノードのステータスが NotReady の場合、2 つの可能性が考えられますか?

(1)ノードのkubeletコンポーネントに問題がある

(2)ノードのネットワークコンポーネントに問題がある

このようにして、大まかな方向が決定され、消去法を使用することができます。

ここではなぜ消去法と呼ばれるのでしょうか?なぜなら、問題を解決する過程では、まず仮説を立て、次に検証するという方法が通常採用されるからです。まず、考えられるすべての要因をリストし、問題が解決するまでそれらを 1 つずつ検証して排除します。

ログを分析する

ログ分析はトラブルシューティングを行う最も直接的な方法です。ほとんどの問題はログに反映されます。通常、Kubernetes コンポーネント ログを表示するには、次の 2 つの方法があります。

  • systemdによって開始されるサービス。journalctl -l -u xxxx を使用します。
  • 静的ポッドで開始されたサービスの場合は、kubectl logs -n kube-system $PODNAME --tail 100 を使用します。

もちろん、多くの場合、問題自体を分析するだけでなく、インフラストラクチャの CPU、メモリ、IO などの周囲の問題にも注意を払い、総合的に考慮して問題を見つけ出します。

パフォーマンス分析

なぜパフォーマンス分析を最後にするのでしょうか?

ほとんどの人にとって、コンポーネントのパフォーマンスを分析することは得意ではなく、好きでもありません。まず、時間がかかることです。 2 つ目は、さまざまなパフォーマンス指標について一定の理解を持つ必要があるということです。 3つ目は、学習コストが比較的高いことです。

ご存知のとおり、Kubernetes のバージョンイテレーションは比較的速く、基本的に毎年 2 ~ 3 つのバージョンがリリースされます。反復速度が非常に速いため、一部のバージョンにバグやパフォーマンスの問題が含まれる可能性があります。したがって、他に選択肢がない場合は、コンポーネントのパフォーマンスを分析してみることができます。

Kubernetes は Golang を使用して開発されており、Golang の pprof はパフォーマンス分析のための強力なツールです。インタラクティブなインターフェースと UI グラフィックが提供されており、比較的直感的で問題を簡単に特定できます。さらに、go-torch を使用してプロファイル データからフレーム グラフを生成することもできます。これにより、より直感的になります。

すべての Kubernetes コンポーネントは、パフォーマンス分析に pprof を使用できます。インターフェースはhost:port/debug/pprof/です。

pprofの一般的な使用方法

対話型コマンドの使用

コールスタック情報を表示する

  1. go ツール pprof http://localhost:8001/debug/pprof/heap

30秒以内にCPU情報を表示

  1. go ツール pprof http://localhost:8001/debug/pprof/profile?seconds=30

ゴルーチンのブロックを表示

  1. go ツール pprof http://localhost:8001/debug/pprof/block

5秒以内に実行パスを収集

  1. go ツール pprof http://localhost:8001/debug/pprof/trace?seconds=5

ミューテックスホルダーのスタックトレース

  1. go ツール pprof http://localhost:8001/debug/pprof/mutex

UIインターフェースを通じて

UI 分析ツールは、使用するのが比較的面倒です。まずファイルをエクスポートし、次に go ツールを使用して分析用のサービスを開始する必要があります。

たとえば、kube-scheduler のスタック情報をエクスポートします。

  1. curl -sK -v http://localhost:10251/debug/pprof/heap > heap.out  

次に、go ツールを使用して次のようにサービスを開始します。

  1. go tool pprof -http=0.0.0.0:8989 ヒープ。 

すると、ブラウザ上で特定のスタック情報グラフが表示されます。

サーバーに graphviz コンポーネントをインストールする必要があることに注意してください。各種オペレーティングシステムへのインストール方法については[3]を参照してください。

UI インターフェースのメイン メニューとその機能について、以下に簡単に紹介します。

  • VIEW: 表示モード
    • 上: 高い順から低い順に表示
    • グラフ: デフォルトモード。関係グラフとして表示します。
    • フレームグラフ: フレームグラフとして表示
    • Peek: 並べ替えと表示、詳細情報の表示
    • ソース: ソースコード注釈付きの並べ替えと表示
    • 分解: 合計金額をすべて表示
  • SAMPLE: VIEWの表示モードを提供します
    • alloc_objects: 割り当てられたオブジェクトの合計数(解放されたかどうかに関係なく)
    • alloc_space: 割り当てられたメモリの合計量(解放されているかどうかに関係なく)
    • inuse_objects: 割り当てられているがまだ解放されていないオブジェクトの数
    • inuse_sapce: 割り当てられているがまだ解放されていないメモリの量
    • 絞り込み: フィルタリング機能を提供します

上記では、pprof の基本的な使い方を簡単に紹介しました。以下は、Kubernetes のさまざまなコンポーネントの簡単な分析です。ここでは CPU 情報のみを取得して表示します。

注: バージョン上の理由により、一部のバージョンでは pprof がデフォルトで有効になっていますが、他のバージョンでは有効になっていません。有効になっていない場合は、自分で有効にする必要があります。パラメータは基本的に profiling: true です。具体的な情報については公式ウェブサイト[4]をご覧ください。

kube-apiserver の分析

(1) kubectl proxyを使用してプロキシを起動する

  1. kubectl プロキシ

(2)別の端末を起動しCPU情報を取得する

  1. curl -sK -v http://localhost:8001/debug/pprof/profile >apiserver- cpu.out  

(3)goツールを使用してサービスを開始する

  1. goツールpprof -http=0.0.0.0: 8989 apiserver-cpu.out  

(4)ブラウザで見る

kube-schedulerの分析

(1)CPU情報を取得する

  1. curl -sK -v http://localhost:10251/debug/pprof/profile >scheduler-cpu. 

(2)goツールを使用してサービスを開始する

  1. goツールpprof -http=0.0.0.0: 8989スケジューラcpu.out  

(3)ブラウザで見る

kube-controller-manager の分析

(1)CPU情報を取得する

  1. curl -sK -v http://localhost:10252/debug/pprof/profile >コントローラ- cpu.out  

(2)goツールを使用してサービスを開始する

  1. goツールpprof -http=0.0.0.0: 8989コントローラーCPU.out  

(3)ブラウザで見る

kubelet の分析

(1) kubectl proxyを使用してプロキシを起動する

  1. kubectl プロキシ

(2)別の端末を起動しCPU情報を取得する

  1. カール -sK -v http://127.0.0.1:8001/api/v1/nodes/k8s-node04-138/proxy/debug/pprof/profile >kubelet-cpu。 

(3)goツールを使用してサービスを開始する

  1. go tool pprof -http=0.0.0.0:8989 kubelet-cpu を実行します。 

(4)ブラウザで見る

特定のパフォーマンス データを取得できることが最初のステップであり、その後の特定の分析によって問題を見つけるのに役立ちます。

書類

[1] https://github.com/google/pprof

[2] https://github.com/uber-archive/go-torch

[3] http://www.graphviz.org/download/#linux

[4] https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/

<<:  ポストパンデミック時代において、財務管理はデジタルイノベーションをどのように活用して全体的な動向を把握できるのでしょうか?

>>:  クラウド分析が直面する主な課題とその克服方法

推薦する

Webmaster Network の第 2 回 SEM 入札トレーニングへの登録最終日

1. オンライン入札とは何ですか?簡単に言えば、入札とは、Baidu、Google、Soso、Sog...

SEO診断と検索エンジンマーケティングの関係

He Guijiang 氏は、A5 Webmaster Network の検索マーケティング部門で ...

モノのインターネットはエッジコンピューティングの最も強力なアプリケーションです

クラウド コンピューティングの場合、サービスとしてのソフトウェアとモバイル デバイスの爆発的な増加が...

姚小偉:歴史上最も包括的なウェブページのスナップショット、毎日更新

今日、著者は、史上最も完全なドメイン名のクイックコレクション、最も完全な外部リンク方法、そして最も完...

SEOにおけるホームページのニュース、トップ、フッターの役割についての簡単な説明

みなさんこんにちは。私はハルビン仮想現実ウェブサイトのウェブサイトデザイナーです。最近はサーバーやビ...

経済学者の郎先平が分析:なぜタオグンは人気があるのか​​?

今年の「ダブル11」の24時間で、タオバオとアリペイの売上高は合計191億元に達し、そのうち天猫(タ...

SEOウェブサイト最適化ポジショニングアイデアとユーザー需要データ分析

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています何もない状...

市場を開拓する必要があり、キーワードの最適化には忍耐が必要です

実際、キーワードの最適化には、より多くの粘り強さと忍耐が必要です。以前は、検索エンジンの不完全さのた...

Racknerd: シアトルVPSレビュー、データを通してRacknerdの素晴らしさを伝える

Racknerdは昨夜、コロクロスシアトルデータセンターを追加しました。シアトルは米国西海岸に位置し...

革新を続けながらクラウドデータストレージのコストを削減する 7 つの方法

[[330351]] 【51CTO.com クイック翻訳】 今はビジネスにとって厳しい時期です。不況...

アプリケーション移行の 5 つの R は今でも適用されますか?

[51CTO.com クイック翻訳] クラウド コンピューティングの初期の頃、ガートナーはアプリケー...

SEOVIPの驚くべきランキングは、ウェブサイトのユーザーグループがコンテンツよりも重要であることを証明しています

SEOVIPウェブサイトは2012年11月15日に開設されました。18日後、ターゲット最適化キーワー...

エッジコンピューティングが医療に変化をもたらす

COVID-19パンデミックは、アジア太平洋地域全体のヘルスケア業界にチャンスをもたらしました。全体...

完全に自律かつ制御可能!国内初のフルリンクOS OpenCloudOSリリースソースコミュニティプロジェクト

6月22日、2022 OpenCloudOSコミュニティオープンデーで、国産オープンソースオペレーテ...