注意

本文档适用于 Ceph 开发版本。

服务管理

服务是一组一起配置的守护进程。有关各个服务的详细信息,请参阅这些章节:

服务状态

要查看 Ceph 集群中正在运行的一个服务的状态,请执行以下操作:

  1. 使用命令行打印服务列表。

  2. 定位您要检查状态的服务。

  3. 打印服务的状态。

以下命令打印 orchestrator 已知的所有服务列表。要限制输出仅限于指定主机上的服务,请使用可选的参数。要限制输出仅限于特定类型的服务,请使用可选的参数(mon、osd、mgr、mds、rgw):--host parameter. To limit the output to services of only a particular type, use the optional --type parameter (mon, osd, mgr, mds, rgw):

ceph orch ls [--service_type type] [--service_name name] [--export] [--format f] [--refresh]

发现特定服务或守护进程的状态:

ceph orch ls --service_type type --service_name <name> [--refresh]

要导出 orchestrator 已知的服务规范,请运行以下命令。

ceph orch ls --export

使用此命令导出的服务规范将以 yaml 格式导出,并且该 yaml 可以与ceph orch apply -i command.

有关获取单个服务规范的信息(包括命令示例),请参阅获取正在运行的服务规范.

守护进程状态

守护进程是一个正在运行并属于某个服务的 systemd 单元。

要查看守护进程的状态,请执行以下操作:

  1. 打印 orchestrator 已知的所有守护进程列表。

  2. 查询目标守护进程的状态。

首先,打印 orchestrator 已知的所有守护进程列表:

ceph orch ps [--hostname host] [--daemon_type type] [--service_name name] [--daemon_id id] [--format f] [--refresh]

然后,查询特定服务实例(mon、osd、mds、rgw)的状态。对于 OSD,id 是数字 OSD ID。对于 MDS 服务,id 是文件系统名称:

ceph orch ps --daemon_type osd --daemon_id 0

Note

命令ceph orch ps的输出mgr/cephadm/daemon_cache_timeout配置变量(以秒为单位)来缩短,例如:ceph config set mgr mgr/cephadm/daemon_cache_timeout 60将减少刷新间隔到一分钟。信息每daemon_cache_timeout秒更新一次,除非使用--refresh选项。此选项将触发刷新信息的请求,这可能需要一些时间,具体取决于集群的大小。通常REFRESHED值指示ceph orch ps和类似

服务规范

A 服务规范是一个数据结构,用于指定服务的部署。除了placement网络等参数外,用户可以通过config部分设置服务配置参数的初始值。对于每个 param/value 配置对,cephadm 调用以下命令来设置其值:

ceph config set <service-name> <param> <value>

如果在规范中发现无效的配置参数(CEPHADM_INVALID_CONFIG_OPTION)或尝试应用新配置选项时出现任何错误(CEPHADM_FAILED_SET_OPTION).

),cephadm 会发出健康警告。

service_type: rgw
service_id: realm.zone
placement:
  hosts:
    - host1
    - host2
    - host3
config:
  param_1: val_1
  ...
  param_N: val_N
unmanaged: false
networks:
- 192.169.142.0/24
spec:
  # Additional service specific attributes.

在此示例中,此服务规范的属性是:

class ceph.deployment.service_spec.ServiceSpec(service_type, service_id=, placement=, count=, config=, unmanaged=False, preview_only=False, 网络=, targets=, extra_container_args=, extra_entrypoint_args=, custom_configs=)

服务创建的详细信息。

向 orchestrator 发出请求,以获取一组守护进程,例如 MDS、RGW、iscsi 网关、nvmeof 网关、MON、MGR、Prometheus

此结构应该包含足够的信息来启动服务。

网络: 列表[字符串]

一个网络标识符列表,指示守护进程仅在列表中的特定网络上绑定。如果集群分布在多个网络上,您可以添加多个网络。请参阅网络和端口, 指定网络指定网络.

placement: PlacementSpec

请参阅守护进程放置.

service_id

服务的名称。对于iscsi, nvmeof, mds, nfs, osd, rgw, container, ingress

