第 1 章 在容器中部署 Red Hat Ceph Storage


本章论述了如何将 Ansible 应用与 ceph-ansible playbook 搭配使用,以在容器中部署 Red Hat Ceph Storage 3。

1.1. 先决条件

将每个 Red Hat Ceph Storage(RHCS)节点注册到 Content Delivery Network(CDN),并附加适当的订阅,以便节点可以访问软件存储库。每个 RHCS 节点都必须能访问完整的 Red Hat Enterprise Linux 7 基本内容和额外存储库内容。

先决条件
  • 有效的红帽订阅
  • RHCS 节点必须能够连接到互联网。
  • 对于在安装过程中无法访问互联网的 RHCS 节点,您必须首先在有互联网访问的系统中按照以下步骤操作:

    1. 启动本地 Docker registry:

      # docker run -d -p 5000:5000 --restart=always --name registry registry:2
      Copy to Clipboard Toggle word wrap
    2. 从红帽客户门户网站拉取 Red Hat Ceph Storage 3.x 镜像:

      # docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
      Copy to Clipboard Toggle word wrap
    3. 标记镜像:

       # docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg
      Copy to Clipboard Toggle word wrap

      <local-host-fqdn> 替换为本地主机 FQDN。

    4. 将镜像推送到您启动的本地 Docker registry:

      # docker push <local-host-fqdn>:5000/cephimageinlocalreg
      Copy to Clipboard Toggle word wrap

      <local-host-fqdn> 替换为本地主机 FQDN。

步骤

root 用户身份在存储集群中的所有节点上执行以下步骤。

  1. 注册该节点。在提示时,输入您的红帽客户门户网站凭证:

    # subscription-manager register
    Copy to Clipboard Toggle word wrap
  2. 从 CDN 拉取最新的订阅数据:

    # subscription-manager refresh
    Copy to Clipboard Toggle word wrap
  3. 列出 Red Hat Ceph Storage 的所有可用订阅:

    # subscription-manager list --available --all --matches="*Ceph*"
    Copy to Clipboard Toggle word wrap

    确定适当的订阅并检索其池 ID。

  4. 附加订阅:

    # subscription-manager attach --pool=$POOL_ID
    Copy to Clipboard Toggle word wrap
    替换
    • $POOL_ID,其池 ID 在上一步中标识。
  5. 禁用默认软件存储库。然后,启用 Red Hat Enterprise Linux 7 Server、Red Hat Enterprise Linux 7 Server Extras 和 RHCS 软件仓库:

    # subscription-manager repos --disable=*
    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-els-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
    Copy to Clipboard Toggle word wrap
  6. 更新系统以接收最新的软件包:

    # yum update
    Copy to Clipboard Toggle word wrap
其它资源

1.1.2. 创建具有 sudo 访问权限的 Ansible 用户

Ansible 必须能够以具有 root 权限的用户身份登录所有 Red Hat Ceph Storage 节点,以便在不提示输入密码的情况下安装软件和创建配置文件。在使用 Ansible 部署和配置 Red Hat Ceph Storage 集群时,您必须在存储集群的所有节点上创建一个没有密码的 root 用户。

前提条件

  • 对存储集群中的所有节点具有 rootsudo 访问权限。

步骤

  1. root 用户身份登录 Ceph 节点:

    ssh root@$HOST_NAME
    Copy to Clipboard Toggle word wrap
    替换
    • $HOST_NAME,主机名为 Ceph 节点。

    示例

    # ssh root@mon01
    Copy to Clipboard Toggle word wrap

    出现提示时,输入 root 密码。

  2. 创建一个新的 Ansible 用户:

    adduser $USER_NAME
    Copy to Clipboard Toggle word wrap
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # adduser admin
    Copy to Clipboard Toggle word wrap

    重要

    不要使用 ceph 作为用户名。ceph 用户名保留用于 Ceph 守护进程。整个集群中的统一用户名可以提高易用性,但避免使用明显的用户名,因为入侵者通常使用它们进行暴力攻击。

  3. 为这个用户设置一个新密码:

    # passwd $USER_NAME
    Copy to Clipboard Toggle word wrap
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # passwd admin
    Copy to Clipboard Toggle word wrap

    出现提示时,输入新密码两次。

  4. 为新创建的用户配置 sudo 访问权限:

    cat << EOF >/etc/sudoers.d/$USER_NAME
    $USER_NAME ALL = (root) NOPASSWD:ALL
    EOF
    Copy to Clipboard Toggle word wrap
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # cat << EOF >/etc/sudoers.d/admin
    admin ALL = (root) NOPASSWD:ALL
    EOF
    Copy to Clipboard Toggle word wrap

  5. 为新文件分配正确的文件权限:

    chmod 0440 /etc/sudoers.d/$USER_NAME
    Copy to Clipboard Toggle word wrap
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # chmod 0440 /etc/sudoers.d/admin
    Copy to Clipboard Toggle word wrap

