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-datauser-data の 2 つのファイルを作成してから、ISO イメージにパッケージ化する必要があります。

    1. ディレクトリーを作成して、そのディレクトリーに移動します。

      $ mkdir cloudinitiso
      $ cd cloudinitiso
    2. meta-data という名前のファイルを作成します。meta-data という名前のファイルに以下を追加します。

      instance-id: Atomic0
      local-hostname: atomic-00
    3. 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 にあります。

    4. メタ データおよび ユーザーデータを含む ISO イメージを作成し ます。

      # genisoimage -output atomic0cidata.iso -volid cidata -joliet -rock user-data meta-data
    5. 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 というラベルが付けられます。

    注記:この例では、ユーザー foobaruserswheel の 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-datawrite_files ディレクティブを使用します。

    write_files:
      - path: /etc/sysconfig/docker-storage-setup
        permissions: 0644
        owner: root
        content: |
        ROOT_SIZE=6G
注記

RHEL 7.4 より前のバージョンでは、container-storage-setupdocker-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 サイト を参照してください。