「Cloud-init」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
15行目: 15行目:
 
* sudo をインストールし、デフォルトユーザーを sudo グループに追加します。これでスーパーユーザーとしてコマンドを実行できるようになります。
 
* sudo をインストールし、デフォルトユーザーを sudo グループに追加します。これでスーパーユーザーとしてコマンドを実行できるようになります。
 
* デフォルトユーザーがパスワードなしで sudo できるようにします。
 
* デフォルトユーザーがパスワードなしで sudo できるようにします。
* インスタンスのメタ情報を引き出せるように cloud-init を設定します。以下のことが含まれますが、これだけに限られるわけではありません:
+
* インスタンスのメタ情報を引き出せるように cloud-init を設定します。設定には以下が含まれますが、以下だけに限られるわけではありません:
 
** {{ic|hostname}} をセットする
 
** {{ic|hostname}} をセットする
 
** {{ic|resolv.conf}} をセットする
 
** {{ic|resolv.conf}} をセットする
 
** デフォルトユーザーの {{ic|~/.ssh/authorized_keys}} をセットする
 
** デフォルトユーザーの {{ic|~/.ssh/authorized_keys}} をセットする
   
cloud-init のメイン設定ファイルは {{ic|/etc/cloud/cloud.cfg}} です。{{ic|/etc/cloud/cloud.cfg.d}} に {{ic|*.cfg}} ファイルを置くと、これらも読み込まれます。
+
cloud-init のメイン設定ファイルは {{ic|/etc/cloud/cloud.cfg}} です。{{ic|/etc/cloud/cloud.cfg.d}} に {{ic|*.cfg}} ファイルを置くと、配置した {{ic|*.cfg}} ファイルも読み込まれます。
   
 
=== デフォルトユーザーの設定 ===
 
=== デフォルトユーザーの設定 ===
29行目: 29行目:
 
- default
 
- default
   
これによって {{ic|system_info}} > {{ic|default_user}} のユーザーがデフォルトユーザーになります。
+
上記の設定によって {{ic|system_info}} > {{ic|default_user}} のユーザーがデフォルトユーザーになります。
   
 
system_info:
 
system_info:
44行目: 44行目:
   
 
* デフォルトユーザーの名前を {{ic|arch}} にする
 
* デフォルトユーザーの名前を {{ic|arch}} にする
* デフォルトユーザーのパスワードをロックする。これによって起動時に設定した SSH 鍵なしにログインできなくなる。
+
* デフォルトユーザーのパスワードをロックする。ロックによって起動時に設定した SSH 鍵なしにログインできなくなる。
 
* デフォルトユーザーをグループ {{ic|adm}}, {{ic|audio}}, {{ic|cdrom}}, {{ic|dialout}}, {{ic|dip}}, {{ic|floppy}}, {{ic|netdev}}, {{ic|plugdev}}, {{ic|sudo}}, {{ic|video}} に追加する
 
* デフォルトユーザーをグループ {{ic|adm}}, {{ic|audio}}, {{ic|cdrom}}, {{ic|dialout}}, {{ic|dip}}, {{ic|floppy}}, {{ic|netdev}}, {{ic|plugdev}}, {{ic|sudo}}, {{ic|video}} に追加する
 
* デフォルトユーザーをパスワードなしで sudo できるようにする
 
* デフォルトユーザーをパスワードなしで sudo できるようにする
57行目: 57行目:
 
# passwd -d root
 
# passwd -d root
   
前のセクションでの設定が正しく動作することを確認できていない限り、これは実行しないでください。そうしないとインスタンスから完全に閉めだされてしまいます。
+
前のセクションでの設定が正しく動作することを確認できていない限り、上記のコマンドは実行しないでください。そうしないとインスタンスから完全に閉めだされてしまいます。
   
 
=== データソースの設定 ===
 
=== データソースの設定 ===
   
