8 Ignitionを使用した設定 #
この章では、マシンのセットアップに使用されるIgnitionプロビジョニングツールに関する詳細について説明します。ここでは、マシン定義に使用される必要な設定ファイルの提供方法を学習します。
8.1 Ignitionについて #
Ignitionは、最初のブート時に仕様に従ってシステムを設定できるプロビジョニングツールです。システムが最初にブートすると、Ignitionはinitramfs
の一部としてロードされ、(USBフラッシュディスク上、またはURLを指定できる)特定のディレクトリ内の設定ファイルを検索します。すべての変更は、カーネルが一時ファイルシステムから実際のルートファイルシステムに切り替わる前に(switch_root
コマンドが発行される前に)実行されます。
Ignitionは、JSON形式の設定ファイルを使用します。ファイルはconfig.ign
と呼ばれます。
8.2 config.ign
#
config.ign
はIgnitionを規定するJSON設定ファイルです。JSONで手動でファイルを作成するか、Fuel Ignitionツール(https://opensuse.github.io/fuel-ignition/)を使用して規定の基本セットを生成できます。Fuel Ignitionツールはオプションの完全なセットを提供していないため、ファイルを手動で変更する必要がある場合があることに注意してください。
または、人間が理解できるようにするため、YAMLでconfig.fcc
ファイルを作成し、そのファイルをJSONにトランスパイルすることもできます。詳細については、8.2.2項 「YAML fcc
ファイルをJSON ign
に変換する」を参照してください。
ベアメタルにインストールする場合、設定ファイルconfig.ign
は、ignition
というラベルの付いた設定メディアのignition
サブディレクトリに存在する必要があります。ディレクトリ構造は次のようになる必要があります。
<root directory> └── ignition └── config.ign
QEMU/KVM仮想マシンを設定する場合は、qemu
コマンドの属性としてconfig.ign
へのパスを提供します。例:
-fw_cfg name=opt/com.coreos/config,file=PATH_TO_config.ign
config.ign
には、オブジェクト、文字列、整数、ブール値、オブジェクトのリストなど、さまざまなデータ型が含まれています。仕様の全詳細については、Ignition
specification v3.3.0を参照してください。
version
属性は必須です。SLE Microの場合、その値は3.3.0
またはそれ以前のバージョンに設定する必要があります。そのように設定しない場合、Ignitionは失敗します。
ルートとしてシステムにログインする場合は、少なくともroot
のパスワードを含める必要があります。ただし、SSHキーを使用してアクセスを確立することをお勧めします。パスワードを設定する場合は、必ずセキュアなパスワードを使用してください。ランダムに生成されたパスワードを使用する場合は、少なくとも10文字を使用してください。パスワードを手動で作成する場合は、10文字以上を使用し、大文字と小文字、および数字を組み合わせます。
8.2.1 設定例 #
このセクションでは、JSONおよびYAML形式のIgnition設定の一般的な例をいくつか示します。YAML形式で設定を作成する場合は、8.2.2項 「YAML fcc
ファイルをJSON ign
に変換する」で説明されているように、設定をJSONにトランスパイルする必要があります。
default mounted directoriesの外部でファイルを作成する場合は、filesystem
属性を使用してディレクトリを定義する必要があることに注意してください。
version
属性は必須です
バージョン仕様をconfig.ign
(バージョン3.3.0以前)にそれぞれ含めます。config.fcc
(バージョン1.4.0以前)。
8.2.1.1 ストレージの設定 #
storage
属性は、パーティションの設定、RAID、ファイルシステムの定義、ファイルの作成などに使用されます。パーティションを定義するには、disks
属性を使用します。filesystem
属性は、パーティションのフォーマット、特定パーティションのマウントポイントの定義に使用されます。files
属性は、ファイルシステムのファイルの作成に使用できます。先に述べた属性のそれぞれについて、次のセクションで説明します。
8.2.1.1.1 disks
属性 #
disks
属性は、これらのデバイス上でパーティションを定義できるデバイスのリストです。disks
属性には、少なくとも1つのdevice
属性が含まれている必要があります。その他の属性はオプションです。次の例では、単一の仮想デバイスを使用し、ディスクを4つのパーティションに分けます。
{ "variant": "fcos", "version": "3.3.0", "storage": { "disks": [ { "device": "/dev/vda", "wipe_table": true, "partitions": [ { "label": "root", "number": 1, "type_guid": "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709" }, { "label": "boot", "number": 2, "type_guid": "BC13C2FF-59E6-4262-A352-B275FD6F7172" }, { "label": "swap", "number": 3, "type_guid": "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F" }, { "label": "home", "number": 4, "type_guid": "933AC7E1-2EB4-4F13-B844-0E14E2AEF915" } ] } ] } }
YAML形式の同じ例:
variant: fcos version: 1.4.0 storage: disks: - device: "/dev/vda" wipeTable: true partitions: - label: root number: 1 typeGuid: 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 - label: boot number: 2 typeGuid: BC13C2FF-59E6-4262-A352-B275FD6F7172 - label: swap number: 3 typeGuid: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F - label: home number: 4 typeGuid: 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
8.2.1.1.2 raid
属性 #
raid
は、RAIDアレイのリストです。raid
の次の属性は必須です:
- level
特定のRAIDアレイのレベル(linear、raid0、raid1、raid2、raid3、raid4、raid5、raid6)
- devices
絶対パスで参照されるアレイ内のデバイスのリスト
- name
mdデバイスに使用される名前
{ "variant": "fcos", "version": "3.3.0", "storage": { "raid": [ { "name": "system", "level": "raid1", "devices": [ "/dev/sda", "/dev/sdb" ] } ] } }
YAML形式の同じ例:
variant: fcos version: 1.4.0 storage: - raid: data name: system level: raid1 devices: "/dev/sda", "/dev/sdb"
8.2.1.1.3 filesystem
属性 #
filesystem
には次の属性が含まれている必要があります:
- device
デバイスへの絶対パス。通常、物理ディスクの場合は
/dev/sda
- format
ファイルシステム形式(btrfs、ext4、xfs、vfatまたはswap)
注記SLE Microの場合、
root
ファイルシステムはbtrfsにフォーマットされる必要があります。
次の例は、filesystem
属性の使用方法を示しています。/opt
ディレクトリは、/dev/sda1
パーティションにマウントされ、btrfsにフォーマットされます。パーティションテーブルは消去されません。
{ "variant": "fcos", "version": "3.3.0", "storage": { "filesystems": [ { "path": "/opt", "device": "/dev/sda1", "format": "btrfs", "wipe_filesystem": false } ] } }
YAML形式の同じ例:
variant: fcos version: 1.4.0 storage: filesystems: - path: /opt device: "/dev/sda1" format: btrfs wipe_filesystem: false
8.2.1.1.4 files
属性 #
files
属性を使用して、マシンに任意のファイルを作成できます。default mounted directoriesの外部でファイルを作成する場合は、filesystem
属性を使用してディレクトリを定義する必要があることに注意してください。
次の例では、ホスト名がfiles
属性を使用して作成されます。ファイル/etc/hostname
はslemicro-1ホスト名で作成されます。
JSONでは10進数のシステムを使用しているため、mode
値はアクセス権の10進数表記です。8進数表記を使用するには、この場合はYAMLを使用します。
{ "variant": "fcos", "version": "3.3.0", "storage": { "files": [ { "path": "/etc/hostname", "mode": 420, "overwrite": true, "contents": { "inline": "slemicro-1" } } ] } }
YAMLの同じ例:
variant: fcos version: 1.4.0 storage: files: - path: /etc/hostname mode: 0644 overwrite: true contents: inline: "slemicro-1"
8.2.1.1.5 directories
属性 #
directories
属性は、ファイルシステムに作成されるディレクトリのリストです。directories
属性には、少なくとも1つのpath
属性が含まれている必要があります。
{ "variant": "fcos", "version": "3.3.0", "storage": { "directories": [ { "path": "/mnt/backup", "user": { "name": "tux" } } ] } }
YAMLの同じ例:
variant: fcos version: 1.4.0 storage: directories: - path: /mnt/backup user: - name: tux
8.2.1.2 ユーザ管理 #
passwd
属性は、ユーザを追加するために使用されます。システムにログインする場合は、root
の作成、root
パスワードの設定、および/またはSSHキーのIgnition設定への追加を行います。たとえば、openssl
コマンドを使用して、root
パスワードをハッシュする必要があります。
openssl passwd -6
コマンドは、選択するパスワードのハッシュを作成します。このハッシュをpassword_hash
属性の値として使用します。
variant: fcos version: 1.0.0 passwd: users: - name: root password_hash: "$6$PfKm6Fv5WbqOvZ0C$g4kByYM.D2B5GCsgluuqDNL87oeXiHqctr6INNNmF75WPGgkLn9O9uVx4iEe3UdbbhaHbTJ1vpZymKWuDIrWI1" ssh_authorized_keys: - ssh-rsa long...key user@host
users
属性には、少なくとも1つのname
属性が含まれている必要があります。ssh_authorized_keys
は、ユーザのsshキーのリストです。
root
以外の他のユーザの作成
root
以外の他のユーザを作成する場合は、ユーザの/home
ディレクトリを定義する必要があります。これらのディレクトリは(通常/home/USER_NAME
)デフォルトではマウントされないためです。したがって、storage
/filesystem
属性を使用してこれらのディレクトリを宣言します。たとえば、tuxの場合、この例は次のようになります。
{ "ignition": { "version": "3.2.0" }, "passwd": { "users": [ { "name": "tux", "passwordHash": "$2a$10$US9XSqLOqMmGq/OnhlVjPOwuZREh2.iEtlwD5LI7DKgV24NJU.wO6" } ] }, "storage": { "filesystems": [ { "device": "/dev/disk/by-label/ROOT", "format": "btrfs", "mountOptions": [ "subvol=/@/home" ], "path": "/home", "wipeFilesystem": false } ] } }
YAMLの同じ例:
version: 1.2.0 passwd: users: - name: tux passwordHash: $2a$10$US9XSqLOqMmGq/OnhlVjPOwuZREh2.iEtlwD5LI7DKgV24NJU.wO6 storage: filesystems: - device: /dev/disk/by-label/ROOT format: btrfs mountOptions: - subvol=/@/home path: /home wipeFilesystem: false
8.2.1.3 systemd
サービスの有効化 #
systemd
属性で指定して、systemd
サービスを有効にできます。name
は、有効にするサービスの正確な名前(サフィックスを含む)である必要があります。
variant: fcos version: 1.0.0 systemd: units: - name: sshd.service enabled: true
{ "ignition": { "version": "3.0.0" }, "systemd": { "units": [ { "enabled": true, "name": "sshd.service" } ] } }
YAMLの同じ例:
variant: fcos version: 1.0.0 systemd: units: - name: sshd.service enabled: true
8.2.2 YAML fcc
ファイルをJSON ign
に変換する #
Ignition設定を人間が理解できるようにするため、2段階設定を使用することができます。最初に、YAMLの設定をfcc
ファイルとして準備し、この設定をJSONにトランスパイルします。トランスパイルは、butane
ツールによって実行できます。
トランスパイル中に、butane
はYAMLファイルの構文も検証して、構造内の潜在的なエラーをキャッチします。butane
ツールの最新バージョンの場合は、次のリポジトリを追加します:
>
sudo
zypper ar -f \ https://download.opensuse.org/repositories/devel:/kubic:/ignition/DISTRIBUTION/ \ devel_kubic_ignition
ここで、DISTRIBUTIONは、次のいずれかです(ディストリビューションによって異なります):
openSUSE_Tumbleweed
openSUSE_Leap_$release_number
15.a
これで、butane
ツールをインストールできるようになりました。
>
sudo
zypper in butane
次のコマンドを実行して、butane
を呼び出すことができます。
>
butane -p -o config.ign config.fcc
各要素の説明
config.fcc
は、YAML設定ファイルへのパスですconfig.ign
は、出力JSON設定ファイルへのパスです-p
コマンドオプションを使用すると、出力ファイルに改行が追加されるため、読みやすくなります。