25.7. Google Compute Engine での Red Hat Enterprise Linux Atomic Host の使用

Google Compute Engine (GCE) は、Google インフラストラクチャー上で稼働する仮想マシンを提供するサービスです。このセクションでは、Red Hat Enterprise Linux Atomic Host を GCE で稼働する方法について説明します。

25.7.1. 概要

Red Hat Enterprise Linux Atomic Host は、Docker エンジンを使用して実行される Linux コンテナー向けに最適化された Red Hat Enterprise Linux 7 のバリエーションで利用可能な強力なテクノロジーを活用するように設計されています。Google Compute Engine (GCE) は、Google インフラストラクチャー上で稼働する仮想マシン (VM) を提供するサービスです。これらの仮想マシンを使用して、Red Hat Enterprise Linux Atomic Host を稼働できます。
本セクションでは、Red Hat Enterprise Linux Atomic Host の仮想マシンインスタンスを GCE 上で起動する方法について説明します。Red Hat Enterprise Linux Atomic Host についての包括的な概要および情報については、Red Hat Enterprise Linux Atomic Host スタートガイド を参照してください。
興味がある場合は、以下の追加情報を参照してください。
  1. Red Hat Enterprise Linux Atomic Host スタートガイド - このドキュメントでは Red Hat Enterprise Linux Atomic Host の概要と使用方法について説明しています。

25.7.2. Google Compute Engine の有効化

25.7.2.1. プロジェクト作成および課金設定

以下のステップでプロジェクトを作成し、Google Compute Engine 向けの課金を設定します。
  1. ご自分の Google アカウントにログインし、https://console.developers.google.com/project にある Google Developers Console に移動します。Developers Console では、利用可能なプロジェクトが一覧表示されます。
  2. 有効にするプロジェクトを選択します。新規プロジェクトを作成する場合は、赤字の Create Project ボタンをクリックします。プロジェクト名と ID を選択するようプロンプトが出ます。プロジェクトが特定のドメインに属する場合は、プロジェクト ID は \<domain\>:\<your-chosen-project-id\> という形式になります。プロジェクトのダッシュボードに移動します。
  3. Google Compute Engine をアクティベートするには、右側のバーにある Billing & Settings メニューアイテムをクリックして課金を設定します。次に Enable Billing をクリックします。表示されるフォームに記入します。サービスが使用可能となる前に、Google Compute Engine が課金を設定するようプロンプトが出ます。課金をアクティベートしないと Google Compute Engine は利用可能になりません。アクティベートしてからアカウントの準備ができるまでに 5 分程度かかることに留意してください。

25.7.2.2. GCE ツールのダウンロードとセットアップ

Google Compute Engine のリソースを管理するには、まず gcloud コマンドラインツールをダウンロードしてインストールします。
  1. 以下のコマンドを実行して Google Cloud SDK をインストールします。
    $ curl https://sdk.cloud.google.com | bash
  2. インストール中には何度か必要な情報の入力を求められます。まず、Google Cloud SDK の送信先ディレクトリーを特定するようプロンプトが出ます。
    Directory to extract under (this will create a directory google-cloud-sdk) (/home/user):
    
  3. 次に Google への使用量レポートを有効にするかどうかを聞かれます。Google はこのデータを使用してツールの改善を図ります。
  4. 次に Google Cloud SDK がインストールされます。インストールされると、プロファイル設定のためのプロンプトが出ます。rc ファイルの指定、$PATH 変数の変更、bash completion の有効化などができます。これらのプログラムを $PATH 変数に追加すると、それらの完全パスを提供せずにプログラムの実行が可能になります。bash completion を有効にすると、複数の引数で構成されるコマンドの入力が容易になります。
  5. 端末を再起動して PATH への変更を反映させます。例を示します。
    $ source ~/.bash-profile-file
  6. bash-profile-file をご自分の bash プロファイルファイルへのパスで置き換えます。これは通常、~/.bashrc ファイルになります。

25.7.2.3. GCE への認証

