この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

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

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

K3sの最小リソース要件

結果は以下のように要約されます:

コンポーネント プロセッサ 最小CPU Kine/SQLiteを使用した最小RAM 組み込みetcdを使用した最小RAM

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

Intel 8375C CPU、2.90 GHz

コアの6%

1596 M

1606 M

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

Intel 8375C CPU、2.90 GHz

コアの5%

1428 M

1450 M

K3sエージェント

Intel 8375C CPU、2.90 GHz

コアの3%

275 M

275 M

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

Pi4B BCM2711、1.50 GHz

コアの30%

1588 M

1613 M

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

Pi4B BCM2711、1.50 GHz

コアの25%

1215 M

1413 M

K3sエージェント

Pi4B BCM2711、1.50 GHz

コアの10%

268 M

268 M

リソーステストの範囲

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

  • 単一ノードクラスターで、実際のワークロードがクラスターにデプロイされることを前提に、K3sスタックサーバー全体を実行するために確保すべきCPU、メモリ、IOPSの正当な最小量を決定します。

  • エージェント(ワーカー)ノードで、KubernetesおよびK3sコントロールプレーンコンポーネント(kubeletおよびk3sエージェント)に確保すべきCPU、メモリ、IOPSの正当な最小量を決定します。

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

テストされたコンポーネントは次のとおりです:

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

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

手法

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

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

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

使用状況の数値は、記載されたワークロードを実行しているノードの定常状態運転における95パーセンタイルの読み取り値に基づいています。

使用環境

アーチ OS システム CPU RAM ディスク

x86_64

Ubuntu 22.04

AWS c6id.xlarge

Intel Xeon Platinum 8375C CPU、4コア 2.90 GHz

8GB

NVME SSD

aarch64

Raspberry Pi OS 11

Raspberry Pi 4 Model B

BCM2711、4コア 1.50 GHz

8GB

UHS-III SDXC

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

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

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

これは、K3sサーバーがhttps://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/[シンプルなワークロード]とリソースを共有する単一ノードクラスターの要件です。

CPU要件は次のとおりです:

システム CPUコア使用率

Intel 8375C

コアの6%

Pi4B

コアの30%

メモリ要件は次のとおりです:

テスト済みデータストア システム メモリ

Kine/SQLite

Intel 8375C

1596 M

Pi4B

1588 M

組み込みetcd

Intel 8375C

1606 M

Pi4B

1613 M

ディスク要件は次のとおりです:

テスト済みデータストア IOPS KiB/秒 遅延

Kine/SQLite

10

500

< 10 ms

組み込みetcd

50

250

< 5 ms

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

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

K3sサーバー

CPU要件は次のとおりです:

システム CPUコア使用率

Intel 8375C

コアの5%

Pi4B

コアの25%

メモリ要件は次のとおりです:

テスト済みデータストア システム メモリ

Kine/SQLite

Intel 8375C

1428 M

Pi4B

1215 M

組み込みetcd

Intel 8375C

1450 M

Pi4B

1413 M

K3sエージェント

要件は次のとおりです:

システム CPUコア使用率 RAM

Intel 8375C

コアの3%

275 M

Pi4B

コアの5%

268 M

主要リソース利用ドライバーの分析

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

K3sエージェントの利用状況は、主にコンテナライフサイクル管理制御ループのサポートによって推進されています。イメージの管理、ストレージのプロビジョニング、またはコンテナの作成/削除を含む操作は、一時的な利用状況の急増を引き起こします。特にイメージのプルは、イメージコンテンツをディスクに解凍するため、通常はCPUとIOに強く依存します。可能であれば、ワークロードストレージ(ポッドの一時ストレージとボリューム)は、エージェントコンポーネント(/var/lib/rancher/k3s/agent)から隔離され、リソースの競合がないことを確認する必要があります。

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

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

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

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

データストアのスループットとレイテンシ要件を満たさない場合、制御プレーンからの応答が遅れる可能性があり、または制御プレーンがシステム状態を維持できなくなるエラーが発生する可能性があります。

K3sのためのサーバーサイズ要件。

使用環境

  • すべてのエージェントはt3.mediumのAWS EC2インスタンスでした。

    • 単一のエージェントはc5.4xlargeインスタンスでした。これにより、Grafanaモニタリングスタックがホストされ、制御プレーンリソースに干渉するのを防ぎました。

  • サーバーはc5のAWS EC2インスタンスでした。エージェントの数が増えるにつれて、サーバーはより大きなc5インスタンスにアップグレードされました。

手法

このデータは特定のテスト条件下で取得されました。環境やワークロードによって異なる場合があります。以下の手順は、これを取得するために実行されたテストの概要を示しています。これはv1.31.0+k3s1で最後に実行されました。すべてのマシンは、標準の20 GiB gp3ボリュームでAWSにプロビジョニングされました。テストは以下の手順で実施されました:

  1. Prometheusデータソースを使用してGrafanaでリソースを監視します。

  2. 継続的なクラスター活動をシミュレートするようにワークロードをデプロイします:

    • 継続的にスケールアップおよびスケールダウンする基本的なワークロード

    • ループ内で削除され再作成されるワークロード

    • CRDを含む複数のリソースを持つ一定のワークロード。

  3. エージェントノードを一度に50~100台ずつ参加させます。

  4. サーバーのCPU使用率がエージェント参加時に90%を超えた場合、またはRAM使用率が80%を超えた場合は、エージェントの追加を停止します。

観察結果

  • エージェントを参加させる際、サーバーのCPUはベースラインを約20%上回るスパイクを示しました。

  • 通常、制限要因はCPUであり、RAMではありませんでした。ほとんどのテストでは、CPUが90%の使用率に達したとき、RAMの使用率は約60%でした。

高可用性(HA)に関する注意事項

各テストの終了時に、2台の追加サーバーが参加し(基本的な3ノード HA クラスターを形成)、これが元のサーバーリソースに与える影響を観察しました。その影響は:

  • CPU使用率が顕著に低下し、通常は30〜50%でした。

  • RAMの使用率は変わりませんでした。

テストは行われていませんが、単一のサーバーでCPU使用率が制限要因である場合、3ノードHAクラスターで参加できるエージェントの数は約50%増加すると予想されます。