第11章 Atomic Tools Container イメージの使用

11.1. 概要

Red Hat Enterprise Linux Atomic Tools Container (RHEL Tools Container) は、Red Hat Enterprise Linux Atomic (RHEL Atomic) Host のトラブルシューティングおよび調査を行うための数百のソフトウェアツールが含まれる Docker フォーマットのイメージです。RHEL Tools Container は特権コンテナーとして実行するように設計されており、これを使用すると、RHEL Atomic Host システムと直接対話して問題を明らかにし、解決することができます。RHEL Tools Container には、使用頻度の高い sosreport、kdump などのツール (その大半は RHEL Atomic に含まれていない) があります。

本書では、以下を説明します。

  • RHEL Tools Container を取得し、実行する方法
  • RHEL Tools Container の機能のしくみ
  • RHEL Tools Container で使用できるコマンドとそれらの使用方法

11.2. RHEL Tools Container の概要

RHEL Atomic は、軽量な簡易バージョンの Red Hat Enterprise Linux であり、Linux コンテナーを実行するために設定され、調整されました。軽量にすることで、デプロイ時やデプロイ後に効率的に実行できるように、消費するリソース量を最小限に抑えるようにしています。したがって RHEL Atomic は、とくにクラウド環境でコンテナーをホストするのに適しています。

Atomic のサイズを小さくしているのは、標準の RHEL システムで利用できるツールの多くが Atomic にはインストールされていないためです。さらに、Atomic には追加のソフトウェアパッケージがインストールできないようになっています (yum install favorite_RPM はサポートされていません)。

この問題は、RHEL Tools Container を RHEL Atomic システムに導入すれば解決できます。この方法は、Atomic システムを最初にデプロイした場合や、問題が発生し、トラブルシューティングに使用する追加ツールが必要になった場合に利用できます。

以下は、RHEL Tools Container に関するいくつかの注意点です。

  • サイズが大きい: コンテナーなので、サイズが非常に大きくなります (現時点では約 1GB)。これは、コンテナーに Atomic の監視やトラブルシューティングに必要なツールをできるだけ組み込む必要があるためです。通常の操作で領域の消費が問題となる場合は、必要に応じてコンテナーを Atomic システムに配置できます (ただしコンテナーを取得する場合、問題を急いで修正したい場合でもかなりの時間がかかる可能性があることに注意してください)。
  • man ページが組み込まれている: このコンテナーは、コンテナーで RHEL ドキュメントを利用する方法を提供します。man コマンドは RHEL Atomic には組み込まれていないため、RHEL Tools Container から man ページを表示することができます。さらに /usr/share/doc のすべてのコンテンツは、そのコンテナーにインストールされたすべてのパッケージ用に組み込まれます。
  • 特権を付与する: デフォルトで、コンテナーは Atomic ホストのファイルシステムまたは名前空間 (ネットワーキング、IPC、プロセステーブルなど) のほとんどを表示することはできません。しかし、RHEL Tools Container は特権付きのホストとして実行され、ホストの名前空間と機能へのアクセスを開くため、そのコンテナーから実行するほとんどのコマンドは、ホストで直接実行されているかのように、ホストで表示して動作できます。
  • 動作が異なる場合がある: コマンドをこのコンテナー内から実行すると、特権を付与した場合でも、RHEL ホストシステムから直接実行した時と動作が異なる場合があります。本書では、RHEL Tools Container に含まれる最も便利なツールの一部を説明しており、特権付きのコンテナーで実行すると、コマンドの予想される動作がどのように異なるかについて説明します。

11.3. RHEL Tools Container の取得および実行

RHEL Tools Container は RHEL Atomic Host で実行されるように設計されています。そのため、これを使う前に RHEL Atomic システムをインストールする必要があります。次に、以下の手順に従って RHEL Tools Container の取得し、ロードし、実行します。

  • RHEL Atomic Host のインストール: RHEL Atomic Host をインストールし、設定するには、ドキュメンテーションのページに一覧表示されているインストールガイドを参照してください。
  • RHEL Tools イメージの取得: RHEL Atomic Host にログインしたら、以下のように docker pull コマンドを実行して RHEL Tools Container を取得します。

    # docker pull rhel7/rhel-tools
  • RHEL Tools Container の起動: RHEL Tools Container を実行するには、atomic コマンドを使用します。以下のコマンドを実行すると、適切なオプションと共に docker コマンドを使用してコンテナーを起動できます。

    # atomic run rhel7/rhel-tools
    [root@localhost /]#

    これでシェルがコンテナー内に開き、そのコンテナー内のすべてのツールを実行できるようになりました。準備ができたら exit を実行します。次のセクションでは、RHEL Tools Container から実行する可能性のあるいくつかのコマンド例を示します。

