コンテナリソースの可視性を高めるために、Alibaba Cloud Linux 2ではカーネルバージョン4.19.91-22.2.al7
から、Alibaba Cloud Linux 3ではカーネルバージョン5.10.46-7.al8
から、コンテナリソース可視化機能のカーネルインターフェイスが提供されています。 このトピックでは、インターフェイスについて説明し、インターフェイスの使用方法の例を示します。
背景情報
デフォルトでは、Alibaba Cloud Linuxのコンテナーリソース可視化機能は無効になっています。 この機能を有効にした後、コンテナでtopやfreeなどのコマンドを実行して次のインターフェイスからデータを読み取ると、コンテナが存在するElastic Compute Service (ECS) インスタンスのリソース情報ではなく、コンテナのリソース情報が返されます。
/proc/cpuinfo
/proc/meminfo
/sys/devices/system/cpu /オンライン
インターフェイス
インターフェイス | 説明 |
/proc/sys/kernel/rich_container_enable | コンテナーリソースの視覚化機能を有効にするかどうかを指定します。 有効な値:
デフォルト値:0 |
/proc/sys/kernel/rich_container_source | cgroupインターフェイスのデータソース。 有効な値:
デフォルト値:0 |
/proc/sys/kernel/rich_container_cpuinfo_source | /proc/cpuinfoおよび /sys/devices/system/cpu/onlineインターフェイスに表示される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インスタンスのリソース情報が表示されます。
Linuxインスタンスでecho 1 > /proc/sys/kernel/rich_container_enableコマンドを実行してコンテナリソースの視覚化機能を有効にし、コンテナでfree -mコマンドを実行すると、次の図に示すように、コンテナのリソース情報が表示されます。
特別なシナリオ
ほとんどの場合、コンテナーリソースの視覚化機能を有効にすると、インターフェイスのデフォルト値はビジネス要件を満たすことができます。 ただし、次のシナリオでは、インターフェイスの設定に注意する必要があります。
プロセス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がデータソースとして使用されます。 この場合、有効なデータが返されます。