跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Enterprise Storage 7 文档 / 部署指南 / 部署 Ceph 集群 / 使用 cephadm 进行部署
适用范围 SUSE Enterprise Storage 7

5 使用 cephadm 进行部署

SUSE Enterprise Storage 7 使用基于 Salt 的 ceph-salt 工具在每个参与集群节点上准备操作系统,以便通过 cephadm 进行部署。cephadm 通过 SSH 从 Ceph Manager 守护进程连接到主机,以部署和管理 Ceph 集群。cephadm 管理 Ceph 集群的整个生命周期。它会首先在单个节点(一个 MON 和 MGR 服务)上引导一个小型集群,然后使用编制接口扩展集群,以容纳所有主机并供给所有 Ceph 服务。您可以通过 Ceph 命令行界面 (CLI) 或部分通过 Ceph Dashboard (GUI) 执行此操作。

重要
重要

请注意,在初始部署期间,Ceph 社区文档使用 cephadm bootstrap 命令。ceph-salt 会调用 cephadm bootstrap 命令,不应直接运行该命令。不支持使用 cephadm bootstrap 进行任何手动 Ceph 集群部署。

要使用 cephadm 部署 Ceph 集群,需要完成以下任务:

  1. 在所有集群节点上安装 SUSE Linux Enterprise Server 15 SP2 并完成底层操作系统的基本配置。

  2. 在所有集群节点上部署 Salt 基础架构,以便通过 ceph-salt 执行初始部署准备。

  3. 通过 ceph-salt 配置集群的基本属性并进行部署。

  4. 为集群添加新的节点和角色,并使用 cephadm 向其部署服务。

5.1 安装和配置 SUSE Linux Enterprise Server

  1. 在每个集群节点上安装并注册 SUSE Linux Enterprise Server 15 SP2。在安装 SUSE Enterprise Storage 期间,需要访问更新储存库,因此必须注册。至少包含以下模块:

    • Basesystem 模块

    • Server Applications Module

    有关如何安装 SUSE Linux Enterprise Server 的更多详细信息,请参见 https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-install.html

  2. 在每个集群节点上安装 SUSE Enterprise Storage 7 扩展。

    提示
    提示:将 SUSE Enterprise Storage 与 SUSE Linux Enterprise Server 一起安装

    您可以在安装 SUSE Linux Enterprise Server 15 SP2 之后单独安装 SUSE Enterprise Storage 7 扩展,也可以在 SUSE Linux Enterprise Server 15 SP2 安装过程中添加该扩展。

    有关如何安装扩展的更多详细信息,请参见 https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-register-sle.html

  3. 在每个节点上配置网络设置,包括正确的 DNS 名称解析。有关配置网络的详细信息,请参见 https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-network.html#sec-network-yast。有关配置 DNS 服务器的详细信息,请参见 https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-dns.html

5.2 部署 Salt

SUSE Enterprise Storage 使用 Salt 和 ceph-salt 进行初始集群准备。Salt 可帮助您从一个名为 Salt Master 的专用主机同时针对多个集群节点配置和运行命令。在部署 Salt 之前,请考虑以下要点:

  • Salt Minion 是由一个名为 Salt Master 的专用节点控制的节点。

  • 如果 Salt Master 主机应属于 Ceph 集群的一部分,则它需要运行自己的 Salt Minion,但这不是必须的。

    提示
    提示:每台服务器共享多个角色

    如果将每个角色都部署在一个独立节点上,则 Ceph 集群的性能是最佳的。但实际部署有时会要求多个角色共享一个节点。为避免性能欠佳以及升级过程出现问题,请勿向管理节点部署 Ceph OSD、元数据服务器或 Ceph Monitor 角色。

  • Salt Minion 需要能通过网络正确解析 Salt Master 的主机名。默认情况下,Minion 会查找 salt 主机名,但您可以在 /etc/salt/minion 文件中指定可通过网络访问的任何其他主机名。

  1. 在 Salt Master 节点上安装 salt-master

    root@master # zypper in salt-master
  2. 检查 salt-master 服务是否已启用并启动,并根据需要将它启用并启动:

    root@master # systemctl enable salt-master.service
    root@master # systemctl start salt-master.service
  3. 如果要使用防火墙,请确认 Salt Master 节点是否为所有 Salt Minion 节点打开了端口 4505 和 4506。如果这些端口处于关闭状态,可以使用 yast2 firewall 命令并通过允许相应区域的 salt-master 服务来打开这些端口。例如,public

  4. 在所有 Minion 节点上安装 salt-minion 包。

    root@minion > zypper in salt-minion
  5. 编辑 /etc/salt/minion 并取消注释以下行:

    #log_level_logfile: warning

    warning 日志级别更改为 info

    注意
    注意:log_level_logfilelog_level

    log_level 用于控制屏幕上将显示的日志讯息,而 log_level_logfile 用于控制哪些日志讯息将写入到 /var/log/salt/minion

    注意
    注意

    请务必更改所有集群 (Minion) 节点上的日志级别。

  6. 确保所有其他节点都可以将每个节点的完全限定域名解析为公共集群网络上的 IP 地址。

  7. 将所有 Minion 配置为连接到 Master。如果无法通过主机名 salt 访问 Salt Master,请编辑文件 /etc/salt/minion,或创建包含以下内容的新文件 /etc/salt/minion.d/master.conf

    master: host_name_of_salt_master

    如果对上述配置文件执行了任何更改,请在所有相关的 Salt Minion 上重启动 Salt 服务:

    root@minion > systemctl restart salt-minion.service
  8. 检查所有节点上是否已启用并启动 salt-minion 服务。根据需要启用并启动该服务:

    root # systemctl enable salt-minion.service
    root # systemctl start salt-minion.service
  9. 确认每个 Salt Minion 的指纹,如果指纹匹配,则接受 Salt Master 上的所有 Salt 密钥。

    注意
    注意

    如果 Salt Minion 指纹返回空白,请确保 Salt Minion 具有 Salt Master 配置且可与 Salt Master 通讯。

    查看每个 Minion 的指纹:

    root@minion > salt-call --local key.finger
    local:
    3f:a3:2f:3f:b4:d3:d9:24:49:ca:6b:2c:e1:6c:3f:c3:83:37:f0:aa:87:42:e8:ff...

    收集到所有 Salt Minion 的指纹后,将列出 Salt Master 上所有未接受 Minion 密钥的指纹:

    root@master # salt-key -F
    [...]
    Unaccepted Keys:
    minion1:
    3f:a3:2f:3f:b4:d3:d9:24:49:ca:6b:2c:e1:6c:3f:c3:83:37:f0:aa:87:42:e8:ff...

    如果 Minion 的指纹匹配,则接受这些密钥:

    root@master # salt-key --accept-all
  10. 校验是否已接受密钥:

    root@master # salt-key --list-all
  11. 测试是否所有 Salt Minion 都响应:

    root@master # salt-run manage.status

