注意

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

使用 cephadm 部署新的 Ceph 集群

Cephadm 通过引导单个主机创建一个新的 Ceph 集群,将集群扩展到包含任何其他主机,然后部署所需的服务。

要求

  • Python 3

  • Systemd

  • 使用 Podman 或 Docker 运行容器

  • 时间同步(例如 Chrony 或传统的ntpd)

  • LVM2 用于配置存储设备)

任何现代的 Linux 发行版都应该足够。依赖项由以下引导过程自动安装。

请参阅Docker Live Restore用于可选功能,允许在不重新启动所有正在运行的容器的情况下重新启动 Docker 引擎。

请参阅该部分与 Podman 的兼容性用于 Ceph 版本兼容性表 Podman。并非所有 Podman 版本都与 Ceph 兼容。

安装 cephadm

在安装 cephadm 时有两个关键步骤:首先需要获取 cephadm 的初始副本,然后第二个步骤是确保您拥有最新的 cephadm。有两种方法可以获取初始cephadm:

  1. 特定于发行版的安装方法

  2. a 基于 curl 的安装方法

重要

这些安装方法互斥。cephadm are mutually exclusive. Choose either the distribution-specific method or the curl-based method. Do not attempt to use both these methods on one system.

Note

较新的 cephadm 版本作为从源代码编译的可执行文件进行分发。编译 cephadm了解如何创建自己的独立 cephadm 可执行文件的详细信息。

特定于发行版的安装

某些 Linux 发行版可能已经包含最新的 Ceph 软件包。在这种情况下,您可以直接安装 cephadm。例如:

在 Ubuntu 中:

apt install -y cephadm

在 CentOS Stream 中:

dnf search release-ceph
dnf install --assumeyes centos-release-ceph-squid
dnf install --assumeyes cephadm

在 Fedora 中:

dnf -y install cephadm

在 SUSE 中:

zypper install -y cephadm

使用 curl 安装 cephadm

  1. 确定您将要安装的 Ceph 版本。使用发布页面查找最新活动发布。例如,您可能会发现18.2.1是最新的活动发布。

  2. 使用curl以获取该发布的 cephadm 构建。

    CEPH_RELEASE=18.2.0 # replace this with the active release
    curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
    
  3. 使用chmod以使cephadm文件可执行:

chmod +x cephadm

运行chmod在 cephadm 上运行后,它可以从当前目录运行:

./cephadm <arguments...>

cephadm 需要 Python 3.6 或更高版本

  • cephadm需要 Python 3.6 或更高版本。如果您在运行cephadm时遇到困难,那么您可能没有安装 Python 或正确版本的 Python。这包括任何包含消息bad interpreter.

    您可以通过在命令前缀您的安装的 Python 版本来手动运行 cephadm。例如:

    python3.8 ./cephadm <arguments...>
    

在主机上安装 cephadm

虽然独立cephadm足以引导集群,但最好在主机上安装cephadm命令。要安装提供cephadm命令的软件包,请运行以下命令:

  1. 添加存储库:

    ./cephadm add-repo --release |stable-release|
    
  2. 在你克隆仓库的目录中运行cephadm install:

    ./cephadm install
    
  3. 通过运行cephadm来确认which:

    which cephadm
    

    一个成功的which cephadm命令将返回此:

    /usr/sbin/cephadm
    

引导一个新的集群

在引导之前需要了解的内容

创建新 Ceph 集群的第一步是在 Ceph 集群的第一个主机上运行cephadm bootstrap命令。在 Ceph 集群的第一个主机上运行cephadm bootstrap命令会创建 Ceph 集群的第一个 Monitor 守护进程。ceph bootstrap命令,因此您需要知道该主机的 IP 地址。

重要

ssh必须安装并运行,以便引导过程成功。

Note

如果有多个网络和接口,请确保选择一个任何访问 Ceph 集群的主机都可以访问的网络。

运行引导命令

,则表示你位于正确的目录中。运行ceph bootstrap command:

cephadm bootstrap --mon-ip *<mon-ip>*

