跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Micro Documentation / 部署指南 / 预构建映像部署 / 使用 Ignition 进行配置
适用范围 SUSE Linux Enterprise Micro 5.4

8 使用 Ignition 进行配置

本章提供有关用于设置计算机的 Ignition 配置工具的详细信息。在本章中,您将了解如何提供用于计算机定义的必要配置文件。

8.1 关于 Ignition

Ignition 是一种配置工具,可让您在首次引导时根据您的具体要求配置系统。系统首次引导时,会将 Ignition 作为 initramfs 的一部分加以装载,并会在特定目录(在 USB 闪存盘上,或者您也可以提供 URL)中搜索配置文件。所有更改都是在内核从临时文件系统切换到实际根文件系统前(在 switch_root 命令发出前)执行的。

Ignition 使用 JSON 格式的配置文件。该文件名为 config.ign

8.2 config.ign

config.ign 是 JSON 配置文件,用于提供针对 Ignition 的指令。您可以手动创建 JSON 格式的文件,也可以使用 Fuel Ignition 工具 (https://ignite.opensuse.org/) 生成基本的指令集。请注意,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 身份登录系统,必须至少包含 root 的口令,但建议通过 SSH 密钥建立访问权限。如果您要配置口令,请务必使用安全口令。如果您使用随机生成的口令,请至少包含 10 个字符。如果手动创建口令,请确保其长度超过 10 个字符,并且必须包含大小写字母和数字。

8.2.1 配置示例

本节将为您提供 JSON 和 YAML 两种格式的 Ignition 配置的一些常见示例。如果您创建 YAML 格式的配置,则需要按第 8.2.2 节 “将 YAML fcc 文件转换为 JSON ign中所述将配置转换为 JSON 格式。

重要
重要:声明默认子卷外部的内容

请注意,如果您要在默认挂载目录外部创建文件,则需要使用 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 属性必须至少包含一个 device。其他属性为可选属性。下面的示例将使用单个虚拟设备并将磁盘分成四个分区:

    {
    "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 阵列的级别(线性、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 和 YAML 格式的不同数制

请注意,JSON 格式使用十进制,因此 mode 值为访问权限的十进制表示法。要使用八进制表示法,建议在此示例中采用 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 属性必须至少包含一个 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 配置中。您需要对 root 口令进行哈希处理,例如使用 openssl 命令来处理:

 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 属性必须至少包含一个 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 配置更直观易懂,您可以分两个阶段来进行配置。首先,以 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.a

现在,您可以安装 butane 工具:

> sudo  zypper in butane

现在,您可以运行以下命令来调用 butane

>  butane -p -o config.ign config.fcc

其中:

  • config.fcc 是 YAML 配置文件的路径

  • config.ign 是输出 JSON 配置文件的路径

  • -p 命令选项会在输出文件中添加换行符,使其更易于阅读。