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-0E14E2AEF9158.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: false8.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: tux8.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: false8.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: true8.2.2 YAML fccファイルをJSON ignに変換する #
Ignition設定を人間が理解できるようにするため、2段階設定を使用することができます。最初に、YAMLの設定をfccファイルとして準備し、この設定をJSONにトランスパイルします。トランスパイルは、butaneツールによって実行できます。
トランスパイル中に、butaneはYAMLファイルの構文も検証して、構造内の潜在的なエラーをキャッチします。butaneツールの最新バージョンの場合は、次のリポジトリを追加します:
>sudozypper ar -f \ https://download.opensuse.org/repositories/devel:/kubic:/ignition/DISTRIBUTION/ \ devel_kubic_ignition
ここで、DISTRIBUTIONは、次のいずれかです(ディストリビューションによって異なります):
openSUSE_TumbleweedopenSUSE_Leap_$release_number15.a
これで、butaneツールをインストールできるようになりました。
>sudozypper in butane
次のコマンドを実行して、butaneを呼び出すことができます。
> butane -p -o config.ign config.fcc各要素の説明
config.fccは、YAML設定ファイルへのパスですconfig.ignは、出力JSON設定ファイルへのパスです-pコマンドオプションを使用すると、出力ファイルに改行が追加されるため、読みやすくなります。