5.3 部署 Ceph 集群

本节将指导您完成部署基本 Ceph 集群的过程。请仔细阅读下面的小节,并按给定的顺序执行所包含的命令。

5.3.1 安装 ceph-salt

ceph-salt 提供了用于部署由 cephadm 管理的 Ceph 集群的工具。ceph-salt 使用 Salt 基础架构来执行操作系统管理(例如,软件更新或时间同步),并为 Salt Minion 定义角色。

在 Salt Master 上,安装 ceph-salt 软件包)更改内存策略模式:

root@master # zypper install ceph-salt

以上命令将作为依赖项安装 ceph-salt-formula ,它通过在 /etc/salt/master.d 目录中插入额外文件来修改 Salt Master 配置。要应用更改,请重启动 salt-master.service 并同步 Salt 模块:

root@master # systemctl restart salt-master.service
root@master # salt \* saltutil.sync_all

5.3.2 配置集群属性

使用 ceph-salt config 命令可配置集群的基本属性。

重要
重要

/etc/ceph/ceph.conf 文件由 cephadm 管理,用户不得编辑该文件。应使用新的 ceph config 命令设置 Ceph 配置参数。有关更多信息,请参见第 28.2 节 “配置数据库”

5.3.2.1 使用 ceph-salt 外壳

如果在不带任何路径或子命令的情况下运行 ceph-salt config,您将进入交互式 ceph-salt 外壳。如果您需要成批配置多个属性,并且不想键入完整的命令语法,使用外壳会非常方便。

root@master # ceph-salt config
/> ls
o- / ............................................................... [...]
  o- ceph_cluster .................................................. [...]
  | o- minions .............................................. [no minions]
  | o- roles ....................................................... [...]
  |   o- admin .............................................. [no minions]
  |   o- bootstrap ........................................... [no minion]
  |   o- cephadm ............................................ [no minions]
  |   o- tuned ..................................................... [...]
  |     o- latency .......................................... [no minions]
  |     o- throughput ....................................... [no minions]
  o- cephadm_bootstrap ............................................. [...]
  | o- advanced .................................................... [...]
  | o- ceph_conf ................................................... [...]
  | o- ceph_image_path .................................. [ no image path]
  | o- dashboard ................................................... [...]
  | | o- force_password_update ................................. [enabled]
  | | o- password ................................................ [admin]
  | | o- ssl_certificate ....................................... [not set]
  | | o- ssl_certificate_key ................................... [not set]
  | | o- username ................................................ [admin]
  | o- mon_ip .................................................. [not set]
  o- containers .................................................... [...]
  | o- registries_conf ......................................... [enabled]
  | | o- registries .............................................. [empty]
  | o- registry_auth ............................................... [...]
  |   o- password .............................................. [not set]
  |   o- registry .............................................. [not set]
  |   o- username .............................................. [not set]
  o- ssh ............................................... [no key pair set]
  | o- private_key .................................. [no private key set]
  | o- public_key .................................... [no public key set]
  o- time_server ........................... [enabled, no server host set]
    o- external_servers .......................................... [empty]
    o- servers ................................................... [empty]
    o- subnet .................................................. [not set]

ceph-saltls 命令输出中您可以看到,集群配置是以树状结构组织的。要在 ceph-salt 外壳中配置集群的特定属性,可使用以下两个选项:

  • 从当前位置运行命令,并输入属性的绝对路径作为第一个自变量:

    /> /cephadm_bootstrap/dashboard ls
    o- dashboard ....................................................... [...]
      o- force_password_update ..................................... [enabled]
      o- password .................................................... [admin]
      o- ssl_certificate ........................................... [not set]
      o- ssl_certificate_key ....................................... [not set]
      o- username .................................................... [admin]
    /> /cephadm_bootstrap/dashboard/username set ceph-admin
    Value set.
  • 更改为需要配置和运行命令的属性的路径:

    /> cd /cephadm_bootstrap/dashboard/
    /ceph_cluster/minions> ls
    o- dashboard ....................................................... [...]
      o- force_password_update ..................................... [enabled]
      o- password .................................................... [admin]
      o- ssl_certificate ........................................... [not set]
      o- ssl_certificate_key ....................................... [not set]
      o- username ................................................[ceph-admin]
提示
提示:自动完成配置代码段

ceph-salt 外壳中,您可以使用类似于常规 Linux 外壳 (Bash) 自动完成的自动完成功能。它可以完成配置路径、子命令或 Salt Minion 名称。自动完成配置路径时,可使用以下两个选项:

  • 要让外壳完成您当前位置的相对路径,请按 TAB 键 →| 两次。

  • 要让外壳完成绝对路径,请输入 / 并按 TAB 键 →| 两次。

提示
提示:使用光标键导航

如果从 ceph-salt 外壳输入 cd 而不带任何路径,则该命令将列显集群配置的树状结构,其中当前路径对应的行处于活动状态。您可以使用向上和向下光标键在各行之间导航。按 Enter 进行确认后,配置路径将更改为最后一个活动路径。

重要
重要:约定

为了保持文档的一致性,我们将使用单一命令语法,而不输入 ceph-salt 外壳。例如,您可以使用以下命令列出集群配置树:

root@master # ceph-salt config ls

