Kubernetes リソース制限を調整する方法

Kubernetes リソース制限を調整する方法

Kubernetes のリソース制限は、制限が厳しすぎることと緩すぎることの間の適切なバランスを見つける必要があるため、調整が難しい構成になることがよくあります。

この記事では、無制限のコンテナの検出から、クラスターで正しく構成する必要がある Kubernetes リソース制限の確認まで、正しい Kubernetes リソース制限を設定する方法を学習できます。 Kubernetes クラスターを監視するために Prometheus を使用することを前提としています。そのため、この記事の各ステップでは、PromQL クエリを使用した例が説明されています。

Kubernetes リソース制限のないコンテナの検出

正しい Kubernetes リソース制限を設定するための最初のステップは、制限のないコンテナを検出することです。 Kubernetes リソース制限のないコンテナは、ノードに非常に深刻な結果をもたらす可能性があります。最良の場合、ノードは順番に、またはスコアによってポッドの排除を開始します。また、CPU スロットリングによるパフォーマンスの問題も発生します。最悪の場合、メモリ不足によりノードが終了します。

Kubernetes リソースの制約のないコンテナを見つける

  • 名前空間でCPU制限のないコンテナを検索する
 (名前空間) で合計します ((名前空間、ポッド、コンテナ) でカウントします (kube_pod_container_info{container!=""}) ただし、(名前空間、ポッド、コンテナ) で合計しない場合は (kube_pod_container_resource_limits{resource="cpu"}))
  • 名前空間で無制限のメモリを持つコンテナを検索する
 (名前空間) で合計((名前空間、ポッド、コンテナ) でカウント(kube_pod_container_info{container!=""})、ただし (名前空間、ポッド、コンテナ) で合計(kube_pod_container_resource_limits{resource="memory"}) の場合は除く)

Kubernetes リソース制限のないコンテナが多すぎると感じましたか?

Kubernetes リソース制限のないコンテナが多数見つかったかもしれません。それでは、最も危険なものに焦点を当ててみましょう。どうやって確認するんですか?簡単です。リソースを最も多く使用し、Kubernetes リソース制限のない上位 10 個のコンテナを見つけるだけです。

  • CPU 制限なしで CPU を最も多く使用しているコンテナのトップ 10
 topk(10、(名前空間、ポッド、コンテナ)(rate(container_cpu_usage_seconds_total{container!=""}[5m])) による合計、ただし、(名前空間、ポッド、コンテナ)(kube_pod_container_resource_limits{resource="cpu"}) による合計を除く)
  • メモリ制限なしでメモリを最も多く使用しているコンテナトップ 10
 topk(10、(名前空間、ポッド、コンテナ)(container_memory_usage_bytes{container!=""}) で合計、ただし、(名前空間、ポッド、コンテナ)(kube_pod_container_resource_limits{resource="memory"}) で合計しない場合)

Kubernetes リソース制限が過度に厳しいコンテナを検出する

過度に厳しいCPU制限を持つコンテナの検出

コンテナが CPU 制限に非常に近い場合、通常よりも多くの CPU 操作を実行する必要があるときに CPU スロットリングによりパフォーマンスが低下します。

  • CPU 使用率が制限に近いコンテナを見つけるには、次のクエリを使用します。
 ((名前空間、ポッド、コンテナ)(レート(container_cpu_usage_seconds_total{container!=""}[5m])) による合計 / (名前空間、ポッド、コンテナ)(kube_pod_container_resource_limits{resource="cpu"})) による合計 > 0.8

メモリ制限が過度に厳しいコンテナの検出

コンテナがメモリ制限に近づき、それを超過すると、コンテナは終了します。

このグラフは、コンテナが制限に達して終了するまで、メモリ使用量がどのように増加するかを示しています。

  • メモリ使用量が制限に近いコンテナを見つけるには、次のクエリを使用します。
 ((名前空間、ポッド、コンテナ)(container_memory_usage_bytes{container!=""}) による合計 / (名前空間、ポッド、コンテナ)(kube_pod_container_resource_limits{resource="memory"}) による合計) > 0.8