Google Cloud プラットフォームへの認証には、以下を実行します。
$ gcloud auth login
上記のコマンドを実行すると、ご自分の Google アカウントのサインアップダイアログがブラウザで起動します。サインインして続行します。サインインのプロセス中に、Google Compute Engine がご自分の Google Account についての情報にアクセスすることを許可する必要があります。--no-launch-browser オプションを使用するとブラウザーを起動せずに認証することができます。詳細は、https://cloud.google.com/compute/docs/gcloud-compute/#auth を参照してください。

25.7.2.4. プロジェクトのデフォルト設定

`gcloud config set default default_value` のコマンドテンプレートを使用してプロジェクトのデフォルト値を設定すると、よく使用されるフラグ向けのコマンドオプションをすべてのコマンドで渡す必要がなくなります。現在のデフォルト値を一覧表示するには、`gcloud config list` を実行します。`gcloud config unset default` のテンプレートを実行するとプロジェクトのデフォルト値が削除されます。
デフォルトのプロジェクトを設定するには、以下のコマンドを実行します。
$ gcloud config set project project_id
project_id は、プロジェクト作成および課金設定 で作成したプロジェクトの ID になります。
デフォルトのゾーンを設定するには、以下のコマンドを実行します。
$ gcloud config set compute/zone zone
zone は、使用するインスタンスがライブとなる地理的場所になります。使用可能なゾーン一覧については、https://developers.google.com/compute/docs/zones#available を参照してください。

25.7.3. Red Hat Enterprise Linux Atomic Host インスタンスの開始

Red Hat Enterprise Linux Atomic Host イメージは GCE で使用する前に、qcow2 ファイルから RAW イメージに変換する必要があります。これは、qcow2 ファイルをダウンロードして、tar ファイルに変換することで行います。このファイルが GCE にアップロードされ、インスタンスが作成されます。

25.7.3.1. Red Hat Enterprise Linux Atomic Host RAW ファイルの作成

GCE にアップロード可能な RAW ファイルを作成するには、以下のステップを実行します。
  1. 1章Red Hat Enterprise Linux のダウンロード にあるように、Red Hat Enterprise Linux Atomic Host qcow2 ファイルを Red Hat カスタマーポータルからダウンロードします。
  2. qcow2 イメージは xz に圧縮されています。イメージを解凍するには、以下のコマンドを実行します。
    $ xz -d rhel-atomic-cloud-7.1-0.x86_64.qcow2.xz
  3. qcow2 イメージを GCE で使用するには、RAW ディスクファイルに変換する必要があります。qemu でこれを実行します。
    $ qemu-img convert -S 4096 -f qcow2 -O raw rhel-atomic-cloud-7.1-0.x86_64.qcow2 disk.raw
  4. raw ディスクファイルは、GCE にアップロードする前に tar でパッケージ化する必要があります。raw ファイルは、disk.raw という名前にします。
    $ tar -Szcf rhel-atomic-cloud-7.1-0.x86_64.tar.gz disk.raw
  5. アップロードされた raw ディスクファイルは、Google Cloud Storage のバケットに保存されます。バケットが作成されていない場合は、gsutil で作成できます。
    $ gsutil mb gs://bucketname
  6. gsutil を使って raw ディスクファイルをアップロードします。
    $ gsutil cp rhel-atomic-cloud-7.1-0.x86_64.tar.gz gs://bucketname
  7. raw ディスクファイルは、使用可能になる前に GCE イメージとして作成される必要があります。
    $ gcloud compute images create GCE_IMAGE_NAME --source-uri gs://bucketname/rhel-atomic-cloud-7.1-0.x86_64.tar.gz
  8. gcloud compute images list の出力で、イメージがアップロードされていること、また利用可能になっていることを確認できます。

25.7.3.2. Red Hat Enterprise Linux Atomic Host インスタンスの作成

