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 status8.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
- 与服务类型相关的其他规范。 
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,请应用以下规范:
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.pem- cephuser@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,请应用以下规范:
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 使用这些组件来存储并直观呈现有关集群使用率和性能的详细度量。
要部署监控堆栈,请执行以下步骤:
- 在 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 映像监控”。