データソースは、起動時にどのようにインスタンスのメタ情報を引き出すかを定義します。これはどのクラウド (OpenStack, AWS, OpenNebula など) を使うかによります。内部では、これは共通のインターフェイスで定義されたいくつかのメソッドを実装しているモジュールに対応します。{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにしてください:
+
データソースは、起動時にどのようにインスタンスのメタ情報を引き出すかを定義します。定義はどのクラウド (OpenStack, AWS, OpenNebula など) を使うかによります。内部では、共通のインターフェイスで定義されたいくつかのメソッドを実装しているモジュールに対応します。{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにしてください:
 
datasource_list: [ NoCloud, ConfigDrive, OpenNebula, Azure, AltCloud, OVF, MAAS, GCE, OpenStack, CloudSigma, Ec2, CloudStack, None ]
 
datasource_list: [ NoCloud, ConfigDrive, OpenNebula, Azure, AltCloud, OVF, MAAS, GCE, OpenStack, CloudSigma, Ec2, CloudStack, None ]
   
73行目: 73行目:
 
</nowiki>}}
 
</nowiki>}}
   
上記の設定は、OpenStack データソースの場合に {{ic|<nowiki>http://169.254.169.254:80</nowiki>}} からメタデータをダウンロードするようにし、ネットワーク初期化の後に実行させるようにします。これはどちらもデフォルトの挙動であり、省略できます。
+
上記の設定は、OpenStack データソースの場合に {{ic|<nowiki>http://169.254.169.254:80</nowiki>}} からメタデータをダウンロードするようにし、ネットワーク初期化の後に実行させるようにします。どちらもデフォルトの挙動であり、省略できます。
   
 
== cloud.cfg の他のセクション ==
 
== cloud.cfg の他のセクション ==
   
{{ic|cloud.cfg}} には他にもいくつかのセクションがあり {{ic|cloud_init_modules}}, {{ic|cloud_config_modules}}, {{ic|cloud_final_modules}} などを含んでいます。これらはインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。
+
{{ic|cloud.cfg}} には他にもいくつかのセクションがあり {{ic|cloud_init_modules}}, {{ic|cloud_config_modules}}, {{ic|cloud_final_modules}} などがあります。これらのセクションではインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。
   
これらのモジュールは {{ic|/usr/lib/python2.7/site-packages/cloudinit/config/}} から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:
+
定義したモジュールは {{ic|/usr/lib/python2.7/site-packages/cloudinit/config/}} から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:
   
 
* ディスクをリサイズする
 
* ディスクをリサイズする
86行目: 86行目:
 
== Systemd との統合 ==
 
== Systemd との統合 ==
   
cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供します。これらが以下の順番で起動するように依存関係が構築されます:
+
cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供します。サービスとターゲットは以下の順番で起動するように依存関係が構築されます:
 
* {{ic|cloud-init-local.service}}。ファイルシステムが立ち上がっていることを要求するだけ。{{ic|cloud-init init --local}} を実行する。
 
* {{ic|cloud-init-local.service}}。ファイルシステムが立ち上がっていることを要求するだけ。{{ic|cloud-init init --local}} を実行する。
 
* {{ic|cloud-init.service}}。ネットワークが起動することを要求する。{{ic|cloud-init init}} を実行する。
 
* {{ic|cloud-init.service}}。ネットワークが起動することを要求する。{{ic|cloud-init init}} を実行する。
93行目: 93行目:
 
* {{ic|cloud-final.service}}。{{ic|cloud-init modules <nowiki>--mode=final</nowiki>}} を実行する。
 
* {{ic|cloud-final.service}}。{{ic|cloud-init modules <nowiki>--mode=final</nowiki>}} を実行する。
   
[[en2:Arch_Linux_AMIs_for_Amazon_Web_Services|Uplink Labs の EC2 イメージ]]は上記の全てを有効にしています。もっともこは依存関係のせいでやりすぎになっているようですが。
+
[[en2:Arch_Linux_AMIs_for_Amazon_Web_Services|Uplink Labs の EC2 イメージ]]は上記の全てを有効にしています。もっともこのイメージは依存関係のせいでやりすぎになっているようですが。

2016年1月2日 (土) 16:34時点における版

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 ファイルを置くと、配置した *.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。cloud-config の起動イベントに反応して cloud-config が利用できるようになったことを第三者に伝えます。
  • cloud-config.servicecloud-init modules --mode=config を実行する。
  • cloud-final.servicecloud-init modules --mode=final を実行する。

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