service_type

服务类型。必须是 Ceph 服务(mon, crash, mds, mgr, osdrbd-mirror)、网关(nfsrgw)、监控堆栈的一部分(alertmanager, grafana, node-exporterprometheus)或(container)用于自定义容器。

unmanaged

如果设置为true,orchestrator 将不会部署或移除与此服务关联的任何守护进程。放置和所有其他属性都将被忽略。如果您暂时不想管理此服务,这很有用。对于 cephadm,请参阅禁用守护进程的自动部署

每种服务类型都可以有额外的服务特定属性。

类型为mon, mgr的服务规范,以及监控类型不需要service_id.

类型为osd的服务在高级 OSD 服务规范中进行了描述

许多服务规范可以一次应用,使用ceph orch apply -i通过提交一个多文档 YAML 文件一次性添加许多主机:

cat <<EOF | ceph orch apply -i -
service_type: mon
placement:
  host_pattern: "mon*"
---
service_type: mgr
placement:
  host_pattern: "mgr*"
---
service_type: osd
service_id: default_drive_group
placement:
  host_pattern: "osd*"
data_devices:
  all: true
EOF

获取正在运行的服务规范

如果服务是通过ceph orch apply...启动的,那么直接更改服务规范很复杂。而不是尝试直接更改服务规范,我们建议按照以下说明导出正在运行的服务规范:

ceph orch ls --service-name rgw.<realm>.<zone> --export > rgw.<realm>.<zone>.yaml
ceph orch ls --service-type mgr --export > mgr.yaml
ceph orch ls --export > cluster.yaml

然后,可以像上面那样更改规范并重新应用。

更新服务规范

Ceph Orchestrator 维护每个服务在ServiceSpec中的声明式状态。对于某些操作,例如更新 RGW HTTP 端口,我们需要更新现有的规范。

  1. 列出当前的ServiceSpec:

    ceph orch ls --service_name=<service-name> --export > myservice.yaml
    
  2. 更新 yaml 文件:

    vi myservice.yaml
    
  3. 应用新的ServiceSpec:

    ceph orch apply -i myservice.yaml [--dry-run]
    

守护进程放置

为了让 orchestrator 部署服务,它需要知道在哪里部署守护进程,请指定 count:,以及部署多少个。这就是放置规范的作用。放置规范可以作为命令行参数传递,也可以在 YAML 文件中传递。

Note

cephadm 不会在带有_no_schedule标签的主机上部署守护进程;请参阅特殊主机标签.

Note

The apply命令可能会令人困惑。因此,我们建议使用 YAML 规范。

每个ceph orch apply <service-name>命令都会覆盖前面的命令。如果您使用正确的语法,您会在进行过程中覆盖您的工作。

例如:

ceph orch apply mon host1
ceph orch apply mon host2
ceph orch apply mon host3

这导致只有一个主机被应用了监控器:主机 3。

(第一个命令在主机1上创建了一个监控器。然后第二个命令覆盖了主机1上的监控器并在主机2上创建了一个监控器。然后第三个命令覆盖了主机2上的监控器并在主机3上创建了一个监控器。在这种情况下,此时只有一个监控器仅在主机3上。)

为了确保这三个主机中的每一个都应用了监控器,请运行类似以下命令:

ceph orch apply mon "host1,host2,host3"

另一种将监控器应用于多个主机的方法是使用一个yaml文件

ceph orch apply -i file.yaml

以下是一个示例file.yaml文件

service_type: mon
placement:
  hosts:
   - host1
   - host2
   - host3

显式放置

通过简单地指定它们,可以将守护进程显式放置在主机上:

ceph orch apply prometheus --placement="host1 host2 host3"

或在 YAML 中:

service_type: prometheus
placement:
  hosts:
    - host1
    - host2
    - host3

MON 和其他服务可能需要一些增强的网络规范:

ceph orch daemon add mon --placement="myhost:[v2:1.2.3.4:3300,v1:1.2.3.4:6789]=name"

