Ubuntu 20.04 LTS 使用 cephadm 部署 ceph octopus 实验记录

参考:https://docs.ceph.com/en/octopus/install/

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 <directory> 选项将它们放在不同的目录中,避免与同一主机上的现有 Ceph 配置(cephadm 或其他)发生任何潜在冲突。

  • 您可以通过将任何初始 Ceph 配置选项放入标准 ini 样式配置文件并使用 --config <config-file> 选项,将它们传递给新集群。例如:
# cat <<EOF > initial-ceph.conf
[global]
osd crush chooseleaf type = 0
EOF

# cephadm bootstrap --config initial-ceph.conf ...
  • 您可以使用 --ssh-user <user> 选项选择 cephadm 将用于连接到主机的 ssh 用户。ssh 密钥将被添加到 /home/<user>/.ssh/authorized_keys. 此用户将需要无密码的 sudo 访问权限。

  • 如果您在需要登录的经过身份验证的注册表上使用容器,您可以添加三个参数 --registry-url <url of registry>,--registry-username <username of account on registry>,--registry-password <password of account on registry> 或者 --registry-json <json file with login info>。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
# 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

posted @ 2021-09-15 15:02  Varden  阅读(2777)  评论(0编辑  收藏  举报