Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第3章 cloud-init の設定
Red Hat Enterprise Linux Atomic Host は cloud-init を使用して、インストールおよび初回起動時にシステムを設定します。cloud-init は、クラウドインスタンスの初期初期化を提供するために最初に開発されました。Red Hat Enterprise Linux Atomic Host では、仮想マシンのインストールにも使用できます。
cloud-init が使用するファイルは YAML 形式のファイルです。
cloud-init は、マシンの初回起動時にのみ実行されます。ファイルの構文エラーが原因で cloud-init が失敗した場合や、ユーザー認証情報などの必要なディレクティブがすべて含まれていない場合は、新規インスタンスを作成し、起動する必要があります。新しい cloud-init ファイルで障害が発生したインスタンスの再起動は機能し ません。
以下は、cloud-init で一般的なタスクを実行する例です。
cloud-init でユーザーを作成する方法
cloud-init を使用してユーザーを作成するには、meta-data と user-data の 2 つのファイルを作成してから、ISO イメージにパッケージ化する必要があります。
ディレクトリーを作成して、そのディレクトリーに移動します。
$ mkdir cloudinitiso $ cd cloudinitiso
meta-data という名前のファイルを作成します。meta-data という名前のファイルに以下を追加します。
instance-id: Atomic0 local-hostname: atomic-00
user-data という名前のファイルを作成します。user-data という名前のファイルに以下を追加します。
#cloud-config password: atomic chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvZ user1@domain.com
注記:上記の user-data ファイルの最後の行は、SSH 公開鍵です。SSH 公開鍵は ~/.ssh/id_rsa.pub にあります。
メタ データおよび ユーザーデータを含む ISO イメージを作成し ます。
# genisoimage -output atomic0cidata.iso -volid cidata -joliet -rock user-data meta-data
- atomic0cidata.iso という名前のファイルが生成されます。このファイルを Red Hat Enterprise Linux Atomic Host をインストールする予定のマシンにアタッチします。ユーザー名は cloud-user になり、パスワードは atomic になります。
cloud-user のパスワードを失効させ、ユーザーが初回ログイン時に変更する必要はありますか ?
最初のログイン時に cloud-user を強制的にパスワードを変更するには、user-data ファイルで
chpasswd: {expire: False}
の行をchpasswd: {expire: True}
に変更します。#cloud-config password: atomic chpasswd: {expire: True} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvz user1@yourdomain.com - ssh-rsa AAB...QTuo user2@yourdomain.com
これは、特に指定がない限り、パスワードと chpasswd がデフォルトのユーザーで動作するため機能します。
注記:これはグローバル設定です。これを True に設定すると(以下を参照)、作成したすべてのユーザーにはパスワードを変更する必要があります。
デフォルトのユーザー名を変更するにはどうすればよいですか ?
デフォルトのユーザー名を cloud-user から他のものに変更するには、
user: username
の行を user-data ファイルに追加します。#cloud-config user: username password: atomic chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvz user1@yourdomain.com - ssh-rsa AAB...QTuo user2@yourdomain.com
root パスワードの設定方法
root パスワードを設定するには、ユーザーデータファイルの
chpasswd
セクションにユーザー一覧を作成する必要があります。リストの形式を以下に示します。空白は重要であるため、コロン(:
)の両側に何も含めないでください。スペースでパスワードを設定するためです。この方法を使用してユーザーパスワードを設定する場合は、本セクションで すべて のパスワードを設定する必要があります。つまり、password:
行は上部からこのセクションに移動する必要があります。#cloud-config ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvz user1@yourdomain.com - ssh-rsa AAB...QTuo user2@yourdomain.com chpasswd: list: | root:password cloud-user:atomic expire: False
How do I manage Red Hat subscriptions with cloud-init?
rh_subscription
ディレクティブは、システムの登録に関するさまざまな操作を実行できます(RHEL Atomic 7.4 以降の場合)。以下は、利用可能なオプションのさまざまな例になります。rh_subscription: username: atomic@redhat.com password: '<password>' auto-attach: True service-level: self-support
service-level は、auto-attach オプションでのみ使用されます。または、ユーザー名とパスワードの代わりにアクティベーションキーと org を使用できます。
rh_subscription: activation-key: example_key org: 12345 auto-attach: True
プールの追加もサポートされています。以下は、
subscription-manager attach --pool=XYZ01234567
コマンドと同じです。rh_subscription: username: atomic@redhat.com password: '<password>' add-pool: XYZ01234567
以下を使用して、/etc/rhsm/rhsm.conf にサーバーのホスト名を設定できます。
rh_subscription: username: atomic@redhat.com password: '<password>' server-hostname: atomic.example.com auto-attach: True
初期システム設定中にユーザーを追加するにはどうすればよいですか ?追加のユーザーオプションの設定方法
ユーザーが作成され、user-data ファイルの users セクションで説明されています。このセクションを追加するには、デフォルトのユーザーのオプションもここで設定する必要があります。
users セクションの最初のエントリーがデフォルトの の場合、
デフォルト
のユーザーである cloud-user が他のユーザーとともに作成されます。デフォルトの行を省略すると、cloud-user は作成されません。#cloud-config users: - default - name: foobar gecos: User N. Ame selinux-user: staff_u groups: users,wheel ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com chpasswd: list: | root:password cloud-user:atomic foobar:foobar expire: False
注記:デフォルトでは、se-linux-user 値がない場合、ユーザーには unconfined_u というラベルが付けられます。
注記:この例では、ユーザー foobar を
users
とwheel
の 2 つのグループに配置します。cloud-init 0.7.5 の時点で、グループリストでは空白はサポートされません。BZ 1126365最初の起動コマンドを実行するにはどうすればよいですか ?
user-data ファイルの
runcmd
セクションおよびbootcmd
セクションを使用して、起動および初期化中に任意のコマンドを実行できます。bootcmd
セクションは初期化プロセスの早い段階で実行されます。runcmd
セクションは、init によってプロセスの末尾の近くで実行されます。これらのコマンドは次回の起動時に保存され ず、初回の初期化時にのみ実行されます。#cloud-config users: - default - name: foobar gecos: User N. Ame groups: users chpasswd: list: | root:password fedora:atomic foobar:foobar expire: False bootcmd: - echo New MOTD >> /etc/motd runcmd: - echo New MOTD2 >> /etc/motd
sudoers の追加方法
以下のように user-data ファイルの users セクションに sudo および groups エントリーを追加して、ユーザーを sudoer として設定できます。
#cloud-config users: - default - name: foobar gecos: User D. Two sudo: ["ALL=(ALL) NOPASSWD:ALL"] groups: wheel,adm,systemd-journal ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA...vz user@domain.com chpasswd: list: | root:password cloud-user:atomic foobar:foobar expire: False
静的ネットワーク設定の設定方法
network-interfaces
セクションをメタ データファイルに 追加します。本セクションでは、通常のネットワーク設定オプションセットを説明します。cloud-init の現在の バグ により、静的ネットワーク設定は自動的に開始されません。代わりに、デフォルトの DHCP 設定はアクティブなままになります。推奨される回避策は、
bootcmd
ディレクティブを介してネットワークインターフェイスを手動で停止および再起動することです。network-interfaces: | iface eth0 inet static address 192.168.1.10 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.254 bootcmd: - ifdown eth0 - ifup eth0
cloud-user を削除して、root だけがあり、その他のユーザーがないのか ?
root ユーザーのみを作成するには、user-data ファイルの
users
セクションに root のエントリーを作成します。このセクションは、単にname
オプションとして簡単に実行できます。users: - name: root chpasswd: list: | root:password expire: False
必要に応じて、以下のように root ユーザーの SSH キーを設定できます。
users: - name: root ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com
container-storage-setup でストレージをセットアップするにはどうすればよいですか ?
たとえば、デフォルトの 3GB ではなく、root 論理ボリュームのサイズを 6GB に設定するには、user-data で
write_files
ディレクティブを使用します。write_files: - path: /etc/sysconfig/docker-storage-setup permissions: 0644 owner: root content: | ROOT_SIZE=6G
RHEL 7.4 より前のバージョンでは、container-storage-setup は docker-storage-setup と呼ばれていました。ストレージに OverlayFS を使用している場合は、RHEL 7.4 の時点で、SELinux でそのタイプのファイルシステムを Enforcing モードで使用できるようになりました。
Overlay グラフドライバーを有効にするにはどうすればよいですか ?
Overlay グラフドライバーは、container-storage-setup で有効化されます。
runcmd
ディレクティブを使用して、STORAGE_DRIVER オプションを "overlay2" に変更します。runcmd: - echo "STORAGE_DRIVER=overlay2" >> /etc/sysconfig/docker-storage-setup
注記バックエンドストレージドライバーの変更は破壊的な操作であることに注意してください。さらに、OverlayFS は POSIX に準拠しておらず、制限と共に使用できます。詳細は、RHEL 7.2 リリースノート を参照してください。
インスタンスで cloud-init を再実行するにはどうすればよいですか ?
ほとんどの場合、cloud-init を再実行して、すでに作成されている仮想マシンの設定を変更することはできません。
インスタンス ID を変更できる環境で cloud-init が使用されている場合(例: Atomic0 から Atomic1へ)、インスタンス ID を変更して再起動して cloud-init を再実行することで、既存の仮想マシンを再設定する ことができます。cloud-init は、完全に適切に設定された初回起動システムでを作成するように設定されるため、実稼働環境では推奨されません。
ほとんどの IAAS 実装では、インスタンス ID を変更することはできません。cloud-init を再実行する必要がある場合は、新しいインスタンス ID を取得するためにインスタンスのクローンを作成する必要があります。
シェルスクリプトを bootcmd および runcmd に配置することはできますか ?
有効。
bootcmd
またはruncmd
のリスト値を使用する場合は、各リスト項目はexecve
を使用して順番に実行されます。文字列の値を使用する場合、文字列全体がシェルスクリプトとして実行されます。または、cloud-init を使用してシェルスクリプトを実行する場合は、cloud-init に.yaml ファイルを指定する代わりに、(シバン(#!)で完全)シェルスクリプトを指定できます。
シェルスクリプトを bootcmd
および runcmd
に配置する方法の例については、この Web サイト を参照してください。