Ceph Pacific Usability: Advanced Installation
从 Ceph Octopus 版本开始,Ceph 提供了自己的配置和管理控制平面,即“mgr/orchestrator”框架。此功能涵盖了 Ceph 大约 90% 的配置和管理需求。为什么不是 100%...好吧,有些任务,例如准备主机和清除集群,需要从集群外部执行!对于这些任务,请查看 cephadm-ansible 和 ceph-salt。
另一方面,安装完全由 orchestrator 覆盖!
首先,简要介绍一下。orchestrator/cephadm 框架在底层使用 ssh。通常,您不希望 orchestrator 模块使用的 ssh 用户帐户是 root 帐户 - 因此您需要在每个节点上设置一个具有 sudo 权限的用户帐户(就像在 Ansible 控制的环境中一样)。此帐户必须能够发出命令并登录,而无需密码。在本文中,我们将使用名为 cephadmin 的帐户,并将 bootstrap 节点的 cephadmin 帐户上的 ssh 密钥用于 Ceph。
我们将使用带有 podman 的 CentOS 8 Stream VM。podman 支持有一些小问题,因此请前往 compatibility 页面来仔细检查您的主机可用的版本。对于 CentOS 或 RHEL 部署,将 podman 降级到 v3.0 在此 Red Hat BZ 1946982 中有说明,特别是此 评论。我们不涵盖部署和配置操作系统,但值得重申 3 个关键要求;
- 必须安装以下软件包:ssh、python3、podman(或 docker)、lvm2 和 chrony(或 ntp)
- 确保您的主机可以通过 DNS 解析(这样更容易!)
- (可选)确保您的 sudo 用户帐户可用
Ceph 安装包括一个多步骤工作流程,该工作流程从“bootstrap”阶段开始。bootstrap 过程有效地将 orchestrator 引入其中,从而启用其他所有主机和守护程序进行部署。Ceph 组件现在可以作为服务进行管理,受 spec 的管理,该 spec 引入了一些默认行为……稍后会详细介绍。
在您的第一个 VM 上获取 cephadm 二进制文件并安装它(文档 here)。cephadm 安装到位,并且每个节点上都配置了 cephadmin sudo 用户帐户,我们就可以 bootstrap 集群了。
cephadm --image myregistry:5000/ceph/ceph:v16 bootstrap \
--mon-ip 192.168.122.174 \
--ssh-private-key /home/cephadmin/.ssh/id_rsa \
--ssh-public-key /home/cephadmin/.ssh/id_rsa.pub \
--ssh-user cephadmin \
--skip-monitoring-stack
我们可以看到我们正在使用 --image 覆盖。这允许我们从本地注册表中拉取 Ceph 容器镜像,而不是每次都访问 docker hub!
bootstrap 完成后,mon 和 mgr 守护程序的服务规范使用基于“count”的放置策略。这意味着 orchestrator 会将这些守护程序放置在任何地方以满足 count 定义的实例数量。这通常很好,但为了这篇文章的目的,我们选择尽可能地吹毛求疵并控制一切!为此,我们必须通过 cephadm shell 修改 mon 和 mgr 的默认规范。
[ceph: root@cs8-1 ~]# ceph orch apply mon --placement=1
[ceph: root@cs8-1 ~]# ceph orch apply mgr --placement=1
现在,mon 和 mgr 服务限制为单个守护程序,这意味着我可以添加更多主机,而不会在我不希望它们出现的地方出现 mon 或 mgr!让我们现在添加额外的集群主机。
[root@cs8-1 ~]# for host in cs8-2 cs8-3; do cephadm shell -- ceph orch host add ${host}; done
注意:在添加主机时,还有更多选项可用。请查看 docs,了解更多信息。
这是我们想要达到的目标环境的图片。