此命令将:

  • 在本地主机为新的集群创建一个 Monitor 和一个 Manager 守护进程。

  • 为 Ceph 集群生成一个新的 SSH 密钥并将其添加到 root 用户的/root/.ssh/authorized_keys文件。

  • 将公钥副本写入/etc/ceph/ceph.pub.

  • 写入一个最小的配置文件到/etc/ceph/ceph.conf。此文件是与其他 Ceph 守护进程通信所必需的。

  • client.admin行政(特权!)/etc/ceph/ceph.client.admin.keyring.

  • 添加_admin标签到引导主机。默认情况下,任何具有此标签的主机也将(也)获得/etc/ceph/ceph.conf/etc/ceph/ceph.client.admin.keyring.

关于 cephadm 引导的更多信息

默认的引导过程对大多数用户都有效。但是,如果您想立即了解更多关于cephadm bootstrap的信息,请阅读下面的列表。

您还可以运行cephadm bootstrap -h以查看所有cephadm的可用选项。

  • 默认情况下,Ceph 守护进程将其日志输出发送到 stdout/stderr,这是由容器运行时(docker 或 podman)捕获的,并且在大多数系统上被发送到 journald。如果您希望 Ceph 将传统的日志文件写入/var/log/ceph/$fsid,请在引导期间使用--log-to-file选项。

  • 较大的 Ceph 集群在(Ceph 集群外部)公共网络流量与(Ceph 集群内部)集群流量分离时表现最佳。内部集群流量处理 OSD 守护进程之间的复制、恢复和心跳。您可以通过向集群网络来定义--cluster-network。此参数必须是 CIDR 表示法的子网(例如bootstrap子命令提供10.90.90.0/24fe80::/64).

  • cephadm bootstrap写入/etc/ceph文件以访问

    但是,使用 cephadm 部署的守护进程容器完全不需要/etc/ceph。使用--output-dir *<directory>*选项将它们放在不同的目录(例如,.)。这可能有助于避免与同一主机上现有的 Ceph 配置(cephadm 或其他)发生冲突。

  • 您可以通过将它们放在标准的 ini 风格的配置文件中并使用--config *<config-file>*选项来传递任何初始 Ceph 配置选项到新集群。例如:

    $ cat <<EOF > initial-ceph.conf
    [global]
    osd crush chooseleaf type = 0
    EOF
    $ ./cephadm bootstrap --config initial-ceph.conf ...
    
  • The --ssh-user *<user>*选项使得可以指定 cephadm 将用于连接到主机的 SSH 用户。相关的 SSH 密钥将被添加到~*<user>*/.ssh/authorized_keys。您指定的用户必须具有无密码的 sudo 访问权限。

  • 如果您使用的是需要登录的注册表的容器镜像,您可以添加参数:

    • --registry-json <path to json file>

    示例 JSON 文件内容,包含登录信息:

    {"url":"REGISTRY_URL", "username":"REGISTRY_USERNAME", "password":"REGISTRY_PASSWORD"}
    

    Cephadm 将尝试登录到此注册表,以便它可以拉取您的容器,然后将登录信息存储在其配置数据库中。然后,添加到集群的其他主机也将能够使用经过身份验证的容器注册表。

  • 请参阅不同的部署场景用于使用cephadm bootstrap.

启用 Ceph CLI

Cephadm 不需要在主机上安装任何 Ceph 软件包。但是,我们建议启用对ceph命令的轻松访问。有几种方法可以做到这一点:

  • The cephadm shell命令在具有所有 Ceph 软件包的容器中启动一个 bash shell。默认情况下,如果主机上的/etc/ceph找到配置和密钥环文件,它们将被传递到容器环境中,以便 shell 完全可以运行。请注意,当在 MON 主机上执行时,cephadm shell将从 MON 容器推断出config而不是使用默认配置。如果--mount <path>被提供,则主机<path>(文件或目录) 将在容器内的/mnt下出现:

    cephadm shell
    
  • 要执行ceph命令,您也可以运行命令,如下所示:

    cephadm shell -- ceph -s
    
  • 您可以安装ceph-common软件包,其中包含所有 ceph 命令,包括ceph, rbd, mount.ceph(用于挂载 CephFS 文件系统),等等。:

    cephadm add-repo --release squid
    cephadm install ceph-common
    

确认ceph命令:

ceph -v

确认ceph命令可以连接到集群并检查其状态:

ceph status

添加主机

通过遵循添加主机.

中的说明将所有主机添加到集群。默认情况下,在所有具有ceph.conf文件和client.admin密钥环的副本。此标签最初仅应用于引导主机。我们建议一个或多个其他主机获得/etc/ceph on all hosts that have the _admin标签的主机上维护一个_admin标签,以便在多个主机上轻松访问 Ceph CLI(例如,通过cephadm shell)。要将_admin标签添加到其他主机,请运行以下形式的命令:

ceph orch host label add *<host>* _admin

添加额外的 MON

一个典型的 Ceph 集群有三个或五个分布在不同主机上的 Monitor 守护进程。如果您的集群有五个或更多节点,我们建议部署五个 Monitor。大多数集群不会从七个或更多的 Monitor 中受益。

请遵循部署附加监视器以部署附加 MONs。

添加存储

要向集群添加存储,您可以告诉 Ceph 消耗任何可用的未使用设备:

ceph orch apply osd --all-available-devices

请参阅部署 OSDs获取更详细的说明。

启用 OSD 内存自动调整

警告

默认情况下,cephadm 在引导时启用osd_memory_target_autotune,并将mgr/cephadm/autotune_memory_target_ratio设置为.7总主机内存的。

请参阅自动调整 OSD 内存.

要使用 TripleO 部署超融合 Ceph,请参阅 TripleO 文档:场景:部署超融合 Ceph

在其他情况下,如果集群硬件不是专门用于 Ceph(融合基础设施),请像这样减少 Ceph 的内存消耗:

# converged only:
ceph config set mgr mgr/cephadm/autotune_memory_target_ratio 0.2

然后启用内存自动调整:

ceph config set osd osd_memory_target_autotune true

使用 Ceph

要使用Ceph 文件系统,请遵循部署 CephFS.

要使用Ceph 对象网关,请遵循部署 RGWs.

要使用NFS,请遵循NFS 服务

要使用iSCSI,请遵循部署 iSCSI

不同的部署场景

单个主机

要部署在单个主机上运行的 Ceph 集群,在引导时使用--single-host-defaults标志。用例,请参阅单节点集群。这样的集群通常不适合生产环境。

The --single-host-defaults标志设置以下配置选项:

global/osd_crush_chooseleaf_type = 0
global/osd_pool_default_size = 2
mgr/mgr_standby_modules = False

关于这些选项的更多信息,请参阅单节点集群mgr_standby_modules in ceph-mgr 管理员指南.

在隔离环境中部署

您可能需要在未直接连接到互联网的环境(一个“隔离”或“空气隔离”环境)中安装 cephadm。这需要使用自定义容器注册表。在这种情况下,可以使用两种类型的自定义容器注册表:(1)基于 Podman 或 Docker 的不安全注册表,或(2)安全注册表。

在未直接连接到互联网的系统上安装软件的做法称为“空气隔离”,而未直接连接到互联网的注册表被称为“空气隔离”。

确保您的容器镜像在注册表中。确保您有权访问您计划添加到集群的所有主机。

  1. 运行本地容器注册表:

    podman run --privileged -d --name registry -p 5000:5000 -v /var/lib/registry:/var/lib/registry --restart=always registry:2
    
  2. 如果您使用的是不安全注册表,请使用注册表运行的主机名和端口配置 Podman 或 Docker。

    Note

    您必须对每个访问本地不安全注册表的主机重复此步骤。

  3. 将您的容器镜像推送到您的本地注册表。以下是一些可接受的容器镜像类型:

    • Ceph 容器镜像。请参阅Ceph 容器镜像.

    • Prometheus 容器镜像

    • 节点导出器容器镜像

    • Grafana 容器镜像

    • Alertmanager 容器镜像

  4. 创建一个临时配置文件来存储监控镜像的名称。(请参阅默认镜像):

    cat <<EOF > initial-ceph.conf
    
    [mgr]
    mgr/cephadm/container_image_prometheus = *<hostname>*:5000/prometheus
    mgr/cephadm/container_image_node_exporter = *<hostname>*:5000/node_exporter
    mgr/cephadm/container_image_grafana = *<hostname>*:5000/grafana
    mgr/cephadm/container_image_alertmanager = *<hostname>*:5000/alertmanger
    
  5. 使用--image标志运行引导,并将您的容器镜像的名称作为 image 标志的参数。例如:

    cephadm --image *<hostname>*:5000/ceph/ceph bootstrap --mon-ip *<mon-ip>*
    

使用自定义 SSH 密钥部署

引导允许用户创建自己的私钥/公钥 SSH 密钥对,而不是让 cephadm 自动生成它们。

