Red Hat Enterprise Linux Atomic Tools Container イメージの使用ガイド

更新 -

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

このガイドでは、以下について説明します。

  • RHEL Tools Container を取得して実行する方法
  • RHEL Tools Container がどのように機能するか
  • RHEL Tools Container で使用できるコマンドと、その使用方法

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 に含まれる最も便利なツールの一部を説明しており、特権のあるコンテナーで実行すると、予想される動作がどのように異なるかについて説明します。

RHEL Tools Container を取得して実行する

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

  1. RHEL Atomic Host をインストールする。RHEL Atomic ホストをインストールして設定する方法については、Red Hat Enterprise Linux Atomic Host Documentation ページに登録されているインストールガイドを参照してください。

  2. RHEL Tools イメージを取得する。RHEL Atomic ホストにログインしたら、以下のように docker pull コマンドを実行して RHEL Tools Container を取得します。

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

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

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

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
    useradd: cannot set SELinux context for home directory /home/jjones
    # mkdir /home/jjones
    # chown jjones:jjones /home/jjones
    # su - jjones
    -bash-4.2$ 
    
  • 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 ...
    

RHEL Tools Container を実行する際の注意点

ここでは、RHEL Tools コンテナーの実行に関するその他の注意点について説明します。

  • コンテナーを (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 ホストおよび 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" コンポーネントを選択してください。