5.3.2.2 添加 Salt Minion

将我们在第 5.2 节 “部署 Salt”中部署并接受的所有或部分 Salt Minion 包含到 Ceph 集群配置中。您可以通过全名指定 Salt Minion,也可以使用 glob 表达式“*”和“?”一次包含多个 Salt Minion。在 /ceph_cluster/minions 路径下使用 add 子命令。以下命令包含所有已接受 Salt Minion:

root@master # ceph-salt config /ceph_cluster/minions add '*'

确认是否添加了指定的 Salt Minion:

root@master # ceph-salt config /ceph_cluster/minions ls
o- minions ................................................. [Minions: 5]
  o- ses-master.example.com .................................. [no roles]
  o- ses-min1.example.com .................................... [no roles]
  o- ses-min2.example.com .................................... [no roles]
  o- ses-min3.example.com .................................... [no roles]
  o- ses-min4.example.com .................................... [no roles]

5.3.2.3 指定由 cephadm 管理的 Salt Minion

指定哪些节点将属于 Ceph 集群并由 cephadm 管理。包含将运行 Ceph 服务的所有节点以及管理节点:

root@master # ceph-salt config /ceph_cluster/roles/cephadm add '*'

5.3.2.4 指定管理节点

管理节点是安装 ceph.conf 配置文件和 Ceph 管理密钥环的节点。通常在管理节点上运行与 Ceph 相关的命令。

提示
提示:Salt Master 和管理节点位于同一节点

在所有或大多数主机都属于 SUSE Enterprise Storage 的同类环境中,建议将管理节点和 Salt Master 置于同一主机。

而对于一个 Salt 基础架构托管多个集群(例如 SUSE Enterprise Storage 和 SUSE Manager)的异构环境,请将管理节点和 Salt Master 置于同一主机。

要指定管理节点,请运行以下命令:

root@master # ceph-salt config /ceph_cluster/roles/admin add ses-master.example.com
1 minion added.
root@master # ceph-salt config /ceph_cluster/roles/admin ls
o- admin ................................................... [Minions: 1]
  o- ses-master.example.com ...................... [Other roles: cephadm]
提示
提示:在多个节点上安装 ceph.conf 和管理密钥环

如果是部署所需,您可以在多个节点上安装 Ceph 配置文件和管理密钥环。出于安全原因,请避免将其安装在集群的所有节点上。

5.3.2.5 指定第一个 MON/MGR 节点

您需要指定将要引导集群的集群 Salt Minion。此 Minion 将成为第一个运行 Ceph Monitor 和 Ceph Manager 服务的 Minion。

root@master # ceph-salt config /ceph_cluster/roles/bootstrap set ses-min1.example.com
Value set.
root@master # ceph-salt config /ceph_cluster/roles/bootstrap ls
o- bootstrap ..................................... [ses-min1.example.com]

此外,您还需要在公共网络上指定引导 MON 的 IP 地址,以确保 public_network 参数设置正确,例如:

root@master # ceph-salt config /cephadm_bootstrap/mon_ip set 192.168.10.20

5.3.2.6 指定调整的配置

您需要指定集群的哪些 Minion 具有主动调整的配置。为此,请使用以下命令显式添加这些角色:

注意
注意

一个 Minion 不能同时拥有 latencythroughput 角色。

root@master # ceph-salt config /ceph_cluster/roles/tuned/latency add ses-min1.example.com
Adding ses-min1.example.com...
1 minion added.
root@master # ceph-salt config /ceph_cluster/roles/tuned/throughput add ses-min2.example.com
Adding ses-min2.example.com...
1 minion added.

5.3.2.7 生成 SSH 密钥对

cephadm 使用 SSH 协议与集群节点通讯。将自动创建名为 cephadm 的用户帐户并用于 SSH 通讯。

您需要生成 SSH 密钥对的私用和公共部分:

root@master # ceph-salt config /ssh generate
Key pair generated.
root@master # ceph-salt config /ssh ls
o- ssh .................................................. [Key Pair set]
  o- private_key ..... [53:b1:eb:65:d2:3a:ff:51:6c:e2:1b:ca:84:8e:0e:83]
  o- public_key ...... [53:b1:eb:65:d2:3a:ff:51:6c:e2:1b:ca:84:8e:0e:83]

5.3.2.8 配置时间服务器

所有集群节点都需要与可靠的时间源进行时间同步。有以下几种方案可以实现时间同步:

  • 如果所有集群节点都已配置为使用所选 NTP 服务同步其时间,请完全禁用时间服务器处理:

    root@master # ceph-salt config /time_server disable
  • 如果您的站点已有单一时间源,请指定时间源的主机名:

     root@master # ceph-salt config /time_server/servers add time-server.example.com
  • 另外,ceph-salt 可以配置一个 Salt Minion 来充当集群其余 Minion 的时间服务器。有时,它被称为“内部时间服务器”。在此方案中,ceph-salt 将配置内部时间服务器(应为其中一个 Salt Minion)以使其时间与外部时间服务器(例如 pool.ntp.org)同步,并将所有其他 Minion 配置为从内部时间服务器获取时间。可以通过以下命令来实现:

    root@master # ceph-salt config /time_server/servers add ses-master.example.com
    root@master # ceph-salt config /time_server/external_servers add pool.ntp.org

    /time_server/subnet 选项指定允许 NTP 客户端通过其访问 NTP 服务器的子网。当您指定 /time_server/servers 时,会自动设置该选项。如果需要更改该选项或手动指定,请运行:

    root@master # ceph-salt config /time_server/subnet set 10.20.6.0/24

检查时间服务器设置:

root@master # ceph-salt config /time_server ls
o- time_server ................................................ [enabled]
  o- external_servers ............................................... [1]
  | o- pool.ntp.org ............................................... [...]
  o- servers ........................................................ [1]
  | o- ses-master.example.com ..................................... [...]
  o- subnet .............................................. [10.20.6.0/24]

有关设置时间同步的详细信息,请参见 https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-ntp.html#sec-ntp-yast

5.3.2.9 配置 Ceph Dashboard 登录身份凭证

