8 使用 Ignition 进行配置 #
本章提供有关用于设置计算机的 Ignition 配置工具的详细信息。在本章中,您将了解如何提供用于计算机定义的必要配置文件。
8.1 关于 Ignition #
Ignition 是一种配置工具,可让您在首次引导时根据您的具体要求配置系统。系统首次引导时,会将 Ignition 作为 initramfs
的一部分加以装载,并会在特定目录(在 USB 闪存盘上,或者您也可以提供 URL)中搜索配置文件。所有更改都是在内核从临时文件系统切换到实际根文件系统前(在发出 switch_root
命令前)执行的。
Ignition 使用 JSON 格式的配置文件。该文件名为 config.ign
。为了更直观易懂,您可以创建 YAML 文件,然后将此文件转换为 JSON。有关细节,请参见第 8.2.1 节 “将 YAML fcc
文件转换为 JSON ign
”。
8.2 config.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 规范 v3.3.0。
version
属性为必要属性,对于 SLE Micro,其值必须设置为 3.3.0
或更低版本,否则 Ignition 将会失败。
如果您要以 身份登录系统,必须至少包含 root
root 的口令,但建议通过 SSH 密钥建立访问权限。如果您要配置口令,请务必使用安全口令。如果您使用随机生成的口令,请至少包含 10 个字符。如果手动创建口令,请包含 10 个以上字符并结合使用大小写字母和数字。
8.2.1 将 YAML fcc
文件转换为 JSON ign
#
为了使 Ignition 配置更直观易懂,您可以分两个阶段来进行配置。首先,以 fcc
文件格式准备 YAML 配置,然后将这些配置转换为 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.3
现在,您可以安装 butane
工具:
>
sudo
zypper in butane
现在,您可以运行以下命令来调用 butane
:
>
butane -p -o config.ign config.fcc
其中:
config.fcc
是 YAML 配置文件的路径config.ign
是输出 JSON 配置文件的路径-p
命令选项会在输出文件中添加换行符,使其更易于阅读。
8.2.2 YAML 配置示例 #
本节将为您提供 YAML 格式 Ignition 配置的一些常见示例。
version
属性为必要属性
每个 config.fcc
都必须包含版本 1.4.0 或更低版本,该版本随后会转换为相应的 Ignition 规范。
8.2.2.1 储存配置 #
storage
属性用于配置分区、RAID,定义文件系统,创建文件等。要定义分区,请使用 disks
属性。filesystem
属性用于指定分区格式并定义特定分区的挂载点。files
属性可用于在文件系统中创建文件。后续章节中将介绍上述每个属性。
8.2.2.1.1 disks
属性 #
disks
属性是设备列表,可用于定义这些设备上的分区。disks
属性必须至少包含一个 device
,其他属性为可选属性。下面的示例将使用单个虚拟设备并将磁盘分成四个分区:
variant: fcos version: 1.0.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.2.1.2 raid
属性 #
raid
是 RAID 阵列列表。raid
的下列属性为必要属性:
- level
特定 RAID 阵列的级别(线性、raid0、raid1、raid2、raid3、raid4、raid5、raid6)
- devices
阵列中设备的列表,通过绝对路径引用这些设备
- name
将用于 md 设备的名称
variant: fcos version: 1.0.0 storage: - raid: data name: system level: raid1 devices: "/dev/sda", "/dev/sdb"
8.2.2.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: 1.0.0 storage: filesystems: - path: /opt device: "/dev/sda1" format: btrfs wipe_filesystem: false
8.2.2.1.4 files
属性 #
您可以使用 files
属性在计算机上创建任何文件。请注意,如果您要在默认的挂载目录外部创建文件,需要使用 filesystem
属性定义目录。
下面的示例使用 files
属性创建了一个主机名。将创建包含 slemicro-1 主机名的文件 /etc/hostname
:
variant: fcos version: 1.0.0 storage: files: - path: /etc/hostname mode: 0644 overwrite: true contents: inline: "slemicro-1"
8.2.2.1.5 directories
属性 #
directories
属性是将在文件系统中创建的目录列表。directories
属性必须至少包含一个 path
属性。
variant: fcos version: 1.0.0 storage: directories: - path: /home/tux/ user: - name: tux
8.2.2.2 用户管理 #
passwd
属性用于添加用户。如果您要登录到系统,请创建 root
并设置 root
的口令,以及/或者将 SSH 密钥添加到 Ignition 配置中。您需要对 root
口令进行哈希处理,例如使用 openssl
命令来处理:
openssl passwd -6
该命令会为您选择的口令创建哈希。使用此哈希作为 password_hash
属性的值。
variant: fcos version: 1.1.0 passwd: users: - name: root password_hash: "$6$PfKm6Fv5WbqOvZ0C$g4kByYM.D2B5GCsgluuqDNL87oeXiHqctr6INNNmF75WPGgkLn9O9uVx4iEe3UdbbhaHbTJ1vpZymKWuDIrWI1" ssh_authorized_keys: - ssh-rsa long...key user@host
users
属性必须至少包含一个 name
属性。ssh_authorized_keys
是用户的 ssh 密钥列表。
8.2.2.3 启用 systemd
服务 #
您可以通过在 systemd
属性中指定 systemd
服务来启用相应服务。
variant: fcos version: 1.0.0 systemd units: - name: sshd.service enabled: true
name
必须是要启用的服务的确切名称(包含后缀)。