Atomic Host インスタンスを作成するには、以下のコマンドを実行します。
$ gcloud compute instances create my-atomic-instance --machine-type n1-standard-1 --image GCE_IMAGE_NAME --metadata-from-file startup-script=<your-statup-script>
ここで、
my-atomic-instance は、この例におけるインスタンス名になります。インスタンス名には、英語の小文字、数字、およびダッシュ (最後の文字には不可) のみが使用できます。
--machine-type では、希望するマシンタイプを設定します。マシンタイプは、メモリー、仮想コアの数、およびインスタンスに備わる永続的ディスクの制限値を決定します。詳細は、https://developers.google.com/compute/docs/machine-types を参照してください。
--image では使用するイメージを指定します。イメージにはオペレーティングシステムと、インスタンスの開始に必要となる root ファイルシステムが含まれます。GCE は、root ファイルシステムを保存する root の永続的ディスクを自動的に作成します。GCE_IMAGE_NAME は前のステップで作成したイメージになります。
--metadata-from-file では、ローカルのメタデータサーバー経由でインスタンス環境で利用可能とするメタデータを指定します。このフラグは、Red Hat Enterprise Linux Atomic Host インスタンスの初回起動時に自動的に実行されるスクリプトを指定します。詳細情報は、「インスタンス作成のカスタムスクリプトの実行」 を参照してください。user-data キーは必須で、カスタムキーで置換できないことに留意してください。これは、Red Hat Enterprise Linux Atomic Host インスタンスのスタートアップスクリプトが GCE エージェントではなく、cloud-init ユーティリティーで処理されるためです。

注記

このコマンドは、インスタンスが稼働するまでブロックします。インスタンスは最初に作成されると、起動して自己設定を行う必要があります。これには多少時間がかかり、しばらくインスタンスにログインできない場合があります。

25.7.3.3. インスタンス作成のカスタムスクリプトの実行

上記の説明にあるように、インスタンス作成時には --metadata-from-file オプションを使って、インスタンスの初回起動時に実行するカスタムスクリプトを指定できます。このスクリプトからは root パーミッションでコマンドが実行されるので、必要なシステムコマンドはどんなものでも実行することができます。例を示します。
--metadata-from-file startup-script=<your-startup-script>
以下のコンテンツの startup.sh スクリプトを呼び出します。
#! /bin/sh
touch newfile
この行は、newfile と呼ばれる新規ファイルを作成します。

注記

Red Hat Enterprise Linux Atomic Host インスタンスの初回実行スクリプトは、GCE エージェントではなく、cloud-init ユーティリティーで処理されます。このため、--metadata-from-file ではカスタムキーを使用できません。Red Hat Enterprise Linux Atomic Host インスタンスのカスタムスクリプトを設定する際には、常に user-data キーを使用してください。
ローカルに保存する初回実行スクリプトの代わりとして、自分のスクリプトを Google Cloud Storage にアップロードし、--metadata オプションでこれにアクセスすることもできます。スクリプトがメタデータ値の長さの上限である 32,768 バイトを超える場合には、これが必要になります。詳細は、http://developers.google.com/compute/docs/howtos/startupscript#googlecloudstorage を参照してください。

25.7.4. Red Hat Enterprise Linux Atomic Host インスタンスへのログイン

gcloud ツールにはビルトインの ssh コマンドがあり、これによりインスタンス名を使用してインスタンスにログインすることができます。
インスタンスにログインするには、以下のコマンドを実行します。
$ gcloud compute ssh cloud-user@my-atomic-instance
ここでの cloud-user は、デフォルトのユーザー名です。SSH キーを作成していない場合は、その作成を求められます。詳細は 「SSH キー保護のためのパスワード」 を参照してください。

注記

セキュリティーのために、標準の Google イメージは root で直接 SSH を使用して接続する機能を提供していません。インスタンスの作成者と、--authorized_ssh_keys フラグまたはメタデータ sshKeys の値を使用して追加されたユーザーは自動的にアカウントの管理者となり、パスワードなしで sudo を実行する機能が付与されます。これは推奨されるものではありませんが、上級ユーザーは /etc/ssh/sshd_config を編集し、sshd を再起動することでこのポリシーを変更できます。

警告

GNOME ユーザーは、SSH で GCE インスタンスに接続しようとすると、以下のメッセージが表示される場合があります。
Agent admitted failure to sign using the key
これは、GNOME キーリング管理が間違った SSH キーの使用を試みているために発生するものです。詳細は、「既知の問題」 を参照してください。
ログインしたら、他の Red Hat Enterprise Linux マシンと同様に作業ができます。自分のインスタンス上では root パーミッションがあり、すべてのことについて完全な制御ができます。root になるには、以下を実行します。
cloud-user@my-atomic-instance$ sudo -i
インスタンスからログアウトするには、以下のコマンドを実行します。
cloud-user@my-atomic-instance$ exit
Red Hat Enterprise Linux Atomic Host のインストールが完了したら、Linux コンテナーの実行ができます。Red Hat Enterprise Linux Atomic Host の設定およびメンテナンスについての詳細情報は、 Red Hat Enterprise Linux Atomic Host スタートガイド の記事を参照してください。Linux コンテナーの設定方法については、Red Hat システムにおける Docker フォーマットのコンテナーイメージの使用ガイド を参照してください。