部署完基本集群后便可使用 Ceph Dashboard。要访问 Ceph Dashboard,您需要设置有效的用户名和密码,例如:

root@master # ceph-salt config /cephadm_bootstrap/dashboard/username set admin
root@master # ceph-salt config /cephadm_bootstrap/dashboard/password set PWD
提示
提示:强制密码更新

默认情况下,系统将强制第一位仪表盘用户在首次登录仪表盘时更改其密码。要禁用此功能,请运行以下命令:

root@master # ceph-salt config /cephadm_bootstrap/dashboard/force_password_update disable

5.3.2.10 配置容器映像的路径

cephadm 需要知道将在部署步骤中使用的容器映像的有效 URI 路径。确认是否设置了默认路径:

root@master # ceph-salt config /cephadm_bootstrap/ceph_image_path ls

如果未设置默认路径或者您的部署需要特定路径,请使用如下命令添加该路径:

root@master # ceph-salt config /cephadm_bootstrap/ceph_image_path set registry.suse.com/ses/7/ceph/ceph
注意
注意

对于监控堆栈,需要更多的容器映像。对于实体隔离部署以及从本地注册表的部署,此时您可能想要获取这些映像,以便相应地准备您的本地注册表。

请注意,ceph-salt 不会将这些容器映像用于部署。而只是为后面的步骤做准备,在后面的步骤中将使用 cephadm 来部署或迁移监控组件。

有关监控堆栈所使用的映像以及如何自定义这些映像的详细信息,请访问第 16.1 节 “配置自定义或本地映像”页面。

5.3.2.11 配置容器注册表

(可选)您可以设置本地容器注册表。它将充当 registry.suse.com 注册表的镜像。请记住,每当 registry.suse.com 中提供了新的更新容器,就需要重新同步本地注册表。

在以下情况下,创建本地注册表非常有用:

  • 您有许多集群节点,希望通过创建容器映像的本地镜像来节省下载时间和带宽。

  • 您的集群无法访问联机注册表(实体隔离部署),您需要一个本地镜像来从中提取容器映像。

  • 如果有配置或网络问题阻止您的集群通过安全链接访问远程注册表,则您需要一个本地的未加密注册表。

重要
重要

要在支持的系统上部署程序临时修复 (PTF),您需要部署本地容器注册表。

要配置本地注册表 URL 和访问身份凭证,请执行以下操作:

  1. 配置本地注册表的 URL:

    cephuser@adm > ceph-salt config /containers/registry_auth/registry set REGISTRY_URL
  2. 配置用户名和密码以访问本地注册表:

    cephuser@adm > ceph-salt config /containers/registry_auth/username set REGISTRY_USERNAME
    cephuser@adm > ceph-salt config /containers/registry_auth/password set REGISTRY_PASSWORD
  3. 运行 ceph-salt apply 以更新所有 Minion 上的 Salt pillar。

提示
提示:注册表缓存

要避免在出现新的更新容器时重新同步本地注册表,您可以配置注册表缓存

云本机应用开发和分发方法需要一个注册表和一个 CI/CD(持续集成/分发)实例来开发和生产容器映像。在此实例中,您可以使用专用注册表。

5.3.2.12 启用数据传输中加密 (msgr2)

Messenger v2 协议 (MSGR2) 是 Ceph 的线上传输协议。它提供了一种可对正在通过网络传输的所有数据进行加密的安全模式,封装了身份验证有效负载,并支持未来集成新的身份验证模式(例如 Kerberos)。

重要
重要

Linux 内核 Ceph 客户端(例如 CephFS 和 RADOS 块设备)当前不支持 msgr2。

Ceph 守护进程可以绑定到多个端口,以便让旧 Ceph 客户端和支持 v2 的新客户端能够连接到同一集群。默认情况下,针对新的 v2 协议,MON 现在会绑定到 IANA 指定的新端口 3300(CE4h 或 0xCE4),而针对旧版 v1 协议,则会绑定到旧的默认端口 6789。

v2 协议 (MSGR2) 支持以下两种连接模式:

crc 模式

建立连接时进行强初始身份验证和 CRC32C 完整性检查。

secure 模式

建立连接时进行强初始身份验证,并对所有身份验证后流量进行完全加密,包括加密完整性检查。

对于大多数连接,有一些选项可以控制使用哪种模式:

ms_cluster_mode

用于 Ceph 守护进程之间的集群内通讯的连接模式(或允许的模式)。如果列出了多种模式,则首选最先列出的模式。

ms_service_mode

连接到集群时允许客户端使用的模式列表。

ms_client_mode

与 Ceph 集群通讯时,供客户端使用(或允许)的连接模式列表,按首选项排序。

有一组专用于 Monitor 的并行选项集,允许管理员设置与 Monitor 通讯的不同(通常更安全)要求。

ms_mon_cluster_mode

在 Monitor 之间使用的连接模式(或允许的模式)。

ms_mon_service_mode

连接到 Monitor 时,供客户端或其他 Ceph 守护进程使用的允许模式列表。

ms_mon_client_mode

连接到 Monitor 时,供客户端或非 Monitor 守护进程使用的连接模式的列表,按首选项排序。

要在部署期间启用 MSGR2 加密模式,您需要在运行 ceph-salt apply 之前向 ceph-salt 配置添加一些配置选项。

要使用 secure 模式,请运行以下命令。

ceph-salt 配置工具中的 ceph_conf 添加全局部分。

root@master # ceph-salt config /cephadm_bootstrap/ceph_conf add global

设置以下选项:

root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set ms_cluster_mode "secure crc"
root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set ms_service_mode "secure crc"
root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set ms_client_mode "secure crc"
注意
注意

确保 secure 先于 crc

强制使用 secure 模式,请运行以下命令:

root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set ms_cluster_mode secure
root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set ms_service_mode secure
root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set ms_client_mode secure
提示
提示:更新设置

如果您要更改上述任何设置,请在 Monitor 配置存储中设置配置更改。此操作使用 ceph config set 命令实现。

root@master # ceph config set global CONNECTION_OPTION CONNECTION_MODE [--force]

例如:

root@master # ceph config set global ms_cluster_mode "secure crc"

如果要检查当前值(包括默认值),请运行以下命令:

root@master # ceph config get CEPH_COMPONENT CONNECTION_OPTION

例如,要获取 OSD 的 ms_cluster_mode,请运行:

root@master # ceph config get osd ms_cluster_mode

5.3.2.13 配置集群网络

(可选)如果运行的是独立的集群网络,则可能需要设置集群网络 IP 地址并后跟斜线符号及子网掩码部分,例如 192.168.10.22/24

运行以下命令可启用 cluster_network

root@master # ceph-salt config /cephadm_bootstrap/ceph_conf add global
root@master # ceph-salt config /cephadm_bootstrap/ceph_conf/global set cluster_network NETWORK_ADDR

5.3.2.14 确认集群配置

最低集群配置已完成。请检查是否存在明显错误:

root@master # ceph-salt config ls
o- / ............................................................... [...]
  o- ceph_cluster .................................................. [...]
  | o- minions .............................................. [Minions: 5]
  | | o- ses-master.example.com .................................. [admin]
  | | o- ses-min1.example.com ......................... [bootstrap, admin]
  | | o- ses-min2.example.com ................................. [no roles]
  | | o- ses-min3.example.com ................................. [no roles]
  | | o- ses-min4.example.com ................................. [no roles]
  | o- roles ....................................................... [...]
  |   o- admin .............................................. [Minions: 2]
  |   | o- ses-master.example.com ....................... [no other roles]
  |   | o- ses-min1.example.com ................. [other roles: bootstrap]
  |   o- bootstrap ................................ [ses-min1.example.com]
  |   o- cephadm ............................................ [Minions: 5]
  |   o- tuned ..................................................... [...]
  |     o- latency .......................................... [no minions]
  |     o- throughput ....................................... [no minions]
  o- cephadm_bootstrap ............................................. [...]
  | o- advanced .................................................... [...]
  | o- ceph_conf ................................................... [...]
  | o- ceph_image_path ............... [registry.suse.com/ses/7/ceph/ceph]
  | o- dashboard ................................................... [...]
  |   o- force_password_update ................................. [enabled]
  |   o- password ................................... [randomly generated]
  |   o- username ................................................ [admin]
  | o- mon_ip ............................................ [192.168.10.20]
  o- containers .................................................... [...]
  | o- registries_conf ......................................... [enabled]
  | | o- registries .............................................. [empty]
  | o- registry_auth ............................................... [...]
  |   o- password .............................................. [not set]
  |   o- registry .............................................. [not set]
  |   o- username .............................................. [not set]
  o- ssh .................................................. [Key Pair set]
  | o- private_key ..... [53:b1:eb:65:d2:3a:ff:51:6c:e2:1b:ca:84:8e:0e:83]
  | o- public_key ...... [53:b1:eb:65:d2:3a:ff:51:6c:e2:1b:ca:84:8e:0e:83]
  o- time_server ............................................... [enabled]
    o- external_servers .............................................. [1]
    | o- 0.pt.pool.ntp.org ......................................... [...]
    o- servers ....................................................... [1]
    | o- ses-master.example.com .................................... [...]
    o- subnet ............................................. [10.20.6.0/24]
提示
提示:集群配置的状态

您可以通过运行以下命令检查集群的配置是否有效:

root@master # ceph-salt status
cluster: 5 minions, 0 hosts managed by cephadm
config: OK

5.3.2.15 导出集群配置

在配置了基本集群并且其配置有效之后,最好将其配置导出到文件中:

root@master # ceph-salt export > cluster.json
警告
警告

ceph-salt export 的输出中包含 SSH 私用密钥。如果您担心安全问题,请不要在未采取适当预防措施的情况下执行此命令。

如果集群配置损坏并需要恢复到备份状态,请运行:

root@master # ceph-salt import cluster.json

5.3.3 更新节点并引导最小集群

部署集群之前,请更新所有节点上的所有软件包:

root@master # ceph-salt update

如果节点在更新期间报告 Reboot is needed,则表示重要的操作系统包(例如内核)已更新到更新版本,您需要重引导节点才能应用更改。

要重引导所有需要重引导的节点,请追加 --reboot 选项

root@master # ceph-salt update --reboot

或者在单独的步骤中重引导这些节点:

root@master # ceph-salt reboot
重要
重要

永远不会通过 ceph-salt update --rebootceph-salt reboot 命令重引导 Salt Master。如果 Salt Master 需要重引导,您需要手动进行重引导。

更新节点后,请引导最小集群:

root@master # ceph-salt apply
注意
注意

引导完成后,集群将拥有一个 Ceph Monitor 和一个 Ceph Manager。

以上命令将打开一个交互式用户界面,其中会显示每个 Minion 的当前进度。

部署最小集群
图 5.1︰ 部署最小集群
提示
提示:非交互模式

如果您需要从脚本应用配置,还有一种非交互的部署模式。此模式在从远程计算机部署集群时也很有用,因为通过网络不断更新屏幕上的进度信息可能会对用户造成干扰:

root@master # ceph-salt apply --non-interactive

5.3.4 查看最后的步骤

ceph-salt apply 命令完成后,您便应该会有一个 Ceph Monitor 和一个 Ceph Manager。您应该能够在任何以 root 身份或使用 sudocephadm 用户身份被授予 admin 角色的 Minion 上成功运行 ceph status 命令。

后续步骤包括使用 cephadm 部署额外的 Ceph Monitor、Ceph Manager、OSD、监控堆栈和网关。

继续之前,请查看新集群的网络设置。此时,已根据在 ceph-salt 配置中针对 /cephadm_bootstrap/mon_ip 输入的值填充了 public_network 设置。不过,此设置仅适用于 Ceph Monitor。您可以使用以下命令查看此设置:

root@master # ceph config get mon public_network

这是 Ceph 正常工作所需的最低配置,但还是建议您将此 public_network 设为 global,这意味着它将应用于所有类型的 Ceph 守护进程,而不仅仅应用于 MON:

root@master # ceph config set global public_network "$(ceph config get mon public_network)"
注意
注意

此步骤不是必需的。但如果不使用此设置,Ceph OSD 和其他守护进程(Ceph Monitor 除外)将侦听所有地址

如果您希望在各 OSD 之间使用完全独立的网络进行通讯,请运行以下命令:

root@master # ceph config set global cluster_network "cluster_network_in_cidr_notation"

执行此命令将确保您部署中所创建的 OSD 从一开始就使用预期的集群网络。

如果您的集群设置为具有密集节点(每个主机有超过 62 个 OSD),请确保为 Ceph OSD 指定足够的端口。默认范围 (6800-7300) 当前允许每个主机有不超过 62 个 OSD。对于具有密集节点的集群,请将设置 ms_bind_port_max 调整到适当的值。每个 OSD 将使用 8 个额外的端口。例如,如果一台主机设置为运行 96 个 OSD,则需要 768 个端口。通过运行以下命令,应将 ms_bind_port_max 至少设置为 7568:

root@master # ceph config set osd.* ms_bind_port_max 7568

您需要相应地调整防火墙设置才能使其正常工作。有关更多信息,请参见第 13.7 节 “Firewall settings for Ceph”

5.4 部署服务和网关

部署基本 Ceph 集群之后,请将核心服务部署到更多集群节点。为使客户端能够访问集群数据,还需要部署额外的服务。

目前,我们支持使用 Ceph orchestrator(ceph orch 子命令)在命令行上部署 Ceph 服务。

5.4.1 ceph orch 命令

Ceph orchestrator 命令 ceph orch 是 cephadm 模块的接口,它负责列出集群组件并在新的集群节点上部署 Ceph 服务。

5.4.1.1 显示 orchestrator 状态

以下命令会显示当前模式和 Ceph orchestrator 的状态。

cephuser@adm > ceph orch status

5.4.1.2 列出设备、服务和守护进程

要列出所有磁盘设备,请运行以下命令:

cephuser@adm > ceph orch device ls
Hostname   Path      Type  Serial  Size   Health   Ident  Fault  Available
ses-master /dev/vdb  hdd   0d8a... 10.7G  Unknown  N/A    N/A    No
ses-min1   /dev/vdc  hdd   8304... 10.7G  Unknown  N/A    N/A    No
ses-min1   /dev/vdd  hdd   7b81... 10.7G  Unknown  N/A    N/A    No
[...]
提示
提示:服务和守护进程

服务是表示特定类型的 Ceph 服务的一种通用术语,例如 Ceph Manager。

守护进程表示服务的特定实例,例如在名为 ses-min1 的节点上运行的进程 mgr.ses-min1.gdlcik

要列出 cephadm 已知的所有服务,请运行:

cephuser@adm > ceph orch ls
NAME  RUNNING  REFRESHED  AGE  PLACEMENT  IMAGE NAME                  IMAGE ID
mgr       1/0  5m ago     -    <no spec>  registry.example.com/[...]  5bf12403d0bd
mon       1/0  5m ago     -    <no spec>  registry.example.com/[...]  5bf12403d0bd
提示
提示

您可以使用可选的 -–host 参数将列表限制为某个特定节点上的服务,也可使用可选的 --service-type 参数(可接受的类型包括 monosdmgrmdsrgw)将列表限制为某种特定类型的服务。

要列出由 cephadm 部署的所有运行中守护进程,请运行:

cephuser@adm > ceph orch ps
NAME            HOST     STATUS   REFRESHED AGE VERSION    IMAGE ID     CONTAINER ID
mgr.ses-min1.gd ses-min1 running) 8m ago    12d 15.2.0.108 5bf12403d0bd b8104e09814c
mon.ses-min1    ses-min1 running) 8m ago    12d 15.2.0.108 5bf12403d0bd a719e0087369
提示
提示

要查询某个特定守护进程的状态,请使用 --daemon_type--daemon_id。对于 OSD,ID 为数字 OSD ID。对于 MDS,ID 为文件系统名称:

cephuser@adm > ceph orch ps --daemon_type osd --daemon_id 0
cephuser@adm > ceph orch ps --daemon_type mds --daemon_id my_cephfs

5.4.2 服务和归置规范

指定 Ceph 服务部署的推荐方法是创建一个 YAML 格式的文件,其中包含所要部署服务的规范。

5.4.2.1 创建服务规范

您可以为每种类型的服务创建单独的规范文件,例如:

root@master # cat nfs.yml
service_type: nfs
service_id: EXAMPLE_NFS
placement:
  hosts:
  - ses-min1
  - ses-min2
spec:
  pool: EXAMPLE_POOL
  namespace: EXAMPLE_NAMESPACE

或者,您可以在一个描述哪些节点将运行特定服务的文件(例如 cluster.yml)中指定多个(或所有)服务类型。请记得用三个破折号 (---) 分隔各个服务类型:

cephuser@adm > cat cluster.yml
service_type: nfs
service_id: EXAMPLE_NFS
placement:
  hosts:
  - ses-min1
  - ses-min2
spec:
  pool: EXAMPLE_POOL
  namespace: EXAMPLE_NAMESPACE
---
service_type: rgw
service_id: REALM_NAME.ZONE_NAME
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
---
[...]

上述属性的含义如下:

service_type

服务的类型。它可以是 Ceph 服务(monmgrmdscrashosdrbd-mirror)、网关(nfsrgw)或部分监控堆栈(alertmanagergrafananode-exporterprometheus)。

service_id

服务的名称。monmgralertmanagergrafananode-exporterprometheus 类型的规范不需要 service_id 属性。

placement

指定哪些节点将运行服务。有关更多详细信息,请参见第 5.4.2.2 节 “创建归置规范”

spec

与服务类型相关的其他规范。

提示
提示:应用特定服务

Ceph 集群服务通常具有许多专属属性。有关各个服务规范的示例和详细信息,请参见第 5.4.3 节 “部署 Ceph 服务”

5.4.2.2 创建归置规范

要部署 Ceph 服务,cephadm 需要知道要在其上部署这些服务的节点。请使用 placement 属性并列出要应用服务的节点的主机名简短名称:

cephuser@adm > cat cluster.yml
[...]
placement:
  hosts:
  - host1
  - host2
  - host3
[...]

5.4.2.3 应用集群规范

创建包含所有服务及其归置的规范的完整 cluster.yml 文件之后,您便可通过运行以下命令来应用集群:

cephuser@adm > ceph orch apply -i cluster.yml

要查看集群的状态,请运行 ceph orch status 命令。有关细节,请参见第 5.4.1.1 节 “显示 orchestrator 状态”

5.4.2.4 导出运行中集群的规范

虽然您使用如第 5.4.2 节 “服务和归置规范”中所述的规范文件将服务部署到 Ceph 集群,但在实际操作过程中集群的配置可能会偏离原始规范。另外,您也可能会无意间删除规范文件。

要检索运行中集群的完整规范,请运行:

cephuser@adm > ceph orch ls --export
placement:
  hosts:
  - hostname: ses-min1
    name: ''
    network: ''
service_id: my_cephfs
service_name: mds.my_cephfs
service_type: mds
---
placement:
  count: 2
service_name: mgr
service_type: mgr
---
[...]
提示
提示

您可以追加 --format 选项以更改默认的 yaml 输出格式。您可以从 jsonjson-prettyyaml 中进行选择。例如:

ceph orch ls --export --format json

5.4.3 部署 Ceph 服务

在运行基本集群之后,您可以将 Ceph 服务部署到其他节点。

5.4.3.1 部署 Ceph Monitor 和 Ceph Manager

Ceph 集群的不同节点之间部署了三个或五个 MON。如果集群中有五个或更多节点,则建议部署五个 MON。好的做法是,将 MGR 部署在与 MON 相同的节点上。

重要
重要:包含引导 MON

在部署 MON 和 MGR 时,请记得包含在第 5.3.2.5 节 “指定第一个 MON/MGR 节点”中配置基本集群时添加的第一个 MON。

要部署 MON,请应用以下规范:

service_type: mon
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
注意
注意

如果需要添加另一个节点,请在同一 YAML 列表中追加主机名。例如:

service_type: mon
placement:
 hosts:
 - ses-min1
 - ses-min2
 - ses-min3
 - ses-min4

同样,要部署 MGR,请应用以下规范:

重要
重要

确保您的部署在每个部署中至少有三个 Ceph Manager。

service_type: mgr
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
提示
提示

如果 MON 或 MGR 在同一子网中,则需要追加子网地址。例如:

service_type: mon
placement:
  hosts:
  - ses-min1:10.1.2.0/24
  - ses-min2:10.1.5.0/24
  - ses-min3:10.1.10.0/24

5.4.3.2 部署 Ceph OSD

重要
重要:当存储设备可用时

如果满足以下所有条件,则存储设备将被视为可用

  • 设备没有分区。

  • 设备没有任何 LVM 状态。

  • 设备未装入。

  • 设备不包含文件系统。

  • 设备不包含 BlueStore OSD。

  • 设备大于 5 GB。

如果不符合上述条件,Ceph 将拒绝供给此类 OSD。

可以使用以下两种方式来部署 OSD:

  • 告知 Ceph 使用所有可用和未使用的存储设备:

    cephuser@adm > ceph orch apply osd --all-available-devices
  • 使用 DriveGroups(参见第 13.4.3 节 “使用 DriveGroups 规范添加 OSD。”)创建 OSD 规范,该规范描述了将根据设备属性(例如设备类型(SSD 或 HDD)、设备型号名称、大小或设备所在的节点)部署的设备。然后通过运行以下命令应用规范:

    cephuser@adm > ceph orch apply osd -i drive_groups.yml

5.4.3.3 部署元数据服务器

CephFS 需要一个或多个元数据服务器 (MDS) 服务。要创建 CephFS,首先要通过应用以下规范来创建 MDS 服务器:

注意
注意

在应用以下规范之前,请确保至少创建了两个存储池,一个用于存储 CephFS 数据,另一个用于存储 CephFS 元数据。

service_type: mds
service_id: CEPHFS_NAME
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3

MDS 正常运行后,创建 CephFS:

ceph fs new CEPHFS_NAME metadata_pool data_pool

5.4.3.4 部署对象网关

cephadm 会将对象网关部署为管理特定领域区域的守护进程的集合。

您可以将对象网关服务与现有的领域和区域相关联(有关更多详细信息,请参见第 21.13 节 “多站点对象网关”),也可以指定不存在的 REALM_NAMEZONE_NAME,应用以下配置后会自动创建相应领域和区域:

service_type: rgw
service_id: REALM_NAME.ZONE_NAME
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
spec:
  rgw_realm: RGW_REALM
  rgw_zone: RGW_ZONE
5.4.3.4.1 使用安全 SSL 访问

要使用到对象网关的安全 SSL 连接,您需要一对有效的 SSL 证书和密钥文件(有关更多详细信息,请参见第 21.7 节 “为对象网关启用 HTTPS/SSL”)。您需要启用 SSL,指定 SSL 连接的端口号以及 SSL 证书和密钥文件。

要启用 SSL 并指定端口号,请在规范中包含以下内容:

spec:
  ssl: true
  rgw_frontend_port: 443

要指定 SSL 证书和密钥,可以将其内容直接粘贴到 YAML 规范文件中。行末的竖线符号 (|) 告知分析程序预期的值为多行字符串。例如:

spec:
  ssl: true
  rgw_frontend_port: 443
  rgw_frontend_ssl_certificate: |
   -----BEGIN CERTIFICATE-----
   MIIFmjCCA4KgAwIBAgIJAIZ2n35bmwXTMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV
   BAYTAkFVMQwwCgYDVQQIDANOU1cxHTAbBgNVBAoMFEV4YW1wbGUgUkdXIFNTTCBp
   [...]
   -----END CERTIFICATE-----
   rgw_frontend_ssl_key: |
   -----BEGIN PRIVATE KEY-----
   MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDLtFwg6LLl2j4Z
   BDV+iL4AO7VZ9KbmWIt37Ml2W6y2YeKX3Qwf+3eBz7TVHR1dm6iPpCpqpQjXUsT9
   [...]
   -----END PRIVATE KEY-----
