すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:コンテナリソースの可視性を高める

最終更新日:Jul 10, 2024

コンテナリソースの可視性を高めるために、Alibaba Cloud Linux 2ではカーネルバージョン4.19.91-22.2.al7から、Alibaba Cloud Linux 3ではカーネルバージョン5.10.46-7.al8から、コンテナリソース可視化機能のカーネルインターフェイスが提供されています。 このトピックでは、インターフェイスについて説明し、インターフェイスの使用方法の例を示します。

背景情報

デフォルトでは、Alibaba Cloud Linuxのコンテナーリソース可視化機能は無効になっています。 この機能を有効にした後、コンテナでtopfreeなどのコマンドを実行して次のインターフェイスからデータを読み取ると、コンテナが存在するElastic Compute Service (ECS) インスタンスのリソース情報ではなく、コンテナのリソース情報が返されます。

  • /proc/cpuinfo

  • /proc/meminfo

  • /sys/devices/system/cpu /オンライン

インターフェイス

インターフェイス

説明

/proc/sys/kernel/rich_container_enable

コンテナーリソースの視覚化機能を有効にするかどうかを指定します。 有効な値:

  • 0: コンテナーリソースの視覚化機能を無効にします。

  • 1: コンテナーリソースの視覚化機能を有効にします。

デフォルト値:0

/proc/sys/kernel/rich_container_source

cgroupインターフェイスのデータソース。 有効な値:

  • 0: 現在のポインタが存在するcgroup。

  • 1: 子リーパ (現在のPID名前空間のプロセス1) が存在するcgroup。

デフォルト値:0

/proc/sys/kernel/rich_container_cpuinfo_source

/proc/cpuinfoおよび /sys/devices/system/cpu/onlineインターフェイスに表示されるcpuの数。 有効な値:

  • 0: Kubernetesのリミット値。 この値は、CPU cgroupのquota値とperiod値の比 (quota/period) に等しくなります。 クォータ値が-1の場合、cpuset.cpusインターフェイスのCPUデータソースが使用されます。

  • 1: cpuset.cpusインターフェイスのCPUデータソース。

  • 2: cpu.shares値を /proc/sys/kernel/rich_container_cpuinfo_sharesbase値で割った値の結果を切り上げて得られる整数。 たとえば、cpu.shares値を /proc/sys/kernel/rich_container_cpuinfo_sharesbase値で割った結果が1.1の場合、最終値は2になります。 最終値は、使用可能なCPUの数を超えることはできません。

デフォルト値:0

/proc/sys/kernel/rich_container_cpuinfo_sharesbase

/proc/sys/kernel/rich_container_cpuinfo_sourceインターフェイスが2に設定されている場合、このインターフェイスを数式の一部として使用して、最終値を取得します。 値は2以上の整数である必要があります。

デフォルト値: 1024。

この例では、DockerはLinuxインスタンスにデプロイされ、1 GBのメモリを持つコンテナがインスタンスに作成されます。

  • コンテナーリソースの視覚化機能が無効になっている場合、/proc/sys/kernel/rich_container_enableインターフェイスの値は0になります。 次の図に示すように、コンテナでfree -mコマンドを実行すると、コンテナが存在するLinuxインスタンスのリソース情報が表示されます。free

  • Linuxインスタンスでecho 1 > /proc/sys/kernel/rich_container_enableコマンドを実行してコンテナリソースの視覚化機能を有効にし、コンテナでfree -mコマンドを実行すると、次の図に示すように、コンテナのリソース情報が表示されます。free

特別なシナリオ

ほとんどの場合、コンテナーリソースの視覚化機能を有効にすると、インターフェイスのデフォルト値はビジネス要件を満たすことができます。 ただし、次のシナリオでは、インターフェイスの設定に注意する必要があります。

プロセスID (PID) 名前空間が共有されていないポッドの場合、各コンテナは独立したPID名前空間です。 systemdコマンドを実行して特権コンテナを起動し、コンテナプロセスがプロセス1の場合、モニタリングデータを収集するタスクは、コンテナのルートcgroupではなく、子cgroupで実行されます。

たとえば、SSHキーペアを使用してコンテナーにログインし、cat /proc/cpuinfoコマンドを実行すると、次のいずれかのシナリオが発生する可能性があります。

  • コマンドの実行時に /proc/sys/kernel/rich_container_sourceインターフェイスが0に設定されている場合、現在のポインターは、コンテナ内のsshd.serviceによって作成された子cgroupにあります。 この場合、エラーデータが返されます。

  • echo 1 > /proc/sys/kernel/rich_container_sourceコマンドを実行すると、子リーパーが存在するcgroupがデータソースとして使用されます。 この場合、有効なデータが返されます。