其它资源

  • Red Hat Enterprise Linux 7 系统管理员指南 中的 Adding a New User 部分。

1.1.3. 为 Ansible 启用无密码 SSH

在 Ansible 管理节点上生成 SSH 密钥对,并将公钥分发到存储集群中的每个节点,以便 Ansible 可以在不提示输入密码的情况下访问节点。

先决条件
步骤

从 Ansible 管理节点以及 Ansible 用户执行以下步骤。

  1. 生成 SSH 密钥对,接受默认文件名并将密语留空:

    [user@admin ~]$ ssh-keygen
    Copy to Clipboard Toggle word wrap
  2. 将公钥复制到存储集群中的所有节点:

    ssh-copy-id $USER_NAME@$HOST_NAME
    Copy to Clipboard Toggle word wrap
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。
    • $HOST_NAME,主机名为 Ceph 节点。

    示例

    [user@admin ~]$ ssh-copy-id admin@ceph-mon01
    Copy to Clipboard Toggle word wrap

  3. 创建并编辑 ~/.ssh/config 文件。

    重要

    通过创建和编辑 ~/.ssh/config 文件,您不必在每次执行 ansible-playbook 命令时指定 -u $USER_NAME 选项。

    1. 创建 SSH 配置文件

      [user@admin ~]$ touch ~/.ssh/config
      Copy to Clipboard Toggle word wrap
    2. 打开 配置文件 进行编辑。为存储集群中的每个节点设置 HostnameUser 选项:

      Host node1
         Hostname $HOST_NAME
         User $USER_NAME
      Host node2
         Hostname $HOST_NAME
         User $USER_NAME
      ...
      Copy to Clipboard Toggle word wrap
      替换
      • $HOST_NAME,主机名为 Ceph 节点。
      • $USER_NAME,以及 Ansible 用户的新用户名。

      示例

      Host node1
         Hostname monitor
         User admin
      Host node2
         Hostname osd
         User admin
      Host node3
         Hostname gateway
         User admin
      Copy to Clipboard Toggle word wrap

  4. ~/.ssh/config 文件设置正确的文件权限:

    [admin@admin ~]$ chmod 600 ~/.ssh/config
    Copy to Clipboard Toggle word wrap
其它资源
  • ssh_config(5) 手册页
  • Red Hat Enterprise Linux 7 系统管理员指南中的 OpenSSH 章节

1.1.4. 为 Red Hat Ceph Storage 配置防火墙

Red Hat Ceph Storage(RHCS)使用 firewalld 服务。

Monitor 守护进程使用端口 6789 用于在 Ceph 存储群集内进行通信。

在每个 Ceph OSD 节点上,OSD 守护进程使用 6800-7300 范围内的多个端口:

  • 一个用于通过公共网络与客户端通信和监控器
  • 一个用于通过集群网络发送数据到其他 OSD(如果可用);否则,通过公共网络发送数据
  • 一个用于通过集群网络(如果有)交换心跳数据包;否则,通过公共网络交换。

Ceph 管理器 (ceph-mgr) 守护进程使用范围为 6800-7300 的端口。考虑将 ceph-mgr 守护进程与 Ceph monitor 在同一节点上并置。

Ceph 元数据服务器节点(ceph-mds)使用范围 680 0-7300 中的端口

Ceph 对象网关节点由 Ansible 配置为使用默认端口 8080。但是,您可以更改默认端口,例如端口 80

要使用 SSL/TLS 服务,请打开端口 443

前提条件

  • 网络硬件已连接。

步骤