提示
提示

您可以省略 rgw_frontend_ssl_certificate:rgw_frontend_ssl_key: 关键字,并将它们上载到配置数据库,而不是粘贴 SSL 证书和密钥文件的内容:

cephuser@adm > ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.crt \
 -i SSL_CERT_FILE
cephuser@adm > ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.key \
 -i SSL_KEY_FILE
5.4.3.4.2 使用子集群部署

子集群可帮助您组织集群中的节点,以分隔工作负载,让弹性缩放更轻松。如果使用子集群进行部署,请应用以下配置:

service_type: rgw
service_id: REALM_NAME.ZONE_NAME.SUBCLUSTER
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
spec:
  rgw_realm: RGW_REALM
  rgw_zone: RGW_ZONE
  subcluster: SUBCLUSTER

5.4.3.5 部署 iSCSI 网关

cephadm 可部署 iSCSI 网关,它是一种存储区域网络 (SAN) 协议,可让客户端(称作发起程序)将 SCSI 命令发送到远程服务器上的 SCSI 存储设备(目标)。

应用以下配置进行部署。确保 trusted_ip_list 包含所有 iSCSI 网关和 Ceph Manager 节点的 IP 地址(请参见下面的输出示例)。

注意
注意

请确保在应用以下规范之前创建存储池。

service_type: iscsi
service_id: EXAMPLE_ISCSI
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
spec:
  pool: EXAMPLE_POOL
  api_user: EXAMPLE_USER
  api_password: EXAMPLE_PASSWORD
  trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2"
注意
注意

请确保针对 trusted_ip_list 列出的 IP 在逗号分隔后没有空格。

5.4.3.5.1 安全 SSL 配置

要在 Ceph Dashboard 和 iSCSI 目标 API 之间使用安全 SSL 连接,您需要一对有效的 SSL 证书和密钥文件。它们可以是 CA 颁发的,也可以是自我签名的(参见第 10.1.1 节 “创建自我签名证书”)。要启用 SSL,请在您的规范文件中包含 api_secure: true 设置:

spec:
  api_secure: true

要指定 SSL 证书和密钥,可以将其内容直接粘贴到 YAML 规范文件中。行末的竖线符号 (|) 告知分析程序预期的值为多行字符串。例如:

spec:
  pool: EXAMPLE_POOL
  api_user: EXAMPLE_USER
  api_password: EXAMPLE_PASSWORD
  trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2"
  api_secure: true
  ssl_cert: |
    -----BEGIN CERTIFICATE-----
    MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3
    DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T
    [...]
    -----END CERTIFICATE-----
  ssl_key: |
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4
    /CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h
    [...]
    -----END PRIVATE KEY-----

5.4.3.6 部署 NFS Ganesha

cephadm 可使用预定义的 RADOS 存储池和可选的名称空间部署 NFS Ganesha。要部署 NFS Ganesha,请应用以下规范:

注意
注意

您需要有一个预定义的 RADOS 存储池,否则 ceph orch apply 操作将失败。有关创建存储池的详细信息,请参见第 18.1 节 “创建存储池”

service_type: nfs
service_id: EXAMPLE_NFS
placement:
  hosts:
  - ses-min1
  - ses-min2
spec:
  pool: EXAMPLE_POOL
  namespace: EXAMPLE_NAMESPACE
  • EXAMPLE_NFS,包含用于标识 NFS 导出项的任意字符串。

  • EXAMPLE_POOL,包含将存储 NFS Ganesha RADOS 配置对象的存储池的名称。

  • EXAMPLE_NAMESPACE(可选),包含所需的对象网关 NFS 名称空间(例如,ganesha)。

5.4.3.7 部署 rbd-mirror

rbd-mirror 服务负责在两个 Ceph 集群之间同步 RADOS 块设备映像(有关更多详细信息,请参见第 20.4 节 “RBD 映像镜像”)。要部署 rbd-mirror,请使用以下规范:

service_type: rbd-mirror
service_id: EXAMPLE_RBD_MIRROR
placement:
  hosts:
  - ses-min3

5.4.3.8 部署监控堆栈

监控堆栈包含 Prometheus、Prometheus 导出程序、Prometheus 告警管理器和 Grafana。Ceph Dashboard 使用这些组件来存储并直观呈现有关集群使用率和性能的详细度量。

提示
提示

如果您的部署需要监控堆栈服务的自定义或本地提供的容器映像,请参见第 16.1 节 “配置自定义或本地映像”

要部署监控堆栈,请执行以下步骤:

  1. 在 Ceph Manager 守护进程中启用 prometheus 模块。这将公开内部 Ceph 度量,以便 Prometheus 可以读取这些信息:

    cephuser@adm > ceph mgr module enable prometheus
    注意
    注意

    请确保在部署 Prometheus 之前运行此命令。如果部署前未运行该命令,则必须重新部署 Prometheus 才能更新 Prometheus 的配置:

    cephuser@adm > ceph orch redeploy prometheus
  2. 创建包含如下内容的规范文件(例如 monitoring.yaml):

    service_type: prometheus
    placement:
      hosts:
      - ses-min2
    ---
    service_type: node-exporter
    ---
    service_type: alertmanager
    placement:
      hosts:
      - ses-min4
    ---
    service_type: grafana
    placement:
      hosts:
      - ses-min3
  3. 通过运行以下命令应用监控服务:

    cephuser@adm > ceph orch apply -i monitoring.yaml

    部署监控服务可能需要一到两分钟。

重要
重要

Prometheus、Grafana 和 Ceph Dashboard 全都会自动配置为相互通讯,因而如上面所述进行部署时,Ceph Dashboard 中将实现功能完备的 Grafana 集成。

但使用 RBD 映像进行监控时不适用于此规则。有关更多信息,请参见第 16.5.4 节 “启用 RBD 映像监控”