Ceph 服务管理之服务规范
服务规范是用于指定服务部署的数据结构。以下是 YAML 中的服务规范示例:
service_type: rgw
service_id: realm.zone
placement:
hosts:
- host1
- host2
- host3
unmanaged: false
networks:
- 192.169.142.0/24
spec:
# Additional service specific attributes. -- 附加服务特定属性
在此示例中,此服务规范的属性是:
类 ceph.deployment.service_spec.ServiceSpec(service_type, service_id = None, placement = None, count = None, config = None, unmanaged = False, preview_only = False, networks = None, extra_container_args = None)
服务创建的详细信息。
向编排器请求一组守护进程,例如 MDS、RGW、iscsi 网关、MON、MGR、Prometheus。
这个结构应该是足够的信息来启动服务。
networks: List[str] -- 指示守护程序仅绑定在该列表中的特定网络上的网络身份列表。如果集群分布在多个网络中,您可以添加多个网络。请参阅网络和端口、 指定网络和指定网络。
placement: ceph.deployment.service_spec.PlacementSpec -- 请参阅守护程序放置。
service_id -- 服务的名称。iscsi, mds, nfs, osd, rgw, container,需要ingress。
service_type -- 服务的类型。需要是 Ceph 服务(mon、crash、mds、osd或 rbd-mirror) mgr、网关(nfs或rgw) 、监控堆栈的一部分(alertmanager 、grafana 、node-exporter或 prometheus )或(container)用于自定义容器。
unmanaged -- 如果设置为true,编排器将不会部署或删除与此服务关联的任何守护程序。放置和所有其他属性将被忽略。如果您不希望临时管理此服务,这很有用。对于 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 端口,我们需要更新现有规范。
列出当前ServiceSpec:
ceph orch ls --service_name=<service-name> --export > myservice.yaml
更新 yaml 文件:
vi myservice.yaml
应用新的ServiceSpec:
ceph orch apply -i myservice.yaml [--dry-run]