root 用户身份运行以下命令。

  1. 在所有 RHCS 节点上,启动 firewalld 服务。启用它在引导时运行,并确保它正在运行:

    # systemctl enable firewalld
    # systemctl start firewalld
    # systemctl status firewalld
    Copy to Clipboard Toggle word wrap
  2. 在所有监控节点上,打开 公共网络 上的端口 6789:

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent
    Copy to Clipboard Toggle word wrap

    根据源地址限制访问:

    firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="IP_address/netmask_prefix" port protocol="tcp" \
    port="6789" accept"
    Copy to Clipboard Toggle word wrap
    firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="IP_address/netmask_prefix" port protocol="tcp" \
    port="6789" accept" --permanent
    Copy to Clipboard Toggle word wrap
    替换
    • 带有 monitor 节点的网络地址的 ip _address
    • 带有 CIDR 表示法子网掩码的 netmask_prefix

    示例

    [root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.11/24" port protocol="tcp" \
    port="6789" accept"
    Copy to Clipboard Toggle word wrap

    [root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.11/24" port protocol="tcp" \
    port="6789" accept" --permanent
    Copy to Clipboard Toggle word wrap
  3. 在所有 OSD 节点上,打开公共网络上的端口 6800-7300

    [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp
    [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
    Copy to Clipboard Toggle word wrap

    如果您有单独的集群网络,请对适当的区重复这些命令。

  4. 在所有 Ceph Manager(ceph-mgr)节点上(通常是与监控器节点相同),在公共网络上打开端口 6800-7300

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
    Copy to Clipboard Toggle word wrap

    如果您有单独的集群网络,请对适当的区重复这些命令。

  5. 在所有 Ceph 元数据服务器(ceph-mds)节点上,打开公共网络上的端口 6800

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp --permanent
    Copy to Clipboard Toggle word wrap

    如果您有单独的集群网络,请对适当的区重复这些命令。

  6. 在所有 Ceph 对象网关节点上,打开公共网络上的相关端口或端口。

    1. 打开默认 Ansible 配置的端口 8080:

      [root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp
      [root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
      Copy to Clipboard Toggle word wrap

      根据源地址限制访问:

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="8080" accept"
      Copy to Clipboard Toggle word wrap
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="8080" accept" --permanent
      Copy to Clipboard Toggle word wrap
      替换
      • ip_address 带有对象网关节点的网络地址。
      • 带有 CIDR 表示法子网掩码的 netmask_prefix

      示例

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="8080" accept"
      Copy to Clipboard Toggle word wrap

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="8080" accept" --permanent
      Copy to Clipboard Toggle word wrap
    2. 可选。如果使用 Ansible 安装 Ceph 对象网关,并且更改 Ansible 将 Ceph 对象网关配置为从 8080 使用的默认端口,例如,使用端口 80,打开此端口:

      [root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp
      [root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
      Copy to Clipboard Toggle word wrap

      要根据源地址限制访问,请运行以下命令:

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="80" accept"
      Copy to Clipboard Toggle word wrap
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="80" accept" --permanent
      Copy to Clipboard Toggle word wrap
      替换
      • ip_address 带有对象网关节点的网络地址。
      • 带有 CIDR 表示法子网掩码的 netmask_prefix

      示例

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="80" accept"
      Copy to Clipboard Toggle word wrap

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="80" accept" --permanent
      Copy to Clipboard Toggle word wrap
    3. 可选。要使用 SSL/TLS,请打开端口 443

      [root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp
      [root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
      Copy to Clipboard Toggle word wrap

      要根据源地址限制访问,请运行以下命令:

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="443" accept"
      Copy to Clipboard Toggle word wrap
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="443" accept" --permanent
      Copy to Clipboard Toggle word wrap
      替换
      • ip_address 带有对象网关节点的网络地址。
      • 带有 CIDR 表示法子网掩码的 netmask_prefix

      示例

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="443" accept"
      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="443" accept" --permanent
      Copy to Clipboard Toggle word wrap

其它资源

1.1.5. 使用 HTTP 代理

如果 Ceph 节点位于 HTTP/HTTPS 代理后面,则需要配置 docker 以访问 registry 中的镜像。执行以下步骤使用 HTTP/HTTPS 代理配置 docker 的访问。

先决条件
  • 正在运行的 HTTP/HTTPS 代理
步骤
  1. 作为 root 用户,为 docker 服务创建一个 systemd 目录:

    # mkdir /etc/systemd/system/docker.service.d/
    Copy to Clipboard Toggle word wrap
  2. root 身份,创建 HTTP/HTTPS 配置文件。

    1. 对于 HTTP,创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并将以下几行添加到文件中:

      [Service]
      Environment="HTTP_PROXY=http://proxy.example.com:80/"
      Copy to Clipboard Toggle word wrap
    2. 对于 HTTPS,请创建 /etc/systemd/system/docker.service.d/https-proxy.conf 文件,并将以下几行添加到文件中:

      [Service]
      Environment="HTTPS_PROXY=https://proxy.example.com:443/"
      Copy to Clipboard Toggle word wrap
  3. root 用户身份,在运行 ceph-ansible playbook 之前,将 HTTP/HTTPS 配置文件复制到存储集群中的所有节点。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat