适用于 SUSE Enterprise Storage 6

7 自定义默认配置

可以更改在阶段 2 生成的默认集群配置(请参见DeepSea 阶段说明)。例如,您可能需要更改网络设置或默认安装在管理节点上的软件。要执行前一项操作,可以修改在阶段 2 之后更新的 pillar;对于后一项操作,通常可以通过创建自定义 sls 文件并将其添加到 pillar 来完成。以下各节介绍了详细信息。

7.1 使用自定义的配置文件

本节列出了需要添加/更改您自己的 sls 文件的多个任务。当您需要更改默认部署流程时,通常会使用这样的过程。

提示
提示:为自定义 .sls 文件添加前缀

您的自定义 .sls 文件与 DeepSea 的 .sls 文件属于同一个子目录。为了防止从 DeepSea 包中新添加的文件重写您的 .sls 文件,请在您的文件名前面加上 custom- 字符串前缀。

7.1.1 禁用部署步骤

如果您遇到一个不属于 DeepSea 部署过程的特定任务,因而需要跳过此任务,请按照下面的示例创建一个“no-operation”文件:

过程 7.1︰ 禁用时间同步
  1. 创建并保存包含以下内容的 /srv/salt/ceph/time/disabled.sls

    disable time setting:
    test.nop
  2. 编辑 /srv/pillar/ceph/stack/global.yml,添加下行,并保存该文件:

    time_init: disabled
  3. 通过刷新 pillar 并运行以下步骤进行校验:

    root@master # salt target saltutil.pillar_refresh
    root@master # salt 'admin.ceph' state.apply ceph.time
    admin.ceph:
      Name: disable time setting - Function: test.nop - Result: Clean
    
    Summary for admin.ceph
    ------------
    Succeeded: 1
    Failed:    0
    ------------
    Total states run:     1
    注意
    注意:唯一 ID

    任务 ID“disable time setting”可以是在 sls 文件中唯一的任何讯息。可通过指定唯一的说明来防止 ID 冲突。

7.1.2 替换部署步骤

如果需要将特定步骤的默认行为替换为自定义行为,请创建包含替换内容的自定义 sls 文件。

默认情况下,/srv/salt/ceph/pool/default.sls 会创建名为“demo”的 rbd 映像。在本示例中,我们不想创建此映像,而是需要以下两个映像:“archive1”和“archive2”。

过程 7.2︰ demo rbd 映像替换为两个自定义 rbd 映像
  1. 创建并保存包含以下内容的 /srv/salt/ceph/pool/custom.sls

    wait:
      module.run:
        - name: wait.out
        - kwargs:
            'status': "HEALTH_ERR"1
        - fire_event: True
    
    archive1:
      cmd.run:
        - name: "rbd -p rbd create archive1 --size=1024"2
        - unless: "rbd -p rbd ls | grep -q archive1$"
        - fire_event: True
    
    archive2:
      cmd.run:
        - name: "rbd -p rbd create archive2 --size=768"
        - unless: "rbd -p rbd ls | grep -q archive2$"
        - fire_event: True

    1

    wait 扩展模块将会暂停,直到 Ceph 集群状态不是 HEALTH_ERR 为止。在全新安装中,当有足够数量的 OSD 可用且存储池创建完成之前,Ceph 集群可能会一直保持此状态。

    2

    rbd 命令不是幂等的。如果在提供映像之后重新运行同一个创建命令,则 Salt 状态将失败。unless 语句可防止这种情况。

  2. 要调用新建的自定义文件而不是默认文件,需要编辑 /srv/pillar/ceph/stack/ceph/cluster.yml,添加下行,然后保存该文件:

    pool_init: custom
  3. 通过刷新 pillar 并运行以下步骤进行校验:

    root@master # salt target saltutil.pillar_refresh
    root@master # salt 'admin.ceph' state.apply ceph.pool
注意
注意:授权

创建存储池或映像需要有足够的授权。admin.ceph Minion 具有管理密钥环。

提示
提示:替代方法

另一种做法是更改 /srv/pillar/ceph/stack/ceph/roles/master.yml 中的变量。使用此文件可缓解其他 Minion 的 pillar 数据的混乱情况。

7.1.3 修改部署步骤

有时,您可能需要通过特定的步骤来执行某些附加任务。不建议修改相关的状态文件,因为这可能导致将来的升级变得复杂。应创建一个单独的文件来执行第 7.1.2 节 “替换部署步骤”中所述的相同附加任务。