25.7.4.1. SSH キー保護のためのパスワード

SSH を使って最初にインスタンスにログインする際には、gcloud はローカルマシン上に ssh 公開/秘密のキーペアを作成し、公開キーをプロジェクトにコピーします。これらのキーは、ssh を使ってインスタンスにログインする際に必要となります。これらのキーの初回作成時には、gcutil はパスフレーズの入力、確認を要求します。
WARNING: You don't have an ssh key for Google Compute Engine. Creating one now...
Enter passphrase (empty for no passphrase):
パスフレーズは空白とすることもできますが、SSH キーを保護するためにパスフレーズを入力することが強く推奨されます。パスフレーズの入力はほとんど求められませんが、キーをパスワード保護しないと、悪意のあるユーザーがキーを使用してインスタンスにアクセスすることが可能となってしまいます。

25.7.5. Red Hat Enterprise Linux Atomic Host インスタンスの監視

Google Cloud SDK では、インスタンスのパラメーターを監視するいくつかの方法があります。現在の gcloud 環境に関する全般的な情報を表示するには、以下を実行します。
$ gcloud info
特定インスタンスについての詳細情報を表示するには、describe コマンドを実行します。
$ gcloud compute instances describe my-atomic-instance
canIpForward: false
creationTimestamp: '2014-11-11T02:15:58.372-08:00'
disks:
- autoDelete: true
  boot: true
  deviceName: persistent-disk-0
  index: 0
  interface: SCSI
  kind: compute#attachedDisk
  mode: READ_WRITE
  source: https://www.googleapis.com/compute/v1/projects/eighth-saga-761/zones/europe-west1-b/disks/my-atomic-instance2
  type: PERSISTENT
id: '6632858316955862880'
kind: compute#instance
machineType: https://www.googleapis.com/compute/v1/projects/eighth-saga-761/zones/europe-west1-b/machineTypes/n1-standard-1
metadata:
  fingerprint: owFsCDPRlkY=
  kind: compute#metadata
name: my-atomic-instance2
networkInterfaces:
- accessConfigs:
  - kind: compute#accessConfig
	name: external-nat
	natIP: 23.251.142.75
	type: ONE_TO_ONE_NAT
  name: nic0
  network: https://www.googleapis.com/compute/v1/projects/eighth-saga-761/global/networks/default
  networkIP: 10.240.184.150
scheduling:
  automaticRestart: true
  onHostMaintenance: MIGRATE
selfLink: https://www.googleapis.com/compute/v1/projects/eighth-saga-761/zones/europe-west1-b/instances/my-atomic-instance2
serviceAccounts:
- email: 464767924601-compute@developer.gserviceaccount.com
  scopes:
  - https://www.googleapis.com/auth/devstorage.read_only
status: RUNNING
tags:
  fingerprint: 42WmSpB8rSM=
zone: https://www.googleapis.com/compute/v1/projects/eighth-saga-761/zones/europe-west1-b
Red Hat Enterprise Linux Atomic Host インスタンスのシリアルポートからデータを取得するには、以下を実行します。
$ gcloud compute instances get-serial-port-output my-atomic-instance
このコマンドを実行すると、GCE インスタンスのシリアルポートの出力が返されます。このコマンドでは、インスタンスにログインすることなくインスタンスの情報が取得できるので、診断目的の場合に役立ちます。

25.7.5.1. インスタンスの外部 IP アドレス

デフォルトでは、インスタンスには短期の外部 IP アドレスが新規に割り当てられます。このアドレスは、上記の gcutil getinstance の出力で他の情報とともに表示されます。別の方法では、以下のコマンドを入力すると全インスタンスのアドレスを確認できます。
$ gcloud compute instances list
NAME                ZONE           MACHINE_TYPE  INTERNAL_IP    EXTERNAL_IP   STATUS
my-atomic-instance  us-central1-a  n1-standard-1 10.240.184.150 23.251.142.75 RUNNING