適切な Kubernetes リソース制限を設定するにはどうすればよいでしょうか?

1 つのアプローチは、制限したいコンテナのリソース使用量を時間の経過とともに観察することです。これを行うには、同じタイプとワークロード (デプロイメント、デーモンセット、ステートフルセットなど) のコンテナに焦点を当てる必要があります。ここでは 2 つの戦略があります。

保守的な戦略

各期間に最も多く消費されるコンテナの値を選択します。制限をこの値に設定すると、コンテナのリソースが不足することはありません。

  • 保守的な戦略を使用して適切なCPU制限を見つける
最大 (namespace、owner_name、container)((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[5m])) * on(namespace、pod) group_left(owner_name) 平均 (namespace、pod、owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))

適切なメモリ制限を見つけるために保守的な戦略を使用する

最大値 (namespace、owner_name、container)((container_memory_usage_bytes{container!="POD",container!=""}) * on(namespace、pod) group_left(owner_name) 平均 (namespace、pod、owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))

積極的な戦略

制限として 99 パーセンタイルを選択します。これにより、制限外の 1% の値が除去されます。これは、望ましくない異常や急増が時々発生する場合に適した戦略です。

  • 積極的な戦略で適切なCPU制限を見つけましょう
 (namespace、owner_name、container) による分位値 (0.99、(rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[5m])) * on(namespace、pod) group_left(owner_name) による平均 (namespace、pod、owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))

積極的な戦略を使用して適切なメモリ制限を見つけます

 (namespace、owner_name、container) による分位値 (0.99、(container_memory_usage_bytes{container!="POD",container!=""}) * on(namespace、pod) group_left(owner_name) による平均 (namespace、pod、owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))

クラスターには十分な容量がありますか?

Kubernetes では、ノードは、各ポッドのコンテナ要求に基づいて、そのノードにスケジュールされているポッドに十分なリソースがあることを確認します。これは、ノードが各コンテナに制限内で設定された量の CPU とメモリを提供することを約束することも意味します。

非常に緩い制限を持つコンテナについて議論することは、過度の制限について議論することと同じです。これは、すべての Kubernetes リソース制限の合計がそのリソースの容量を超えた場合に発生します。

クラスター内のリソースをオーバーコミットすると、通常の状況ではすべてが正常に実行される可能性がありますが、負荷が高い場合は、コンテナーが CPU とメモリを消費し始め、限界に達する可能性があります。これにより、ノードはポッドの削除を開始し、非常に重大なケースでは、クラスター内の使用可能なリソースが不足しているためにノードが終了します。

クラスター上のオーバーコミットの検出

メモリと CPU のクラスターのオーバーコミット率を確認するには、次のコマンドを使用します。

  • クラスターメモリのオーバーコミット率
 100 * 合計(kube_pod_container_resource_limits{コンテナ!="",リソース="メモリ"}) / 合計(kube_node_status_capacity_memory_bytes)
  • クラスターCPUオーバーコミット率
 100 * 合計(kube_pod_container_resource_limits{コンテナ!="",リソース="cpu"}) / 合計(kube_node_status_capacity_cpu_cores)

通常、すべてのコンテナが同時にすべてのリソースを消費するわけではないため、リソースの観点からは 100% のオーバーコミットメントが理想的です。一方、これでは、決して使用されないインフラストラクチャに追加コストが発生します。

クラスターのサイズをより適切に設定するには、オーバーコミットメントが 125% 未満になるように保守的な戦略を選択するか、オーバーコミットメントがクラスター容量の 150% に達するようにする場合は積極的な戦略を選択します。

オーバーコミットノードの検出