现在我们可以组装一个包含确定集群所需状态的规范的单个 yaml 文件。Ceph 守护程序配置的根目录是 /var/lib/ceph/<fsid>。此目录包含一个 home 目录,该目录会自动传递到您的 cephadm shell……这使其成为创建我们的配置文件的一个理想场所:)
创建一个名为“cluster.yaml”的文件,内容如下;
---
service_type: mon
service_id: mon
placement:
hosts:
- cs8-1
- cs8-2
- cs8-3
---
service_type: mgr
service_id: mgr
placement:
hosts:
- cs8-1
- cs8-2
---
service_type: osd
service_id: default_drive_group
placement:
host_pattern: "*"
data_devices:
all: true
---
service_type: prometheus
service_id: prometheus
placement:
hosts:
- cs8-1
---
service_type: grafana
service_id: grafana
placement:
hosts:
- cs8-3
---
service_type: alertmanager
service_id: alertmanager
placement:
count: 3
---
service_type: node-exporter
service_id: node-exporter
placement:
host_pattern: "*"
---
service_type: mds
service_id: myfs
placement:
hosts:
- cs8-2
- cs8-3
---
service_type: rgw
service_id: rgw
placement:
hosts:
- cs8-1
spec:
rgw_frontend_port: 8080

在此示例中,我们声明了服务/守护程序放置的特定主机,但您也可以使用主机标签。orchestrator 将使用主机标签来指导守护程序放置,这可以帮助使您的配置更能容忍变化。有关更多信息,请查看 here
现在,我们只需要将我们期望的状态提供给 orchestrator 来执行即可。
[ceph: root@cs8-1 ~]# ceph orch apply -i ./cluster.yaml
Scheduled mon update...
Scheduled mgr update...
Scheduled osd.default_drive_group update...
Scheduled prometheus update...
Scheduled grafana update...
Scheduled alertmanager update...
Scheduled node-exporter update...
Scheduled mds.cephfs update...
Scheduled rgw.rgw update...
您可以通过 orchestrator(ceph orch ls)或通过 ceph -s 监控您的部署
progress:
Updating grafana deployment (+1 -> 1) (0s)
[............................]

关于这种基于服务的方法,一个关键的事情要记住是,orchestrator 会持续与服务规范定义的期望状态进行协调。在以前的 Ceph 版本中,您可能需要手动重新运行配置管理工具以确保一切都在正确的位置和状态。使用 orchestrator,这些都由它为您完成!
部署完成后,我们需要采取一些部署后步骤才能宣布胜利。启动 cephadm shell,然后按照以下步骤操作;
- 需要启用 mgr/prometheus 模块并更新 Prometheus 服务器
[ceph: root@cs8-1 ~]# ceph mgr module enable prometheus
[ceph: root@cs8-1 ~]# ceph orch reconfig prometheus
注意:此步骤是临时的,因为有一个 pull request 正在进行中,以自动处理此问题。
- 虽然我们可以看到 mds 守护程序已部署到我们想要的位置 - 但还没有池或相应的文件系统。此时,
ceph fs status将显示两个 mds 守护程序都处于待机模式)。要完成“myfs”文件系统的配置,请从 cephadm shell 中运行此命令
[ceph: root@cs8-1 ~]# ceph fs volume create myfs
这将自动创建 myfs 卷所需的池,名为 cephfs.myfs.meta 和 cephfs.myfs.data
- 让我们不要让块存储用户失望。
[ceph: root@cs8-1 ~]# ceph osd pool create rbd replicated
[ceph: root@cs8-1 ~]# ceph osd pool application enable rbd rbd
那么我们做了什么?
✔ 我们有一个闪亮的新 Ceph Pacific 集群,定义在 3 个主机上
✔ Ceph 服务和守护程序已手动放置在特定主机上,按照我们的计划。
✔ Ceph GUI 已启用,并默认使用 https 保护
✔ 集成监控和警报处于活动状态(Prometheus、AlertManager 和 Grafana)
✔ 可以通过任何协议(块、文件或对象)使用存储