1. 安装 CEPH 方法介绍
推荐方法
Cephadm使用容器和 systemd 安装和管理 Ceph 集群,并与 CLI 和仪表板 GUI 紧密集成。
- cephadm 仅支持 Octopus 和更新版本。
- cephadm 与新的编排 API 完全集成,并完全支持新的 CLI 和仪表板功能来管理集群部署。
- cephadm 需要容器支持(podman 或 docker)和 Python 3。
Rook部署和管理在 Kubernetes 中运行的 Ceph 集群,同时还支持通过 Kubernetes API 管理存储资源和配置。我们推荐 Rook 作为在 Kubernetes 中运行 Ceph 或将现有 Ceph 存储集群连接到 Kubernetes 的方式。
- Rook 仅支持 Nautilus 和更新版本的 Ceph。
- Rook 是在 Kubernetes 上运行 Ceph 或将 Kubernetes 集群连接到现有(外部)Ceph 集群的首选方法。
- Rook 支持新的 Orchestrator API。完全支持 CLI 和仪表板中的新管理功能。
其他方法
ceph-ansible 使用 Ansible 部署和管理 Ceph 集群。
- ceph-ansible 被广泛部署。
- ceph-ansible 未与 Nautlius 和 Octopus 中引入的新编排器 API 集成,这意味着较新的管理功能和仪表板集成不可用。
ceph-deploy是一个快速部署集群的工具。
重要的 ceph-deploy 不再积极维护。它没有在比 Nautilus 更新的 Ceph 版本上进行测试。它不支持 RHEL8、CentOS 8 或更新的操作系统。
2. Cephadm 介绍
Cephadm 通过从管理器守护进程通过 SSH 连接到主机来部署和管理 Ceph 集群,以添加、删除或更新 Ceph 守护进程容器。它不依赖于 Ansible、Rook 或 Salt 等外部配置或编排工具。
Cephadm 管理 Ceph 集群的整个生命周期。它首先在单个节点(一个监视器和一个管理器)上引导一个小型 Ceph 集群,然后使用编排接口(“day 2”命令)扩展集群以包含所有主机并提供所有 Ceph 守护进程和服务。这可以通过 Ceph 命令行界面 (CLI) 或仪表板 (GUI) 执行。
Cephadm 是 Octopus v15.2.0 版本中的新功能,不支持旧版本的 Ceph。
Cephadm 是新的。在使用 cephadm 部署生产系统之前,请阅读稳定性。
稳定性
Cephadm 是 Octopus 版本中的一项新功能,在生产和规模上的使用有限。我们希望用户尝试使用 cephadm,尤其是对于新集群,但请注意,某些功能仍然很粗糙。我们期望在 Octopus 的前几个错误修复版本中进行相当频繁的更新和改进。
目前支持以下组件的 Cephadm 管理:
- Monitors
- Managers
- OSDs
- CephFS file systems
- rbd-mirror
以下组件正在使用cephadm,但文档没有我们想要的那么完整,并且在不久的将来可能会有一些变化:
- RGW
- dmcrypt OSD
Cephadm 对以下功能的支持仍在开发中:
- NFS
- iSCSI
如果遇到问题,您可以随时使用以下命令暂停 cephadm:
ceph orch pause
或者使用以下命令完全关闭 cephadm:
ceph orch set backend ''
ceph mgr module disable cephadm
3. 部署一个新的 CEPH 集群
Cephadm 通过在单个主机上“引导”创建一个新的 Ceph 集群,扩展集群以包含任何额外的主机,然后部署所需的服务。
要求
- Systemd
- 用于运行容器的 Podman 或 Docker
- 时间同步(如chrony或NTP)
- LVM2 用于配置存储设备
任何现代 Linux 发行版都应该足够了。依赖项由下面的引导程序自动安装。
当前建议使用 Ubuntu 20.04 LTS 发行版,因其自带 octopus 的安装包。
引导一个新集群
您需要知道集群的第一个监视器守护程序使用哪个IP 地址。这通常只是第一台主机的 IP。如果有多个网络和接口,请确保选择一个可供访问 Ceph 集群的任何主机访问的网络和接口。
要引导集群:
# mkdir -p /etc/ceph
# cephadm bootstrap --mon-ip *<mon-ip>*
此命令将:
- 在本地主机上为新集群创建一个 monitor 和 manager 守护进程。
- 为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件中。
- 将与新集群通信所需的最小配置文件写入/etc/ceph/ceph.conf.
- 将client.admin管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.
- 将公钥的副本写入 /etc/ceph/ceph.pub.
默认引导行为适用于绝大多数用户。请参阅下面的一些可能对某些用户有用的选项,或运行以查看所有可用选项:cephadm bootstrap -h
- 为了方便起见,Bootstrap 将访问新集群所需的文件写入/etc/ceph中 ,以便安装在主机本身上的任何 Ceph 包(例如,访问命令行界面)可以轻松找到它们。
但是,使用 cephadm 部署的守护进程容器根本不需要 /etc/ceph。使用 --output-dir
- 您可以通过将任何初始 Ceph 配置选项放入标准 ini 样式配置文件并使用 --config
选项,将它们传递给新集群。例如:
# cat <<EOF > initial-ceph.conf
[global]
osd crush chooseleaf type = 0
EOF
# cephadm bootstrap --config initial-ceph.conf ...
-
您可以使用 --ssh-user
选项选择 cephadm 将用于连接到主机的 ssh 用户。ssh 密钥将被添加到 /home/ /.ssh/authorized_keys. 此用户将需要无密码的 sudo 访问权限。 -
如果您在需要登录的经过身份验证的注册表上使用容器,您可以添加三个参数 --registry-url
,--registry-username ,--registry-password 或者 --registry-json 。Cephadm 将尝试登录此注册表,以便它可以拉取您的容器,然后将登录信息存储在其配置数据库中,以便添加到集群的其他主机也可以使用经过身份验证的注册表。
启用 CEPH CLI
Cephadm 不需要在主机上安装任何 Ceph 包。但是,我们建议启用对ceph 命令的轻松访问。做这件事有很多种方法:
- 该命令会在安装了所有 Ceph 包的容器中启动一个 bash shell。
# cephadm shell
- 要执行ceph命令,您还可以像这样运行命令:
# cephadm shell -- ceph -s
- 您可以安装该ceph-common软件包,其中包含所有ceph命令,包括ceph、rbd、mount.ceph(用于挂载 CephFS 文件系统)等:
# cephadm add-repo --release octopus
# cephadm install ceph-common
或者,本实验使用APT直接安装软件包:apt install ceph-common ceph-base
确认该ceph命令可访问:
# ceph -v
使用以下ceph命令确认该命令可以连接到集群及其状态:
# ceph status
将主机添加到集群
要将每个新主机添加到集群,请执行两个步骤:
- 在新主机的 root 用户authorized_keys文件中安装集群的公共 SSH 密钥 :
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*
例如:
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@host2
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@host3
- 告诉 Ceph 新节点是集群的一部分:
# ceph orch host add *newhost*
例如:
# ceph orch host add host2
# ceph orch host add host3
部署额外的监视器(可选)
一个典型的 Ceph 集群有三个或五个分布在不同主机上的监视器守护进程。如果集群中有五个或更多节点,我们建议部署五个监视器。
当 Ceph 知道监视器应该使用哪个 IP 子网时,它可以随着集群的增长(或收缩)自动部署和扩展监视器。默认情况下,Ceph 假定其他监视器应该使用与第一个监视器的 IP 相同的子网。
如果您的 Ceph 监视器(或整个集群)位于单个子网上,那么默认情况下,cephadm 会在您向集群添加新主机时自动添加最多 5 个监视器。不需要进一步的步骤。
- 如果监视器应该使用特定的 IP 子网,您可以使用CIDR格式(例如,10.1.2.0/24)配置它:
# ceph config set mon public_network *<mon-cidr-network>*
例如:
# ceph config set mon public_network 10.1.2.0/24
Cephadm 仅在已配置子网中配置了 IP 的主机上部署新的监视器守护进程。
- 如果要调整 5 台监视器的默认值:
# ceph orch apply mon *<number-of-monitors>*
- 在一组特定的主机上部署监视器:
# ceph orch apply mon *<host1,host2,host3,...>*
确保在此列表中包含第一个(引导)主机。
- 您可以通过使用主机标签来控制监视器在哪些主机上运行。将mon标签设置为适当的主机:
# ceph orch host label add *<hostname>* mon
查看当前主机和标签:
# ceph orch host ls
例如:
# ceph orch host label add host1 mon
# ceph orch host label add host2 mon
# ceph orch host label add host3 mon
# ceph orch host ls
HOST ADDR LABELS STATUS
host1 mon
host2 mon
host3 mon
host4
host5
告诉 cephadm 根据标签部署监视器:
# ceph orch apply mon label:mon
- 您可以为每个监视器和控件的放置位置明确指定 IP 地址或 CIDR 网络。要禁用自动监视器部署:
# ceph orch apply mon --unmanaged
要部署每个额外的监视器:
# ceph orch daemon add mon *<host1:ip-or-network1> [<host1:ip-or-network-2>...]*
例如,要在网络中使用 IP 地址 10.1.2.123 和 10.1.2.0/24 部署第二个监视器 newhost1 和第三个监视器 newhost2
# ceph orch apply mon --unmanaged
# ceph orch daemon add mon newhost1:10.1.2.123
# ceph orch daemon add mon newhost2:10.1.2.0/24
ceph orch apply mon 命令可能会造成混淆。因此,我们建议使用 YAML 规范。
每个“ceph orch apply mon”命令都会取代之前的命令。这意味着当您想要将监视器应用于多个主机时,您必须使用正确的基于逗号分隔的列表语法。如果您不使用正确的语法,您将在进行中破坏您的操作。
例如:
# ceph orch apply mon host1
# ceph orch apply mon host2
# ceph orch apply mon host3
这导致只有一台主机应用了监视器:host3。
(第一个命令在 host1 上创建一个监视器。然后第二个命令破坏了 host1 上的监视器并在 host2 上创建了一个监视器。然后第三个命令破坏了 host2 上的监视器并在 host3 上创建了一个监视器。在这个场景中,此时,仅在 host3 上有一个监视器。)
要确保将监视器应用于这三个主机中的每一个,请运行如下命令:
# ceph orch apply mon "host1,host2,host3"
或者不要使用“ceph orch apply mon”命令,运行如下命令:
# ceph orch apply -i file.yaml
这是一个示例file.yaml文件:
service_type: mon
placement:
hosts:
- host1
- host2
- host3
部署 OSD
可以通过以下方式显示所有群集主机上的存储设备清单:
# ceph orch device ls
如果满足以下所有条件,则认为存储设备可用:
-
设备必须没有分区。
-
设备不得具有任何 LVM 状态。
-
不得安装设备。
-
设备不得包含文件系统。
-
设备不得包含 Ceph BlueStore OSD。
-
设备必须大于 5 GB。
Ceph 拒绝在不可用的设备上配置 OSD。
有几种方法可以创建新的 OSD:
- 告诉 Ceph 消耗任何可用和未使用的存储设备:
# ceph orch apply osd --all-available-devices
- 从特定主机上的特定设备创建 OSD:
# ceph orch daemon add osd *<host>*:*<device-path>*
例如:
# ceph orch daemon add osd host1:/dev/sdb
- 使用OSD 服务规范根据设备的属性来描述要使用的设备,例如设备类型(SSD 或 HDD)、设备型号名称、大小或设备所在的主机:https://docs.ceph.com/en/octopus/cephadm/drivegroups/#drivegroups
# ceph orch apply osd -i spec.yml
例如:
service_type: osd
service_id: default_drive_group <- name of the drive_group (name can be custom)
placement:
host_pattern: '*' <- which hosts to target, currently only supports globs
data_devices: <- the type of devices you are applying specs to
all: true <- a filter, check below for a full list
在所有匹配全局模式“*”的主机上,将任何可用设备(ceph-volume 决定什么是“可用”)转换为 OSD。(glob 模式与来自 host ls 的注册主机匹配)
部署 MDS
使用 CephFS 文件系统需要一个或多个 MDS 守护进程。如果使用较新的 ceph fs volume 接口来创建新的文件系统,则会自动创建这些文件。有关更多信息,请参阅FS 卷和子卷。
https://docs.ceph.com/en/octopus/cephfs/fs-volumes/#fs-volumes-and-subvolumes
部署元数据服务器:
# ceph orch apply mds *<fs-name>* --placement="*<num-daemons>* [*<host1>* ...]"
有关放置规范的详细信息,请参阅:https://docs.ceph.com/en/octopus/mgr/orchestrator/#orchestrator-cli-placement-spec