メインコンテンツまでスキップ

リソースプロファイリング

このセクションでは、K3sの最小リソース要件を決定するためのテスト結果を記録します。

結果は以下の通りです:

コンポーネントプロセッサ最小CPUKine/SQLite使用時の最小RAM組み込みetcd使用時の最小RAM
ワークロードを持つK3sサーバーIntel 8375C CPU, 2.90 GHzコアの6%1596 M1606 M
単一エージェントを持つK3sクラスターIntel 8375C CPU, 2.90 GHzコアの5%1428 M1450 M
K3sエージェントIntel 8375C CPU, 2.90 GHzコアの3%275 M275 M
ワークロードを持つK3sサーバーPi4B BCM2711, 1.50 GHzコアの30%1588 M1613 M
単一エージェントを持つK3sクラスターPi4B BCM2711, 1.50 GHzコアの25%1215 M1413 M
K3sエージェントPi4B BCM2711, 1.50 GHzコアの10%268 M268 M

リソーステストの範囲

リソーステストは以下の問題文に対処することを目的としています:

  • 単一ノードクラスターで、実際のワークロードがクラスターにデプロイされることを前提に、K3sスタックサーバースタック全体を実行するために確保すべき正当な最小CPU、メモリ、およびIOPsを決定します。
  • エージェント(ワーカー)ノードで、KubernetesおよびK3sコントロールプレーンコンポーネント(kubeletおよびk3sエージェント)のために確保すべき正当な最小CPU、メモリ、およびIOPsを決定します。

ベースライン測定に含まれるコンポーネント

テストされたコンポーネントは以下の通りです:

これらは、K3sパッケージコンポーネント(Traefik Ingress、Klipper lb、local-path storage)のみを使用し、標準のモニタリングスタック(PrometheusとGrafana)およびGuestbook例アプリを実行する安定したシステムのベースライン数値です。

IOPSを含むリソース数値はKubernetesデータストアおよびコントロールプレーンのみのものであり、システムレベルの管理エージェントやログ、コンテナイメージ管理、またはワークロード固有の要件のオーバーヘッドは含まれていません。

方法論

Prometheus v2.43.0のスタンドアロンインスタンスを使用して、prometheus-node-exporterをapt経由でインストールし、ホストのCPU、メモリ、およびディスクIO統計を収集しました。

systemd-cgtopを使用して、systemd cgroupレベルのCPUおよびメモリ使用量をスポットチェックしました。system.slice/k3s.serviceはK3sおよびcontainerdのリソース使用量を追跡し、個々のポッドはkubepods階層下にあります。

追加の詳細なK3sメモリ使用量データは、サーバーおよびエージェントプロセスのために統合されたメトリクスサーバーを使用してkubectl top nodeから収集しました。

使用量数値は、記述されたワークロードを実行しているノードの定常状態操作からの95パーセンタイルの読み取り値に基づいています。

環境

アーキテクチャOSシステムCPURAMディスク
x86_64Ubuntu 22.04AWS c6id.xlargeIntel Xeon Platinum 8375C CPU, 4 Core 2.90 GHz8 GBNVME SSD
aarch64Raspberry Pi OS 11Raspberry Pi 4 Model BBCM2711, 4 Core 1.50 GHz8 GBUHS-III SDXC

ベースラインリソース要件

このセクションでは、基本的なK3s操作のための最小リソース要件を決定するためのテスト結果を記録します。

ワークロードを持つK3sサーバー

これは、K3sサーバーがシンプルなワークロードとリソースを共有する単一ノードクラスターの要件です。

CPU要件は以下の通りです:

システムCPUコア使用率
Intel 8375Cコアの6%
Pi4Bコアの30%

メモリ要件は以下の通りです:

テストされたデータストアシステムメモリ
Kine/SQLiteIntel 8375C1596 M
Pi4B1588 M
組み込みetcdIntel 8375C1606 M
Pi4B1613 M

ディスク要件は以下の通りです:

テストされたデータストアIOPSKiB/秒レイテンシ
Kine/SQLite10500< 10 ms
組み込みetcd50250< 5 ms

単一エージェントを持つK3sクラスター

これは、K3sサーバーノードとK3sエージェントを持つK3sクラスターのベースライン要件ですが、ワークロードはありません。

K3sサーバー

CPU要件は以下の通りです:

システムCPUコア使用率
Intel 8375Cコアの5%
Pi4Bコアの25%

メモリ要件は以下の通りです:

テストされたデータストアシステムメモリ
Kine/SQLiteIntel 8375C1428 M
Pi4B1215 M
組み込みetcdIntel 8375C1450 M
Pi4B1413 M

K3sエージェント

要件は以下の通りです:

システムCPUコア使用率RAM
Intel 8375Cコアの3%275 M
Pi4Bコアの5%268 M

分析

このセクションでは、K3sサーバーおよびエージェントの利用に最も大きな影響を与える要因と、エージェントおよびワークロードがクラスターのデータストアに干渉しないようにする方法を記録します。

主要なリソース利用ドライバー

K3sサーバーの利用数値は主に、Kubernetesデータストア(kineまたはetcd)、APIサーバー、コントローラーマネージャー、およびスケジューラーのコントロールループのサポートによって駆動されます。また、システムの状態を変更するために必要な管理タスクも含まれます。Kubernetesコントロールプレーンに追加の負荷をかける操作(リソースの作成/変更/削除など)は、一時的な利用のスパイクを引き起こします。Rancherや他のオペレータータイプのアプリケーションなど、Kubernetesデータストアを広範に使用するオペレーターやアプリを使用すると、サーバーのリソース要件が増加します。追加のノードを追加したり、多くのクラスターリソースを作成したりすることで、サーバーのリソース要件が増加します。

K3sエージェントの利用数値は主に、コンテナライフサイクル管理コントロールループのサポートによって駆動されます。イメージの管理、ストレージのプロビジョニング、コンテナの作成/破棄を含む操作は、一時的な利用のスパイクを引き起こします。特にイメージのプルは、イメージコンテンツをディスクに解凍するため、通常は高いCPUおよびIO負荷がかかります。可能であれば、ワークロードストレージ(ポッドの一時ストレージおよびボリューム)は、エージェントコンポーネント(/var/lib/rancher/k3s/agent)から分離して、リソースの競合が発生しないようにするべきです。

エージェントとワークロードがクラスターのデータストアに干渉しないようにする方法

サーバーがワークロードポッドもホストしている環境で実行する場合、エージェントおよびワークロードのIOPSがデータストアに干渉しないように注意する必要があります。

これを最も効果的に達成する方法は、サーバーコンポーネント(/var/lib/rancher/k3s/server)をエージェントコンポーネント(/var/lib/rancher/k3s/agent)とは異なるストレージメディアに配置することです。エージェントコンポーネントにはcontainerdイメージストアが含まれます。

ワークロードストレージ(ポッドの一時ストレージおよびボリューム)もデータストアから分離するべきです。

データストアのスループットおよびレイテンシ要件を満たさない場合、コントロールプレーンの応答が遅延したり、コントロールプレーンがシステム状態を維持できなくなったりする可能性があります。