其中[v2:1.2.3.4:3300,v1:1.2.3.4:6789]是监控器的网络地址,而=name指定新监控器的名称。

标签放置

守护进程放置可以限制为与特定标签匹配的主机。要将标签mylabel设置到适当的主机上,请运行此命令:

ceph orch host label add *<hostname>* mylabel

要查看当前主机和标签,请运行此命令:

ceph orch host ls

例如:

ceph orch host label add host1 mylabel
ceph orch host label add host2 mylabel
ceph orch host label add host3 mylabel
ceph orch host ls
HOST   ADDR   LABELS  STATUS
host1         mylabel
host2         mylabel
host3         mylabel
host4
host5

现在,通过运行此命令,告诉 cephadm 根据标签部署守护进程:

ceph orch apply prometheus --placement="label:mylabel"

或在 YAML 中:

service_type: prometheus
placement:
  label: "mylabel"

模式匹配放置

守护进程也可以使用主机模式放置在主机上。默认情况下,使用 fnmatch 匹配主机模式,它支持 UNIX shell 风格的通配符(请参阅https://docs.python.org/3/library/fnmatch.html):

ceph orch apply prometheus --placement='myhost[1-3]'

或在 YAML 中:

service_type: prometheus
placement:
  host_pattern: "myhost[1-3]"

要将服务放置在all主机上,请使用"*":

ceph orch apply node-exporter --placement='*'

或在 YAML 中:

service_type: node-exporter
placement:
  host_pattern: "*"

主机模式还支持使用正则表达式。要使用正则表达式,您必须在使用命令行时在模式的开始处添加“regex: ”,或者在使用 YAML 时指定一个pattern_type字段为“regex”。

在命令行上:

ceph orch apply prometheus --placement='regex:FOO[0-9]|BAR[0-9]'

在 YAML 中:

service_type: prometheus
placement:
  host_pattern:
    pattern: 'FOO[0-9]|BAR[0-9]'
    pattern_type: regex

更改守护进程的数量

通过指定count,仅创建指定的守护进程数量:

ceph orch apply prometheus --placement=3

要在主机子集上部署守护进程,请指定 count: on a subset of hosts, specify the count:

ceph orch apply prometheus --placement="2 host1 host2 host3"

如果 count 大于主机数量,cephadm 将在每个主机上部署一个:

ceph orch apply prometheus --placement="3 host1 host2"

上述命令的结果是两个 Prometheus 守护进程。

YAML 也可以用来指定限制,如下所示:

service_type: prometheus
placement:
  count: 3

YAML 也可以用来指定主机限制:

service_type: prometheus
placement:
  count: 2
  hosts:
    - host1
    - host2
    - host3

守护进程的共位置

Cephadm 支持在同一个主机上部署多个守护进程:

service_type: rgw
placement:
  label: rgw
  count_per_host: 2

在每个主机上部署多个守护进程的主要原因是,在同一个主机上运行多个 RGW 和 MDS 守护进程可以获得额外的性能优势。

See also:

此功能是在 Pacific 中引入的。

算法描述

Cephadm 的声明式状态由包含放置规范的服务规范列表组成。

Cephadm 不断比较集群中实际运行的守护进程列表与服务规范中的列表。Cephadm 根据需要添加新守护进程并移除旧守护进程,以符合服务规范。

Cephadm 执行以下操作以保持符合服务规范。

Cephadm 首先选择一组候选主机。Cephadm 寻找显式的主机名并选择它们。如果 cephadm 找不到显式主机名,它会寻找标签规范。如果在规范中没有定义标签,cephadm 根据主机模式选择主机。如果没有定义主机模式,作为最后的手段,cephadm 选择所有已知主机作为候选主机。

Cephadm 了解正在运行服务的现有守护进程,并尝试避免移动它们。

Cephadm 支持部署特定数量的服务。考虑以下服务规范:

service_type: mds
service_name: myfs
placement:
  count: 3
  label: myfs

此服务规范指示 cephadm 在集群中标记为myfs的主机上部署三个守护进程。

如果候选主机上部署的守护进程少于三个,cephadm 将随机选择主机来部署新的守护进程。

如果候选主机上部署的守护进程多于三个,cephadm 将移除现有守护进程。

最后,cephadm 将移除候选主机列表之外的主机上的守护进程。

Note

有一个 cephadm 必须考虑的特殊情况。

如果放置规范选择的主机少于count要求的主机数量,cephadm 将仅在选定的主机上部署。

额外的容器参数

警告

为 extra container args 提供的参数仅限于您使用的任何容器引擎的之前,运行命令可用的参数。提供之前,运行命令不支持的任何参数(或参数的无效值)将导致守护进程无法启动。

Note

传递给容器内运行的进程而不是容器运行本身的参数,请参阅额外的入口点参数

Cephadm 支持在特定情况下为特定情况提供额外的杂项容器参数。例如,如果用户需要限制他们的 mon 守护进程使用的 cpu 数量,他们可以应用一个规范,如

service_type: mon
service_name: mon
placement:
  hosts:
    - host1
    - host2
    - host3
extra_container_args:
  - "--cpus=2"

这将导致每个 mon 守护进程都以--cpus=2.

有两种方法可以在extra_container_args列表中表示参数。--cpus 2将在处理时变为["--cpus", "2"]示例:

service_type: mon
service_name: mon
placement:
  hosts:
    - host1
    - host2
    - host3
extra_container_args:
  - "--cpus 2"

作为另一种选择,列表中的项目可以是一个包含所需键“argument”和可选键“split”的对象(映射)。与argument键关联的值必须是单个字符串。与split键关联的值是一个布尔值。与split键明确控制参数值中的空格是否导致值被拆分为多个参数。如果split为 true,则 Cephadm 将自动将值拆分为多个参数。如果split为 false,则值中的空格将被保留在参数中。当split未提供时,默认值为 false。示例:

service_type: mon
service_name: mon
placement:
  hosts:
    - tiebreaker
extra_container_args:
  # No spaces, always treated as a single argument
  - argument: "--timout=3000"
  # Splitting explicitly disabled, one single argument
  - argument: "--annotation=com.example.name=my favorite mon"
    split: false
  # Splitting explicitly enabled, will become two arguments
  - argument: "--cpuset-cpus 1-3,7-11"
    split: true
  # Splitting implicitly disabled, one single argument
  - argument: "--annotation=com.example.note=a simple example"

使用额外容器参数挂载文件

额外容器参数的一个常见用例是在容器内挂载附加文件。Ceph 的旧版本不支持参数中的空格,因此以下示例适用于最广泛的 Ceph 版本。

extra_container_args:
  - "-v"
  - "/absolute/file/path/on/host:/absolute/file/path/in/container"

例如:

extra_container_args:
  - "-v"
  - "/opt/ceph_cert/host.cert:/etc/grafana/certs/cert_file:ro"

额外的入口点参数

Note

对于打算传递给容器运行时而不是容器内进程的参数,请参阅额外的容器参数

类似于 extra container args for the container runtime,Cephadm 支持向在容器内运行的入口点进程传递的参数追加。例如,要设置 node-exporter 服务的收集器文本文件目录,可以应用一个服务规范,如

service_type: node-exporter
service_name: node-exporter
placement:
  host_pattern: '*'
extra_entrypoint_args:
  - "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector2"

有两种方法可以在extra_entrypoint_args列表中表示参数。--debug_ms 10将在处理时变为["--debug_ms", "10"]示例:

service_type: mon
service_name: mon
placement:
  hosts:
    - host1
    - host2
    - host3
extra_entrypoint_args:
  - "--debug_ms 2"

作为另一种选择,列表中的项目可以是一个包含所需键“argument”和可选键“split”的对象(映射)。与argument键关联的值必须是单个字符串。与split键关联的值是一个布尔值。与split键明确控制参数值中的空格是否导致值被拆分为多个参数。如果split为 true,则 cephadm 将自动将值拆分为多个参数。如果split为 false,则值中的空格将被保留在参数中。当split未提供时,默认值为 false。示例:

# An theoretical data migration service
service_type: pretend
service_name: imagine1
placement:
  hosts:
    - host1
extra_entrypoint_args:
  # No spaces, always treated as a single argument
  - argument: "--timout=30m"
  # Splitting explicitly disabled, one single argument
  - argument: "--import=/mnt/usb/My Documents"
    split: false
  # Splitting explicitly enabled, will become two arguments
  - argument: "--tag documents"
    split: true
  # Splitting implicitly disabled, one single argument
  - argument: "--title=Imported Documents"

自定义配置文件

Cephadm 支持为守护进程指定杂项配置文件。为此,用户必须提供配置文件的内容以及守护进程容器中的挂载位置。应用了指定了自定义配置文件的 YAML 规范并让 cephadm 重新部署了配置文件中指定的守护进程后,这些文件将挂载在守护进程容器的指定位置。

示例服务规范:

service_type: grafana
service_name: grafana
custom_configs:
  - mount_path: /etc/example.conf
    content: |
      setting1 = value1
      setting2 = value2
  - mount_path: /usr/share/grafana/example.cert
    content: |
      -----BEGIN PRIVATE KEY-----
      V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
      ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
      IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
      YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
      ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
      -----END PRIVATE KEY-----
      -----BEGIN CERTIFICATE-----
      V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
      ZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15
      IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
      YSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3Mg
      ZXQgYWNjdXNhbSBldCBqdXN0byBkdW8=
      -----END CERTIFICATE-----

为了使这些新的配置文件实际上能够挂载到守护进程的容器中

ceph orch redeploy <service-name>

例如:

ceph orch redeploy grafana

移除服务

为了移除服务(包括移除该服务的所有守护进程),请运行

ceph orch rm <service-name>

例如:

ceph orch rm rgw.myrgw

禁用守护进程的自动部署

Cephadm 支持禁用按服务逐个禁用守护进程的自动部署和移除。CLI 支持两个命令用于此目的。

为了完全移除服务,请参阅移除服务.

禁用守护进程的自动管理

要禁用守护进程的自动管理,请在unmanaged=True。Cephadm 还支持使用服务规范 (mgr.yaml).

mgr.yaml:

service_type: mgr
unmanaged: true
placement:
  label: mgr
ceph orch apply -i mgr.yaml

中设置ceph orch set-unmanagedceph orch set-managed命令将 unmanaged 参数设置为 true 或 false。ceph orch ls) 作为

