「Cloud-init」の版間の差分
細 (カテゴリの翻訳) |
細 (赤字リンクの解消) |
||
| 2行目: | 2行目: | ||
[[Category:ネットワーク]] |
[[Category:ネットワーク]] |
||
[[en:Cloud-init]] |
[[en:Cloud-init]] |
||
| − | Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。[[OpenStack]] や [[AWS]] などのクラウドで起動するための Arch Linux イメージに入れる必要があります。 |
+ | Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。[[en2:OpenStack|OpenStack]] や [[en2:AWS|AWS]] などのクラウドで起動するための Arch Linux イメージに入れる必要があります。 |
== インストール == |
== インストール == |
||
| − | [[公式リポジトリ]] |
+ | [[公式リポジトリ]]から {{Pkg|cloud-init}} をインストールします。 |
== 設定 == |
== 設定 == |
||
| 20行目: | 20行目: | ||
** デフォルトユーザーの {{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}} ファイルを置くと、これらも読み込まれます。 |
=== デフォルトユーザーの設定 === |
=== デフォルトユーザーの設定 === |
||
| 77行目: | 77行目: | ||
== cloud.cfg の他のセクション == |
== cloud.cfg の他のセクション == |
||
| − | {{ic|cloud.cfg}} には他にもいくつかのセクションがあり |
+ | {{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/}} から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます: |
| − | 独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます: |
||
* ディスクをリサイズする |
* ディスクをリサイズする |
||
| 91行目: | 90行目: | ||
* {{ic|cloud-init.service}}。ネットワークが起動することを要求する。{{ic|cloud-init init}} を実行する。 |
* {{ic|cloud-init.service}}。ネットワークが起動することを要求する。{{ic|cloud-init init}} を実行する。 |
||
* {{ic|cloud-config.target}}。Corresponds to the cloud-config upstart event "to inform third parties that cloud-config is available" |
* {{ic|cloud-config.target}}。Corresponds to the cloud-config upstart event "to inform third parties that cloud-config is available" |
||
| − | * {{ic|cloud-config.service}} |
+ | * {{ic|cloud-config.service}}。{{ic|cloud-init modules <nowiki>--mode=config</nowiki>}} を実行する。 |
| − | * {{ic|cloud-final.service}} |
+ | * {{ic|cloud-final.service}}。{{ic|cloud-init modules <nowiki>--mode=final</nowiki>}} を実行する。 |
| − | [[Arch_Linux_AMIs_for_Amazon_Web_Services|Uplink Labs EC2 |
+ | [[en2:Arch_Linux_AMIs_for_Amazon_Web_Services|Uplink Labs の EC2 イメージ]]は上記の全てを有効にしています。もっともこれは依存関係のせいでやりすぎになっているようですが。 |
2015年12月31日 (木) 23:12時点における版
Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。OpenStack や AWS などのクラウドで起動するための 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 イメージは上記の全てを有効にしています。もっともこれは依存関係のせいでやりすぎになっているようですが。