各ノードのオーバーコミットを確認することも重要です。ノードがオーバーコミットされる例としては、ポッドが 2 つの CPU を要求しているが、8 つの CPU に制限されている場合が挙げられます。ポッドは 4 コアのノードでスケジュールできますが、ポッドのコア数は 8 個に制限されているため、ノードのオーバーコミットメントは 8 - 4 = 4 コアになります。

  • ノードメモリのオーバーコミット率
 (ノード)(kube_pod_container_resource_limits{container!=””,resource=”memory”} ) による合計 / (ノード)(kube_node_status_capacity_memory_bytes) による合計
  • ノードCPUオーバーコミット率
 (ノード)(kube_pod_container_resource_limits{container!=””,resource=”memory”} ) による合計 / (ノード)(kube_node_status_capacity_memory_bytes) による合計

リソース制限を適切に調整した後の最終結果

*原文: https://sysdig.com/blog/kubernetes-resource-limits/*この記事の一部の写真はインターネットから引用したものです。著作権侵害があった場合は削除いたしますのでご連絡ください。

<<:  Kube-Mgmt を使用して OPA を Kubernetes クラスターに統合する

>>:  中小企業のオフィスセキュリティ管理の3大課題をどう解決するか?

推薦する

ホストオンはどうですか?ロサンゼルスデータセンターのAMDプラットフォームVPSのレビュー:10G帯域幅、Disney\netflix\chatgptのロック解除、その他多数

9月にホストは元のDedipathから退去し、すべてのサーバーは新しいコンピュータルームに移行されま...

Baidu外部リンク分析ツール体験レポート

先週、私は百度ウェブマスタープラットフォームの外部リンク分析のアップグレード版の内部テストに参加する...

2か月で単語バルブを百度の7ページ目に載せた経験

Meilele Forum の記事に対する Qiangzi の分析を読んだ後、ソフトな記事を書く場合...

ビッグデータとクラウドコンピューティングアーキテクチャ:柔軟で効率的なデータ処理プラットフォームの構築

デジタル時代の到来により、ビッグデータはあらゆる分野にとって重要なリソースになりました。しかし、ビッ...

ウェブサイトのロングテールキーワードを体系的に選択して最適化する方法

みなさんこんにちは。今日は、ウェブサイトでのロングテールキーワードのプロモーションとレイアウトについ...

中学卒の男性が海賊版の高画質大ヒット映画を販売するウェブサイトを立ち上げ、売り上げは数千万本に達した。

中国江蘇ネットは5月12日、大ヒット作の公開後、映画館で映画を観るのが嫌いなファンにとっては、オンラ...

最も公式かつ完全なバージョン:張小龍のWeChat公開授業スピーチの全文!

2018年にWeChatはどのように成長しましたか? WeChatの原動力は何ですか?インターネット...

外国貿易企業E

電子メール マーケティングは、その幅広い範囲と大規模なオーディエンスにより、今日でも多くの企業で使用...

ウェブ編集者になってどれくらい経ちますか?なぜまだ小さな編集者のままなのでしょうか?

今日、ウェブ編集者の職に就く新しい人が面接に来ました。何気ない会話の中で、私は彼にウェブ編集者の仕事...

ウェブサイトの最適化と検索エンジンの最適化の関係

ウェブサイトの最適化には、ユーザーの最適化、検索エンジンの最適化、ウェブサイトの運用と保守の最適化と...

ワンステップでアプリを宣伝する方法

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

GISはデジタル変革を支援します。第16回Esri中国ユーザー会議が北京で開催されました。

[51CTO.com からのオリジナル記事] デジタル変革の時代において、GIS もますます大きな変...

まだ余裕のある「ホスト」を逃がさないでください! 「ウェブマスター推奨 - 仮想ホスト」!

かつて、仮想ホスティングは、ウェブサイトを構築するときに最初に推奨される製品でした。いつから始まった...

ロンドンオリンピックをウェブサイトのトラフィックを増やす人気イベントとして活用する方法

毎日、パソコンの電源を入れると、いつも私たちを取り囲むホットな話題があります。それは「2012年ロン...

変化するコンテナエコシステムに関する8つの事実

[51CTO.com クイック翻訳] コンテナは、企業がアプリケーションとインフラストラクチャを構築...