8 使用 cephadm 部署其余核心服务 #
部署基本 Ceph 集群之后,请将核心服务部署到更多集群节点。为使客户端能够访问集群数据,还需要部署额外的服务。
目前,我们支持使用 Ceph orchestrator(ceph orch
子命令)在命令行上部署 Ceph 服务。
8.1 ceph orch
命令 #
Ceph orchestrator 命令 ceph orch
是 cephadm 模块的接口,它负责列出集群组件并在新的集群节点上部署 Ceph 服务。
8.1.1 显示 orchestrator 状态 #
以下命令会显示当前模式和 Ceph orchestrator 的状态。
cephuser@adm >
ceph orch status
8.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
参数使列表仅显示特定类型的服务。可接受的类型有 mon
、osd
、mgr
、mds
和 rgw
。
要列出由 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 0cephuser@adm >
ceph orch ps --daemon_type mds --daemon_id my_cephfs
8.2 服务和归置规范 #
指定 Ceph 服务部署的推荐方法是创建一个 YAML 格式的文件,其中包含所要部署服务的规范。
8.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 服务(
mon
、mgr
、mds
、crash
、osd
或rbd-mirror
)、网关(nfs
或rgw
)或部分监控堆栈(alertmanager
、grafana
、node-exporter
或prometheus
)。service_id
服务的名称。
mon
、mgr
、alertmanager
、grafana
、node-exporter
和prometheus
类型的规范不需要service_id
属性。placement
指定哪些节点将运行服务。有关更多详细信息,请参见第 8.2.2 节 “创建归置规范”。
spec
与服务类型相关的其他规范。
Ceph 集群服务通常具有许多专属属性。有关各个服务规范的示例和详细信息,请参见第 8.3 节 “部署 Ceph 服务”。
8.2.2 创建归置规范 #
要部署 Ceph 服务,cephadm 需要知道要在其上部署这些服务的节点。请使用 placement
属性并列出要应用服务的节点的主机名简短名称:
cephuser@adm >
cat cluster.yml
[...]
placement:
hosts:
- host1
- host2
- host3
[...]
8.2.3 应用集群规范 #
创建包含所有服务及其归置的规范的完整 cluster.yml
文件之后,您便可通过运行以下命令来应用集群:
cephuser@adm >
ceph orch apply -i cluster.yml
要查看集群的状态,请运行 ceph orch status
命令。有关细节,请参见第 8.1.1 节 “显示 orchestrator 状态”。
8.2.4 导出运行中集群的规范 #
虽然您使用如第 8.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
输出格式。您可以从 json
、json-pretty
或 yaml
中进行选择。例如:
ceph orch ls --export --format json
8.3 部署 Ceph 服务 #
在运行基本集群之后,您可以将 Ceph 服务部署到其他节点。
8.3.1 部署 Ceph Monitor 和 Ceph Manager #
Ceph 集群的不同节点之间部署了三个或五个 MON。如果集群中有五个或更多节点,则建议部署五个 MON。好的做法是,将 MGR 部署在与 MON 相同的节点上。
在部署 MON 和 MGR 时,请记得包含在第 7.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
8.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
8.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
8.3.4 部署对象网关 #
cephadm 会将对象网关部署为管理特定领域和区域的守护进程的集合。
您可以将对象网关服务与现有的领域和区域相关联(有关更多详细信息,请参见第 21.13 节 “多站点对象网关”),也可以指定不存在的 REALM_NAME 和 ZONE_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
8.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_FILEcephuser@adm >
ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.key \ -i SSL_KEY_FILE
8.3.4.1.1 将对象网关配置为同时侦听端口 443 和 80 #
要将对象网关配置为同时侦听端口 443 (HTTPS) 和 80 (HTTP),请执行以下步骤:
该过程中的命令使用 default
领域和区域。
提供规范文件以部署对象网关。有关对象网关规范的更多详细信息,请参见第 8.3.4 节 “部署对象网关”。使用以下命令:
cephuser@adm >
ceph orch apply -i SPEC_FILE如果规范文件中未提供 SSL 证书,请使用以下命令添加证书:
cephuser@adm >
ceph config-key set rgw/cert/default/default.crt -i certificate.pemcephuser@adm >
ceph config-key set rgw/cert/default/default.key -i key.pem更改
rgw_frontends
选项的默认值:cephuser@adm >
ceph config set client.rgw.default.default rgw_frontends \ "beast port=80 ssl_port=443"删除 cephadm 创建的特定配置。运行以下命令标识
rgw_frontends
选项是为哪个目标配置的:cephuser@adm >
ceph config dump | grep rgw例如,目标是
client.rgw.default.default.node4.yiewdu
。删除rgw_frontends
当前的具体值:cephuser@adm >
ceph config rm client.rgw.default.default.node4.yiewdu rgw_frontends提示您也可以不删除
rgw_frontends
的值,而是指定其值。例如:cephuser@adm >
ceph config set client.rgw.default.default.node4.yiewdu \ rgw_frontends "beast port=80 ssl_port=443"重启动对象网关:
cephuser@adm >
ceph orch restart rgw.default.default
8.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
8.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 在逗号分隔后没有空格。
8.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-----
8.3.6 部署 NFS Ganesha #
NFS Ganesha 支持 NFS 4.1 和更高版本,不支持 NFS 3 版本。
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
)。
8.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
8.3.8 部署监控堆栈 #
监控堆栈包含 Prometheus、Prometheus 导出程序、Prometheus 告警管理器和 Grafana。Ceph Dashboard 使用这些组件来存储并直观呈现有关集群使用率和性能的详细度量。
如果您的部署需要监控堆栈服务的自定义或本地提供的容器映像,请参见第 16.1 节 “配置自定义或本地映像”。
要部署监控堆栈,请执行以下步骤:
在 Ceph Manager 守护进程中启用
prometheus
模块。这将公开内部 Ceph 度量,以便 Prometheus 可以读取这些信息:cephuser@adm >
ceph mgr module enable prometheus注意请确保在部署 Prometheus 之前运行此命令。如果部署前未运行该命令,则必须重新部署 Prometheus 才能更新 Prometheus 的配置:
cephuser@adm >
ceph orch redeploy prometheus创建包含如下内容的规范文件(例如
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
通过运行以下命令应用监控服务:
cephuser@adm >
ceph orch apply -i monitoring.yaml部署监控服务可能需要一到两分钟。
Prometheus、Grafana 和 Ceph Dashboard 全都会自动配置为相互通讯,因而如上面所述进行部署时,Ceph Dashboard 中将实现功能完备的 Grafana 集成。
但使用 RBD 映像进行监控时不适用于此规则。有关更多信息,请参见第 16.5.4 节 “启用 RBD 映像监控”。