为新的 sls 文件提供一个描述性名称。例如,如果除了 demo 映像以外,您还需要创建两个 rbd 映像,则可将文件命名为 archive.sls

过程 7.3︰ 创建两个附加 rbd 映像
  1. 创建并保存包含以下内容的 /srv/salt/ceph/pool/custom.sls

    include:
     - .archive
     - .default
    提示
    提示:Include 优先顺序

    在本示例中,Salt 将会依次创建 archive 映像和 demo 映像。本示例中的顺序并不重要。要更改顺序,请颠倒 include: 指令后面的行。

    可将 include 行直接添加到 archive.sls,这样也会创建所有映像。但是,不管将 include 行放在哪个位置,Salt 都会先处理所包含文件中的步骤。尽管可以使用 requiresorder 语句覆盖此行为,但使用包含其他语句的单独文件可保证顺序正确,并减少出现混淆的可能性。

  2. 编辑 /srv/pillar/ceph/stack/ceph/cluster.yml,添加下行,并保存该文件:

    pool_init: custom
  3. 通过刷新 pillar 并运行以下步骤进行校验:

    root@master # salt target saltutil.pillar_refresh
    root@master # salt 'admin.ceph' state.apply ceph.pool

7.1.4 修改部署阶段

如果需要添加完全独立的部署步骤,请创建 3 个新文件:用于执行命令的 sls 文件、编制文件,以及使新步骤与原始部署步骤保持一致的自定义文件。

例如,如果在执行准备阶段的过程中需要在所有 Minion 上运行 logrotate

首先创建一个 sls 文件并包含 logrotate 命令。

过程 7.4︰ 在所有 Salt Minion 上运行 logrotate
  1. 创建一个目录,例如 /srv/salt/ceph/logrotate

  2. 创建并保存包含以下内容的 /srv/salt/ceph/logrotate/init.sls

    rotate logs:
      cmd.run:
        - name: "/usr/sbin/logrotate /etc/logrotate.conf"
  3. 校验该命令是否在 Minion 上正常工作:

    root@master # salt 'admin.ceph' state.apply ceph.logrotate

由于编制文件需要在其他所有准备步骤之前运行,因此请将其添加到准备阶段 0:

  1. 创建并保存包含以下内容的 /srv/salt/ceph/stage/prep/logrotate.sls

    logrotate:
      salt.state:
        - tgt: '*'
        - sls: ceph.logrotate
  2. 校验编制文件是否正常工作:

    root@master # salt-run state.orch ceph.stage.prep.logrotate

最后一个文件是自定义文件,其中包含附加步骤和原始步骤:

  1. 创建并保存包含以下内容的 /srv/salt/ceph/stage/prep/custom.sls

    include:
      - .logrotate
      - .master
      - .minion
  2. 覆盖默认行为。编辑 /srv/pillar/ceph/stack/global.yml,添加下行,并保存该文件:

    stage_prep: custom
  3. 校验阶段 0 是否正常工作:

    root@master # salt-run state.orch ceph.stage.0
注意
注意:为何使用 global.yml

之所以选择 global.yml 文件而不选择 cluster.yml,是因为在准备阶段,所有 Minion 都不属于 Ceph 集群,并且无权访问 cluster.yml 中的任何设置。

7.1.5 阶段 0 期间的更新和重引导

在阶段 0(有关 DeepSea 阶段的详细信息,请参见DeepSea 阶段说明)期间,Salt Master 和 Salt Minion 可能会选择性地重引导,因为新更新的包(例如 kernel)需要重引导系统。

默认行为是安装可用的新更新且重引导节点,即使进行内核更新时也是如此。

您可以在 /srv/pillar/ceph/stack/global.yml 文件中添加/更改 stage_prep_masterstage_prep_minion 选项,以更改 DeepSea 阶段 0 的默认更新/重引导行为。_prep_master 用于设置 Salt Master 的阶段 行为,stage_prep_minion 用于设置所有 Minion 的行为。所有可用的参数如下:

default

安装更新而不重引导。

default-update-reboot

安装更新并在更新之后重引导。

default-no-update-reboot

重引导而不安装更新。

default-no-update-no-reboot

不安装更新,也不重引导。

例如,要防止集群节点安装更新和重引导,请编辑 /srv/pillar/ceph/stack/global.yml,添加以下几行:

stage_prep_master: default-no-update-no-reboot
stage_prep_minion: default-no-update-no-reboot
提示
提示:值和相应文件

stage_prep_master 的值与位于 /srv/salt/ceph/stage/0/master 中的文件名相对应,而 stage_prep_minion 的值与位于 /srv/salt/ceph/stage/0/minion 中的文件相对应:

root@master # ls -l /srv/salt/ceph/stage/0/master
default-no-update-no-reboot.sls
default-no-update-reboot.sls
default-update-reboot.sls
[...]

root@master # ls -l /srv/salt/ceph/stage/0/minion
default-no-update-no-reboot.sls
default-no-update-reboot.sls
default-update-reboot.sls
[...]

7.2 修改已发现的配置

完成阶段 2 之后,您可能需要更改已发现的配置。要查看当前设置,请运行:

root@master # salt target pillar.items

单个 Minion 的默认配置的输出通常类似下方所示:

----------
    available_roles:
        - admin
        - mon
        - storage
        - mds
        - igw
        - rgw
        - client-cephfs
        - client-radosgw
        - client-iscsi
        - mds-nfs
        - rgw-nfs
        - master
    cluster:
        ceph
    cluster_network:
        172.16.22.0/24
    fsid:
        e08ec63c-8268-3f04-bcdb-614921e94342
    master_minion:
        admin.ceph
    mon_host:
        - 172.16.21.13
        - 172.16.21.11
        - 172.16.21.12
    mon_initial_members:
        - mon3
        - mon1
        - mon2
    public_address:
        172.16.21.11
    public_network:
        172.16.21.0/24
    roles:
        - admin
        - mon
        - mds
    time_server:
        admin.ceph
    time_service:
        ntp

将在多个配置文件之间分布上述设置。包含这些文件的目录结构在 /srv/pillar/ceph/stack/stack.cfg 目录中定义。以下文件通常用于描述您的集群:

  • /srv/pillar/ceph/stack/global.yml - 该文件会影响 Salt 集群中的所有 Minion。

  • /srv/pillar/ceph/stack/ceph/cluster.yml - 该文件会影响名为 ceph 的 Ceph 集群中的所有 Minion。

  • /srv/pillar/ceph/stack/ceph/roles/role.yml - 会影响 ceph 集群中指定了特定角色的所有 Minion。

  • /srv/pillar/ceph/stack/ceph/minions/MINION_ID/yml - 会影响单个 Minion。

注意
注意:重写包含默认值的目录

/srv/pillar/ceph/stack/default 中存在存储了默认配置设置的平行目录树。请不要更改此处的值,否则会将其重写。

更改所收集的配置的典型过程如下:

  1. 找到需要更改的配置项目的所在位置。例如,如果需要更改集群网络等集群相关设置,请编辑文件 /srv/pillar/ceph/stack/ceph/cluster.yml

  2. 保存文件。

  3. 运行以下命令来校验所做的更改:

    root@master # salt target saltutil.pillar_refresh

    ,再输入

    root@master # salt target pillar.items

7.2.1 为 Ceph 集群部署启用 IPv6

由于普遍使用的网络寻址是 IPv4,您需要通过自定义设置来启用 IPv6。DeepSea 没有自动发现 IPv6 寻址的功能。

要配置 IPv6,请将 /srv/pillar/ceph/stack/global.yml 文件中的 public_networkcluster_network 变量设置为有效的 IPv6 子网。例如:

public_network: fd00:10::/64
cluster_network: fd00:11::/64

然后运行 DeepSea 阶段 2,并确认网络信息与该设置匹配。Stage 3 将生成包含必要标志的 ceph.conf

重要
重要:不支持双栈

Ceph 不支持双栈,即无法同时在 IPv4 和 IPv6 上运行 Ceph。DeepSea 验证将拒绝 public_networkcluster_network 之间或任一变量内的不匹配项。下面就是未通过验证的示例。

public_network: "192.168.10.0/24 fd00:10::/64"
提示
提示:避免使用 fe80::/10 link-local 地址

请避免使用 fe80::/10 link-local 地址。所有网络接口都会分配到一个 fe80 地址,因而需要有接口限定符才能正确进行路由。请指定分配给您站点的 IPv6 地址,或考虑使用 fd00::/8。这些地址是 ULA 的一部分,无法进行全局路由。

打印此页