11.4. RHEL Tools Container からのコマンドの実行

以下のセクションでは、RHEL Tools Container で利用可能なコマンドの説明と、コンテナーの内外ではコマンドの動作がどのように異なるかについて説明します。

  • blktrace: blktrace をコンテナー内で使用するには、まず debugfs ファイルシステムをマウントする必要があります。以下は、そのファイルシステムをマウントし、blktrace を実行する例です。

    # mount -t debugfs debugfs /sys/kernel/debug/
    # blktrace /dev/vda
    ^C
    === vda ===
      CPU  0:                38086 events,     1786 KiB data
      Total:                 38086 events (dropped 0),     1786 KiB data
  • sosreport: sosreport コマンドには、コンテナーを認識するための atomic プラグインが含まれます。そのため、sosreport を単純に実行し、ホストで直接実行した場合とほぼ同じ結果が得られます。コンテナー内から以下を実行できます。

    # sosreport
    Please enter your first initial and last name [localhost.localdomain]: jjones
    Please enter the case id that you are generating this report for: 12345678
    ...
    # ls /host/var/tmp
    sosreport-jjones.12345678-20150203102944.tar.xz
    sosreport-jjones.12345678-20150203102944.tar.xz.md5

    レポートはホストの /var/tmp ディレクトリーにコピーされることに留意してください。ホストの root ファイルシステムはコンテナー内の / にマウントされるため、レポートはコンテナーの /host/var/tmp ディレクトリーで利用できます。そのため、レポートはコンテナーを閉じた後も利用できます。

  • useradd: root 以外のアクティビティーを実行するユーザーをコンテナーに追加する場合は、useradd コマンドを使用してから、追加手順に従ってホームディレクトリーを作成します。

    # useradd jjones
    # su - jjones
    [jjones@example ~]$
  • strace: ホストのプロセステーブルは RHEL Tools Container から表示できるため、プロセス ID を引数として使用する多くのコマンドはコンテナー内から動作します。以下は、strace コマンドの例です。

    # ps -ef | grep ssh
    root        998      1  0 Jan29 ?        00:00:00 /usr/sbin/sshd -D
    # strace -p 998
    Process 998 attached
    select(7, [3 4], NULL, NULL, NULL ...

11.5. RHEL Tools Container を実行するためのヒント

以下は、RHEL Tools Container の実行に関連するその他の注意点です。

  • コンテナーを明示的に削除しない場合 (docker rm rhel-tools)、コンテナーは引き続きシステムに残ります。
  • コンテナーは削除されずに存在し続けるため、実行するすべての変更 (例: yum install package を実行) は、コンテナーを実行するたびに永続化します。そのため、atomic run rhel7/rhel-tools を実行してもファイルは取得されず、2 回目に実行する場合でもホストで追加のセットアップは実行されません。
  • イメージは rhel7/rhel-tools という名前で特定されますが、イメージが実行されると、実行中のインスタンスは rhel-tools という名前のコンテナーとして参照されます。コンテナーはデフォルトで削除されないため、コンテナーの名前は、停止した後でも docker ps -a を実行して確認できます。
  • rhel-tools コンテナーは削除後も保持されるため、古いバージョンを明示的に削除しないと新規バージョンのコンテナーにアップグレードすることはできません。これを実行するには、維持する必要のあるコンテナーのファイルを保存する必要があります (それらを /host の任意の場所にコピーする)。次に docker rm rhel-tools と入力します。その後に docker pull rhel7/rhel-tools を新たに実行します。
  • Atomic ホストで直接実行する必要のあるコマンドには、systemd 関連 (systemctl および journalctl)、LVM (lvmlvdisplayvgdisplay など)、atomic コマンド、およびブロックデバイスを変更するすべてのコマンドが含まれます。
  • subscription-manager コマンドは、RHEL Atomic Host および RHEL Tools Container 内の両方で使用できます。Atomic では、有効な Red Hat サブスクリプションをホストに割り当てる必要があります。コンテナーには、関連する man ページを利用可能にする subscription-manager パッケージがあります。subscription-manager コマンドはコンテナー内で実行することはできませんが、ホストのサブスクライブを行うと、コンテナー内で yum コマンドを使用してコンテナーにソフトウェアパッケージを追加したり、管理したりすることができます。
  • RHEL Tools Container に関連する問題がある場合は、bugzilla.redhat.com にバグを提出し、RFE を作成することができます。「Red Hat Enterprise Linux」製品の「rhel-tools-docker」コンポーネントを選択してください。