Cloud-init

提供: ArchWiki
2015年12月31日 (木) 23:09時点におけるKusakata (トーク | 投稿記録)による版 (空白の削除)
ナビゲーションに移動 検索に移動

Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。OpenStackAWS などのクラウドで起動するための Arch Linux イメージに入れる必要があります。

インストール

公式リポジトリ から cloud-init をインストールします。

設定

クラウド用の Arch のイメージを準備するためには、いくつかのステップが必要になります:

  • デフォルトユーザーを作成する。このユーザーでインスタンスにログインすることになります。ここでは arch というユーザーを作成します。
  • sudo をインストールし、デフォルトユーザーを sudo グループに追加します。これでスーパーユーザーとしてコマンドを実行できるようになります。
  • デフォルトユーザーがパスワードなしで sudo できるようにします。
  • インスタンスのメタ情報を引き出せるように cloud-init を設定します。以下のことが含まれますが、これだけに限られるわけではありません:
    • hostname をセットする
    • resolv.conf をセットする
    • デフォルトユーザーの ~/.ssh/authorized_keys をセットする

cloud-init のメイン設定ファイルは /etc/cloud/cloud.cfg です。/etc/cloud/cloud.cfg.d*.cfg ファイルを 置くと、これらも読み込まれます。

デフォルトユーザーの設定

/etc/cloud/cloud.cfg を編集して以下のようにします:

users:
  - default

これによって system_info > default_user のユーザーがデフォルトユーザーになります。

system_info:
   distro: arch
   default_user:
     name: arch 
     lock_passwd: True
     gecos: Arch
     groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
     sudo: ["ALL=(ALL) NOPASSWD:ALL"]
     shell: /bin/bash

system_info の中でディストロを "arch" と指定しています。これによって設定に arch.py が使われるようになります。さらに以下の設定をしています:

  • デフォルトユーザーの名前を arch にする
  • デフォルトユーザーのパスワードをロックする。これによって起動時に設定した SSH 鍵なしにログインできなくなる。
  • デフォルトユーザーをグループ adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video に追加する
  • デフォルトユーザーをパスワードなしで sudo できるようにする
  • デフォルトユーザーのシェルを /bin/bash にする

root でのログインを禁止する

/etc/cloud/cloud.cfg で次のように指定します:

disable_root: true

また、root ユーザーのパスワードを削除することもできます:

# passwd -d root

前のセクションでの設定が正しく動作することを確認できていない限り、これは実行しないでください。そうしないとインスタンスから完全に閉めだされてしまいます。

データソースの設定

データソースは、起動時にどのようにインスタンスのメタ情報を引き出すかを定義します。これはどのクラウド (OpenStack, AWS, OpenNebula など) を使うかによります。内部では、これは共通のインターフェイスで定義されたいくつかのメソッドを実装しているモジュールに対応します。/etc/cloud/cloud.cfg を編集して以下のようにしてください:

datasource_list: [ NoCloud, ConfigDrive, OpenNebula, Azure, AltCloud, OVF, MAAS, GCE, OpenStack, CloudSigma, Ec2, CloudStack, None ]

これによって、インスタンスのメタ情報をダウンロードするときにどのモジュールを使うかを指定します。状況に応じて、以下のように各データソースごとのパラメータを渡すこともできます:

datasource:
  OpenStack:
    metadata_urls: [ 'http://169.254.169.254:80' ]
    dsmode: net

上記の設定は、OpenStack データソースの場合に http://169.254.169.254:80 からメタデータをダウンロードするようにし、ネットワーク初期化の後に実行させるようにします。これはどちらもデフォルトの挙動であり、省略できます。

cloud.cfg の他のセクション

cloud.cfg には他にもいくつかのセクションがあり、 cloud_init_modules, cloud_config_modules, cloud_final_modules などを含んでいます。これらはインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。

これらのモジュールは /usr/lib/python2.7/site-packages/cloudinit/config/ から動的にロードされ、起動時に実行されます。 独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:

  • ディスクをリサイズする
  • パッケージをアップデートする

Systemd との統合

cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供します。これらが以下の順番で起動するように依存関係が構築されます:

  • cloud-init-local.service。ファイルシステムが立ち上がっていることを要求するだけ。cloud-init init --local を実行する。
  • cloud-init.service。ネットワークが起動することを要求する。cloud-init init を実行する。
  • cloud-config.target。Corresponds to the cloud-config upstart event "to inform third parties that cloud-config is available"
  • cloud-config.service. cloud-init modules --mode=config を実行する。
  • cloud-final.service. cloud-init modules --mode=final を実行する。

Uplink Labs EC2 images は上記の全てを有効にしています。もっともこれは依存関係のせいでやりすぎになっているようですが。