25.7.6. ファイアウォールのルール作成

デフォルトでは、Google Compute Engine はインスタンスとインターネット間の全接続をブロックします。httpd のようなサービスのためにポートを開くには、手動でファイアウォールのルールを作成する必要があります。プロジェクトはすべて、以下の 3 つのデフォルトのファイアウォールが備わっています。
  1. 全インスタンスへの SSH アクセスを許可するファイアウォール。
  2. 同一ネットワーク内のインスタンス間の全通信を許可するファイアウォール。
  3. ネットワーク上のすべてのソースからインスタンスへの ICMP トラフィックを許可するファイアウォール。
たとえば、インスタンスへの HTTP リクエストを許可するには、以下の gcutil コマンドを使用して新規ファイアウォールを作成します。
$ gcloud compute firewall-rules create http-allow --allow tcp:80
上記のコマンドを実行すると、以下のことが実行されます。
  1. ポート 80 tcp のトラフィックを許可する http-allow という名前の新規ファイアウォールが作成される。
  2. プロジェクトのデフォルトのネットワークにファイアウォールが割り当てられる。
  3. (インターネット上を含む) ネットワーク内外の全ソースによるサーバーへのリクエストが許可される。ファイアウォールで許可されるソースを指定しなかったので、デフォルトネットワークに割り当てられたインスタンスにすべてのソースからリクエストすることが許可されます。
  4. このファイアウォールルールがネットワーク上の全インスタンスに適用される。ファイアウォールのターゲットを指定しなかったので、ファイアウォールはこのルールをネットワーク内の全インスタンスに適用します。
ファイアウォールの情報を確認するには、以下を実行します。
$ gcloud compute firewall-rules list
NAME                   NETWORK SRC_RANGES    RULES                        SRC_TAGS TARGET_TAGS
default-allow-icmp     default 0.0.0.0/0     icmp
default-allow-internal default 10.240.0.0/16 tcp:1-65535,udp:1-65535,icmp
default-allow-rdp      default 0.0.0.0/0     tcp:3389
default-allow-ssh      default 0.0.0.0/0     tcp:22
http-allow             default 0.0.0.0/0     tcp:80
適切な addfirewall フラグを使用するとソースとターゲットを特定の呼び出し元とインスタンスに制限することができます。サポートされるフラグの完全一覧を確認するには、gcutil help addfirewall コマンドを実行するか、https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/ を参照してください。
ファイアウォールはインスタンスへの受信トラフィックを制限するだけで、送信パケットはブロックできません。インスタンスとの接続が確立されてしまうと、その接続上でのトラフィックは双方向で許可されます。インスタンスによるパケット送信を防ぐには、iptables といった別のテクノロジーを使用します。

注記

デフォルトでは、GCE は 10 分間アクテビティーがないと、インスタンスへの TCP 接続を切断します。これを防ぐには、https://developers.google.com/compute/docs/troubleshooting#communicatewithinternet にあるように TCP キープアライブを設定します。

25.7.7. Red Hat Enterprise Linux Atomic Host インスタンスの削除

my-atomic-instance を削除するには、以下のコマンドを実行します。
$ gcloud compute instances delete my-atomic-instance
インスタンスの削除前に、再確認が求められます。インスタンスの削除には、数秒かかる場合があります。再確認のダイアログの一部で、gcloud は別のインスタンスが使用していない場合は、ディスクも削除されることをお知らせします。

25.7.8. 既知の問題

以下は、GCE 環境の rhel-atomic-host-20141111 に固有の既知の問題です。
  1. エラーメッセージ
    Agent admitted failure to sign using the key
    gcutil ssh の実行中に上記のエラーメッセージが表示されます。
    GNOME キーリング管理は、GCE インスタンスへの接続時に間違った SSH キーの使用を試みることがあります。この問題を回避するには、gcutil 実行前に以下のコマンドを実行します。
    $ ssh-add ~/.ssh/google_compute_engine
Red Hat Enterprise Linux Atomic に関連する既知の問題全般については、Red Hat Enterprise Linux Atomic Host スタートガイド を参照してください。