ceph orch set-unmanaged mon

将设置unmanaged: true为 mon 服务,而

ceph orch set-managed mon

将设置unmanaged: false为 mon 服务

Note

在您在服务规范中应用此更改后,cephadm 将不再部署任何新守护进程(即使放置规范与附加主机匹配)。

Note

“osd” 服务用于跟踪未绑定到任何特定服务规范的 OSD,这是一个特殊服务,并且始终会被标记为 unmanaged。尝试使用ceph orch set-unmanagedceph orch set-managed修改它将导致一条消息No service of name osd found. Check "ceph orch ls" for all known services

在主机上手动部署守护进程

Note

此工作流有一个非常有限的使用案例,并且应该仅在罕见的情况下使用。

要在主机上手动部署守护进程,请按照以下步骤操作:

通过获取现有规范、添加unmanaged: true并应用修改后的规范来修改服务的规范。

然后使用以下命令手动部署守护进程:

ceph orch daemon add <daemon-type>  --placement=<placement spec>

例如:

ceph orch daemon add mgr --placement=my_host

Note

从服务规范中移除unmanaged: true将启用此服务的 reconciliation 循环,并且可能会根据放置规范导致守护进程被移除。

从主机上手动移除守护进程

要手动移除守护进程,请运行以下形式的命令:

ceph orch daemon rm <daemon name>... [--force]

例如:

ceph orch daemon rm mgr.my_host.xyzxyz

Note

对于管理服务(unmanaged=False),cephadm 将几秒钟后自动部署一个新的守护进程。

参见

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.