可以更改在阶段 2 生成的默认集群配置(请参见DeepSea 阶段说明)。例如,您可能需要更改网络设置或默认安装在管理节点上的软件。要执行前一项操作,可以修改在阶段 2 之后更新的 pillar;对于后一项操作,通常可以通过创建自定义 sls
文件并将其添加到 pillar 来完成。以下各节介绍了详细信息。
本节列出了需要添加/更改您自己的 sls
文件的多个任务。当您需要更改默认部署流程时,通常会使用这样的过程。
您的自定义 .sls 文件与 DeepSea 的 .sls 文件属于同一个子目录。为了防止从 DeepSea 包中新添加的文件重写您的 .sls 文件,请在您的文件名前面加上 custom-
字符串前缀。
如果您遇到一个不属于 DeepSea 部署过程的特定任务,因而需要跳过此任务,请按照下面的示例创建一个“no-operation”文件:
创建并保存包含以下内容的 /srv/salt/ceph/time/disabled.sls
:
disable time setting: test.nop
编辑 /srv/pillar/ceph/stack/global.yml
,添加下行,并保存该文件:
time_init: disabled
通过刷新 pillar 并运行以下步骤进行校验:
root@master #
salt target saltutil.pillar_refreshroot@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“disable time setting”可以是在 sls
文件中唯一的任何讯息。可通过指定唯一的说明来防止 ID 冲突。
如果需要将特定步骤的默认行为替换为自定义行为,请创建包含替换内容的自定义 sls
文件。
默认情况下,/srv/salt/ceph/pool/default.sls
会创建名为“demo”的 rbd 映像。在本示例中,我们不想创建此映像,而是需要以下两个映像:“archive1”和“archive2”。
创建并保存包含以下内容的 /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
要调用新建的自定义文件而不是默认文件,需要编辑 /srv/pillar/ceph/stack/ceph/cluster.yml
,添加下行,然后保存该文件:
pool_init: custom
通过刷新 pillar 并运行以下步骤进行校验:
root@master #
salt target saltutil.pillar_refreshroot@master #
salt 'admin.ceph' state.apply ceph.pool
创建存储池或映像需要有足够的授权。admin.ceph
Minion 具有管理密钥环。
另一种做法是更改 /srv/pillar/ceph/stack/ceph/roles/master.yml
中的变量。使用此文件可缓解其他 Minion 的 pillar 数据的混乱情况。
有时,您可能需要通过特定的步骤来执行某些附加任务。不建议修改相关的状态文件,因为这可能导致将来的升级变得复杂。应创建一个单独的文件来执行第 7.1.2 节 “替换部署步骤”中所述的相同附加任务。
为新的 sls
文件提供一个描述性名称。例如,如果除了 demo 映像以外,您还需要创建两个 rbd 映像,则可将文件命名为 archive.sls
。
创建并保存包含以下内容的 /srv/salt/ceph/pool/custom.sls
:
include: - .archive - .default
在本示例中,Salt 将会依次创建 archive 映像和 demo 映像。本示例中的顺序并不重要。要更改顺序,请颠倒 include:
指令后面的行。
可将 include 行直接添加到 archive.sls
,这样也会创建所有映像。但是,不管将 include 行放在哪个位置,Salt 都会先处理所包含文件中的步骤。尽管可以使用 requires 和 order 语句覆盖此行为,但使用包含其他语句的单独文件可保证顺序正确,并减少出现混淆的可能性。
编辑 /srv/pillar/ceph/stack/ceph/cluster.yml
,添加下行,并保存该文件:
pool_init: custom
通过刷新 pillar 并运行以下步骤进行校验:
root@master #
salt target saltutil.pillar_refreshroot@master #
salt 'admin.ceph' state.apply ceph.pool
如果需要添加完全独立的部署步骤,请创建 3 个新文件:用于执行命令的 sls
文件、编制文件,以及使新步骤与原始部署步骤保持一致的自定义文件。
例如,如果在执行准备阶段的过程中需要在所有 Minion 上运行 logrotate
:
首先创建一个 sls
文件并包含 logrotate
命令。
logrotate
#
创建一个目录,例如 /srv/salt/ceph/logrotate
。
创建并保存包含以下内容的 /srv/salt/ceph/logrotate/init.sls
:
rotate logs: cmd.run: - name: "/usr/sbin/logrotate /etc/logrotate.conf"
校验该命令是否在 Minion 上正常工作:
root@master #
salt 'admin.ceph' state.apply ceph.logrotate
由于编制文件需要在其他所有准备步骤之前运行,因此请将其添加到准备阶段 0:
创建并保存包含以下内容的 /srv/salt/ceph/stage/prep/logrotate.sls
:
logrotate: salt.state: - tgt: '*' - sls: ceph.logrotate
校验编制文件是否正常工作:
root@master #
salt-run state.orch ceph.stage.prep.logrotate
最后一个文件是自定义文件,其中包含附加步骤和原始步骤:
创建并保存包含以下内容的 /srv/salt/ceph/stage/prep/custom.sls
:
include: - .logrotate - .master - .minion
覆盖默认行为。编辑 /srv/pillar/ceph/stack/global.yml
,添加下行,并保存该文件:
stage_prep: custom
校验阶段 0 是否正常工作:
root@master #
salt-run state.orch ceph.stage.0
global.yml
?
之所以选择 global.yml
文件而不选择 cluster.yml
,是因为在准备阶段,所有 Minion 都不属于 Ceph 集群,并且无权访问 cluster.yml
中的任何设置。
在阶段 0(有关 DeepSea 阶段的详细信息,请参见DeepSea 阶段说明)期间,Salt Master 和 Salt Minion 可能会选择性地重引导,因为新更新的包(例如 kernel)需要重引导系统。
默认行为是安装可用的新更新且不重引导节点,即使进行内核更新时也是如此。
您可以在 /srv/pillar/ceph/stack/global.yml
文件中添加/更改 stage_prep_master
和 stage_prep_minion
选项,以更改 DeepSea 阶段 0 的默认更新/重引导行为。_prep_master
用于设置 Salt Master 的阶段 行为,stage_prep_minion
用于设置所有 Minion 的行为。所有可用的参数如下:
安装更新而不重引导。
安装更新并在更新之后重引导。
重引导而不安装更新。
不安装更新,也不重引导。
例如,要防止集群节点安装更新和重引导,请编辑 /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 [...]
完成阶段 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
中存在存储了默认配置设置的平行目录树。请不要更改此处的值,否则会将其重写。
更改所收集的配置的典型过程如下:
找到需要更改的配置项目的所在位置。例如,如果需要更改集群网络等集群相关设置,请编辑文件 /srv/pillar/ceph/stack/ceph/cluster.yml
。
保存文件。
运行以下命令来校验所做的更改:
root@master #
salt target saltutil.pillar_refresh
,再输入
root@master #
salt target pillar.items
由于普遍使用的网络寻址是 IPv4,您需要通过自定义设置来启用 IPv6。DeepSea 没有自动发现 IPv6 寻址的功能。
要配置 IPv6,请将 /srv/pillar/ceph/stack/global.yml
文件中的 public_network
和 cluster_network
变量设置为有效的 IPv6 子网。例如:
public_network: fd00:10::/64 cluster_network: fd00:11::/64
然后运行 DeepSea 阶段 2,并确认网络信息与该设置匹配。Stage 3 将生成包含必要标志的 ceph.conf
。
Ceph 不支持双栈,即无法同时在 IPv4 和 IPv6 上运行 Ceph。DeepSea 验证将拒绝 public_network
与 cluster_network
之间或任一变量内的不匹配项。下面就是未通过验证的示例。
public_network: "192.168.10.0/24 fd00:10::/64"
fe80::/10 link-local
地址
请避免使用 fe80::/10 link-local
地址。所有网络接口都会分配到一个 fe80
地址,因而需要有接口限定符才能正确进行路由。请指定分配给您站点的 IPv6 地址,或考虑使用 fd00::/8
。这些地址是 ULA 的一部分,无法进行全局路由。