要使用自定义 SSH 密钥,请将--ssh-private-key--ssh-public-key字段传递给引导。两个参数都需要指向存储密钥的文件的路径:

cephadm bootstrap --mon-ip <ip-addr> --ssh-private-key <private-key-filepath> --ssh-public-key <public-key-filepath>

此设置允许用户在引导之前将已经分发给用户想要集群中的主机的密钥对使用。

Note

为了让 cephadm 连接到您想要添加到集群的其他主机,请确保提供的密钥对中的公钥已设置为正在使用的 ssh 用户的授权密钥,通常是 root。如果您想了解更多关于使用非 root 用户作为 ssh 用户的信息,请参阅关于 cephadm 引导的更多信息

使用 CA 签署的 SSH 密钥部署

作为标准公钥认证的替代方案,cephadm 还支持使用 CA 签署的密钥进行部署。在引导之前,建议在您最终想要添加到集群的主机上设置 CA 公钥为受信任的 CA 密钥。例如:

# we will act as our own CA, therefore we'll need to make a CA key
[root@host1 ~]# ssh-keygen -t rsa -f ca-key -N ""

# make the ca key trusted on the host we've generated it on
# this requires adding in a line in our /etc/sshd_config
# to mark this key as trusted
[root@host1 ~]# cp ca-key.pub /etc/ssh
[root@host1 ~]# vi /etc/ssh/sshd_config
[root@host1 ~]# cat /etc/ssh/sshd_config | grep ca-key
TrustedUserCAKeys /etc/ssh/ca-key.pub
# now restart sshd so it picks up the config change
[root@host1 ~]# systemctl restart sshd

# now, on all other hosts we want in the cluster, also install the CA key
[root@host1 ~]# scp /etc/ssh/ca-key.pub host2:/etc/ssh/

# on other hosts, make the same changes to the sshd_config
[root@host2 ~]# vi /etc/ssh/sshd_config
[root@host2 ~]# cat /etc/ssh/sshd_config | grep ca-key
TrustedUserCAKeys /etc/ssh/ca-key.pub
# and restart sshd so it picks up the config change
[root@host2 ~]# systemctl restart sshd

安装 CA 密钥并将其标记为受信任密钥后,您就可以使用私钥/CA 签署的证书组合进行 SSH。继续我们当前的示例,我们将为主机访问创建一个新的密钥对,然后用我们的 CA 密钥

# make a new key pair
[root@host1 ~]# ssh-keygen -t rsa -f cephadm-ssh-key -N ""
# sign the private key. This will create a new cephadm-ssh-key-cert.pub
# note here we're using user "root". If you'd like to use a non-root
# user the arguments to the -I and -n params would need to be adjusted
# Additionally, note the -V param indicates how long until the cert
# this creates will expire
[root@host1 ~]# ssh-keygen -s ca-key -I user_root -n root -V +52w cephadm-ssh-key
[root@host1 ~]# ls
ca-key  ca-key.pub  cephadm-ssh-key  cephadm-ssh-key-cert.pub  cephadm-ssh-key.pub

# verify our signed key is working. To do this, make sure the generated private
# key ("cephadm-ssh-key" in our example) and the newly signed cert are stored
# in the same directory. Then try to ssh using the private key
[root@host1 ~]# ssh -i cephadm-ssh-key host2

一旦您有了私钥和相应的 CA 签署的证书,并且已经使用该密钥测试了 SSH 认证,您就可以将密钥传递给引导,以便 cephadm 使用它们在集群主机之间进行 SSH

[root@host1 ~]# cephadm bootstrap --mon-ip <ip-addr> --ssh-private-key cephadm-ssh-key --ssh-signed-cert cephadm-ssh-key-cert.pub

请注意,此设置不需要在集群其他节点上安装从传递给引导的私钥对应的公钥。事实上,cephadm 会拒绝当与--ssh-public-key一起传递时--ssh-signed-cert。这不是因为拥有公钥会破坏任何东西,而是因为它完全不需要,并且有助于引导命令区分用户是否想要 CA 签署的密钥设置或标准公钥加密。这意味着 SSH 密钥旋转将仅仅是获取由同一 CA 签署的另一个密钥并为您提供新的私钥和签署的证书。无论初始设置 CA 密钥为受信任密钥后旋转了多少个新的私钥/签署的证书对,都不需要将密钥额外分发给集群节点。

由 Ceph 基金会带给您

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