「Cloud-init」の版間の差分
(英語版より翻訳) |
Kusakata.bot2 (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
||
(2人の利用者による、間の9版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:仮想化]] |
− | [[Category: |
+ | [[Category:ネットワーク]] |
[[en:Cloud-init]] |
[[en:Cloud-init]] |
||
− | Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。 |
+ | Cloud-init はクラウドのインスタンスを最初に初期化するためのユーティリティからなるパッケージです。[[OpenStack]] や [[AWS]] などのクラウドで起動するための Arch Linux イメージに入れる必要があります。 |
− | [[OpenStack]] や [[AWS]] などのクラウドで起動するための Arch Linux イメージに入れる必要があります。 |
||
− | |||
== インストール == |
== インストール == |
||
− | + | {{Pkg|cloud-init}} パッケージを[[インストール]]します。 |
|
== 設定 == |
== 設定 == |
||
17行目: | 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}} ファイルも読み込まれます。 |
=== デフォルトユーザーの設定 === |
=== デフォルトユーザーの設定 === |
||
+ | |||
+ | 2016年2月現在、パッケージに付属しているデフォルトの {{ic|/etc/cloud/cloud.cfg}} は Arch 向けに修正されておらず、ディストリが Ubuntu になっています。そのため、編集が必須です。 |
||
{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにします: |
{{ic|/etc/cloud/cloud.cfg}} を編集して以下のようにします: |
||
31行目: | 31行目: | ||
- default |
- default |
||
− | + | 上記の設定によって {{ic|system_info}} > {{ic|default_user}} のユーザーがデフォルトユーザーになります。 |
|
system_info: |
system_info: |
||
37行目: | 37行目: | ||
default_user: |
default_user: |
||
name: arch |
name: arch |
||
− | lock_passwd: |
+ | lock_passwd: true |
gecos: Arch |
gecos: Arch |
||
groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video] |
groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video] |
||
46行目: | 46行目: | ||
* デフォルトユーザーの名前を {{ic|arch}} にする |
* デフォルトユーザーの名前を {{ic|arch}} にする |
||
− | * デフォルトユーザーのパスワードをロックする。 |
+ | * デフォルトユーザーのパスワードをロックする。ロックによって起動時に設定した 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 できるようにする |
||
59行目: | 59行目: | ||
# 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 ] |
||
− | これによって、インスタンスのメタ情報をダウンロードするときにどのモジュールを使うかを指定します。 |
+ | これによって、インスタンスのメタ情報をダウンロードするときにどのモジュールを使うかを指定します。状況に応じて、以下のように各データソースごとのパラメータを渡すこともできます: |
− | 状況に応じて、以下のように各データソースごとのパラメータを渡すこともできます: |
||
{{bc|<nowiki> |
{{bc|<nowiki> |
||
79行目: | 75行目: | ||
</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.cfg}} には他にもいくつかのセクションがあり {{ic|cloud_init_modules}}, {{ic|cloud_config_modules}}, {{ic|cloud_final_modules}} などがあります。これらのセクションではインスタンス初期化の各ステージにおいて実行されるモジュールを定義しています。 |
− | + | 定義したモジュールは {{ic|/usr/lib/python2.7/site-packages/cloudinit/config/}} から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます: |
|
− | 独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます: |
||
* ディスクをリサイズする |
* ディスクをリサイズする |
||
* パッケージをアップデートする |
* パッケージをアップデートする |
||
+ | |||
+ | モジュールは動作確認済みのディストリを cloud-init に知らせます。たとえあなたが実行したいと指定しても、{{ic|cloud.cfg}} で設定したディストリが検証済みのディストリのリストに記載されてなければモジュールは動作しません。検証がない場合でもモジュールを Arch で動作させたい場合、モジュールを {{ic|cloud.cfg}} の {{ic|unverified_modules:}} セクションに追加してください。例: |
||
+ | unverified_modules: ['ssh-import-id'] |
||
== 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}} を実行する。 |
||
− | * {{ic|cloud-config.target}}。 |
+ | * {{ic|cloud-config.target}}。cloud-config の起動イベントに反応して cloud-config が利用できるようになったことを第三者に伝えます。 |
− | * {{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>}} を実行する。 |
− | [[ |
+ | [[Amazon Web Services の Arch Linux AMI#Uplink Labs の AMI イメージ|Uplink Labs の EC2 イメージ]]は上記の全てを有効にしています。もっともこのイメージは依存関係のせいでやりすぎになっているようですが。 |
2019年11月21日 (木) 18:48時点における最新版
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
ファイルを置くと、配置した *.cfg
ファイルも読み込まれます。
デフォルトユーザーの設定
2016年2月現在、パッケージに付属しているデフォルトの /etc/cloud/cloud.cfg
は Arch 向けに修正されておらず、ディストリが Ubuntu になっています。そのため、編集が必須です。
/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/
から動的にロードされ、起動時に実行されます。独自のモジュールを定義して、毎回の起動時に例えば次のようなことをさせることもできます:
- ディスクをリサイズする
- パッケージをアップデートする
モジュールは動作確認済みのディストリを cloud-init に知らせます。たとえあなたが実行したいと指定しても、cloud.cfg
で設定したディストリが検証済みのディストリのリストに記載されてなければモジュールは動作しません。検証がない場合でもモジュールを Arch で動作させたい場合、モジュールを cloud.cfg
の unverified_modules:
セクションに追加してください。例:
unverified_modules: ['ssh-import-id']
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.service
。cloud-init modules --mode=config
を実行する。cloud-final.service
。cloud-init modules --mode=final
を実行する。
Uplink Labs の EC2 イメージは上記の全てを有効にしています。もっともこのイメージは依存関係のせいでやりすぎになっているようですが。