|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
リソースプロファイリング
このセクションでは、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の正当な最小量を決定します。
ベースライン測定に含まれるコンポーネント
テストされたコンポーネントは次のとおりです:
-
すべてのパッケージ済みコンポーネントが有効なK3s v1.26.5
-
Prometheus + Grafana監視スタック
これらは、標準の監視スタック(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サーバの利用状況は、主に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にプロビジョニングされました。テストは以下の手順で実施されました:
-
Prometheusデータソースを使用してGrafanaでリソースを監視します。
-
継続的なクラスター活動をシミュレートするようにワークロードをデプロイします:
-
継続的にスケールアップおよびスケールダウンする基本的なワークロード
-
ループ内で削除され再作成されるワークロード
-
CRDを含む複数のリソースを持つ一定のワークロード。
-
-
エージェントノードを一度に50~100台ずつ参加させます。
-
サーバーのCPU使用率がエージェント参加時に90%を超えた場合、またはRAM使用率が80%を超えた場合は、エージェントの追加を停止します。