ceph-ansible

用于分布式文件系统 Ceph 的 Ansible Playbook。

安装

GitHub

您可以按照以下步骤直接从 GitHub 上的源代码安装

  • 克隆存储库

    $ git clone https://github.com/ceph/ceph-ansible.git
    
  • 接下来,您必须决定要使用 ceph-ansible 的哪个分支。可以选择稳定的分支,也可以使用主分支

    $ git checkout $branch
    
  • 接下来,使用 pip 和提供的 requirements.txt 来安装 Ansible 和其他所需的 Python 库

    $ pip install -r requirements.txt
    

RHEL 和 CentOS 上的 Ansible

您可以通过从 Ansible channel 安装来获取 RHEL 和 CentOS 上的 Ansible。

在 RHEL 上

$ subscription-manager repos --enable=rhel-7-server-ansible-2-rpms

(CentOS 不使用 subscription-manager 并且默认已启用“Extras”。)

$ sudo yum install ansible

Ubuntu 上的 Ansible

您可以通过使用 Ansible PPA 来获取 Ubuntu 上的 Ansible。

$ sudo add-apt-repository ppa:ansible/ansible
$ sudo apt update
$ sudo apt install ansible

Ansible 集合

为了安装 ceph-ansible 所需的第三方集合,请运行

$ ansible-galaxy install -r requirements.yml

版本发布

应根据您的要求使用以下分支。 stable-* 分支经过 QE 测试,并且在整个生命周期中可能会收到反向移植修复。 main 分支应被视为实验性分支,请谨慎使用。

  • stable-3.0 支持 Ceph 版本 jewelluminous。此分支需要 Ansible 版本 2.4

  • stable-3.1 支持 Ceph 版本 luminousmimic。此分支需要 Ansible 版本 2.4

  • stable-3.2 支持 Ceph 版本 luminousmimic。此分支需要 Ansible 版本 2.6

  • stable-4.0 支持 Ceph 版本 nautilus。此分支需要 Ansible 版本 2.9

  • stable-5.0 支持 Ceph 版本 octopus。此分支需要 Ansible 版本 2.9

  • stable-6.0 支持 Ceph 版本 pacific。此分支需要 Ansible 版本 2.10

  • stable-7.0 支持 Ceph 版本 quincy。此分支需要 Ansible 版本 2.15

  • main 支持 Ceph 的 main (devel) 分支。此分支需要 Ansible 版本 2.152.16

注意

stable-3.0stable-3.1 分支的 ceph-ansible 已弃用且不再维护。

配置和使用

本项目假设您对 Ansible 的工作原理有基本了解,并且已经为 Ansible 配置准备好了主机。

克隆 ceph-ansible 存储库、选择了分支并安装了 Ansible 之后,您需要为 Ceph 集群创建清单文件、playbook 和配置。

清单

Ansible 清单文件定义了集群中的主机以及每个主机在 Ceph 集群中扮演的角色。清单文件的默认位置是 /etc/ansible/hosts,但此文件可以放置在任何位置,并通过 ansible-playbook-i 标志使用。

一个示例清单文件如下所示

[mons]
mon1
mon2
mon3

[osds]
osd1
osd2
osd3

注意

有关 Ansible 清单的更多信息,请参阅 Ansible 文档:https://docs.ansible.org.cn/ansible/latest/intro_inventory.html

Playbook

在部署集群时,必须有一个 playbook 传递给 ansible-playbook 命令。 ceph-ansible 项目的根目录下有一个名为 site.yml.sample 的示例 playbook。此 playbook 对于大多数用途来说都应该没问题,但它默认包含所有守护程序组,这可能不适合您的集群设置。执行以下步骤来准备您的 playbook

  • 重命名示例 playbook:mv site.yml.sample site.yml

  • 根据集群要求修改 playbook

注意

您使用的 playbook 必须放置在 ceph-ansible 项目的根目录下。这样 Ansible 才能找到 ceph-ansible 提供的角色。

配置验证

ceph-ansible 项目通过 ceph-validate 角色提供配置验证。如果您使用提供的 playbook 之一,此角色将在部署早期运行,以确保您为 ceph-ansible 提供了正确的配置。此检查仅确保您为集群提供了适当的配置设置,而不是确保其中的值会产生一个健康的集群。例如,如果您提供了错误的 monitor_address 地址,那么 mon 仍然无法加入集群。

验证失败的示例可能如下所示

TASK [ceph-validate : validate provided configuration] *************************
task path: /Users/andrewschoen/dev/ceph-ansible/roles/ceph-validate/tasks/main.yml:3
Wednesday 02 May 2018  13:48:16 -0500 (0:00:06.984)       0:00:18.803 *********
 [ERROR]: [mon0] Validation failed for variable: osd_objectstore

 [ERROR]: [mon0] Given value for osd_objectstore: foo

 [ERROR]: [mon0] Reason: osd_objectstore must be either 'bluestore' or 'filestore'

 fatal: [mon0]: FAILED! => {
     "changed": false
     }

支持的验证

ceph-validate 角色目前支持验证以下 osd 场景的正确配置

  • collocated(并置)

  • non-collocated(非并置)

  • lvm

以下安装选项也由 ceph-validate 角色验证

  • ceph_origin 设置为 distro

  • ceph_origin 设置为 repository

  • ceph_origin 设置为 local

  • ceph_repository 设置为 dev

  • ceph_repository 设置为 community

安装方法

Ceph 可以通过多种方式安装。

配置

Ceph 集群的配置将通过使用 ceph-ansible 提供的 ansible 变量来设置。所有这些选项及其默认值都在 ceph-ansible 项目根目录下的 group_vars/ 目录中定义。Ansible 将使用相对于清单文件或 playbook 的 group_vars/ 目录中的配置。在 group_vars/ 目录中,有许多示例 Ansible 配置文件,它们通过文件名与每个 Ceph 守护程序组相关联。例如,osds.yml.sample 包含 OSD 守护程序的所有默认配置。 all.yml.sample 文件是一个特殊的 group_vars 文件,适用于集群中的所有主机。

注意

有关设置组或主机特定配置的更多信息,请参阅 Ansible 文档:https://docs.ansible.org.cn/ansible/latest/intro_inventory.html#splitting-out-host-and-group-specific-data

在最基本的层面上,您必须告诉 ceph-ansible 您希望安装的 Ceph 版本、安装方法、集群的网络设置以及您希望如何配置 OSD。要开始配置,请重命名 group_vars/ 中您希望使用的每个文件,使其末尾不包含 .sample,取消注释您希望更改的选项并提供自己的值。

一个部署上游 octopus 版本 Ceph 并使用 lvm 批处理方法的示例配置在 group_vars/all.yml 中如下所示

ceph_origin: repository
ceph_repository: community
public_network: "192.168.3.0/24"
cluster_network: "192.168.4.0/24"
devices:
  - '/dev/sda'
  - '/dev/sdb'

所有安装都需要更改以下配置选项,但根据您选择的 OSD 场景或集群的其他方面,可能还需要其他选项。

  • ceph_origin

  • public_network

部署 RGW 实例时,需要设置 radosgw_interfaceradosgw_address 配置选项。

ceph.conf 配置文件

定义 ceph.conf 的受支持方法是使用 ceph_conf_overrides 变量。这允许您使用 INI 格式指定配置选项。此变量可用于覆盖 ceph.conf 中已定义的节(参见:roles/ceph-config/templates/ceph.conf.j2)或提供新的配置选项。

ceph.conf 中支持以下节

  • [global]

  • [mon]

  • [osd]

  • [mds]

  • [client.rgw.{instance_name}]

一个例子

ceph_conf_overrides:
   global:
     foo: 1234
     bar: 5678
   osd:
     osd_mkfs_type: ext4

注意

除非有助于部署,否则我们不再接受修改 ceph.conf 模板的拉取请求。对于简单的配置调整,请使用 ceph_conf_overrides 变量。

配置每种 Ceph 守护程序类型的完整文档在以下部分中。

OSD 配置

OSD 配置过去是通过选择 OSD 场景并提供该场景所需的配置来设置的。从 stable-4.0 中的 nautilus 开始,唯一可用的场景是 lvm

Day-2 操作

ceph-ansible 在 infrastructure-playbooks 目录中提供了一组 playbook,用于执行一些基本的 Day-2 操作。

RBD 镜像

Ceph-ansible 提供了角色 ceph-rbd-mirror,可以设置 RBD 镜像复制。

贡献

有关如何为 ceph-ansible 贡献的指南,请参阅以下部分。

测试

有关为 ceph-ansible 编写功能测试场景的文档。

演示

Vagrant 演示

在 vagrant 机器上从头部署:https://youtu.be/E8-96NamLDo

裸机演示

在裸机上从头部署:https://youtu.be/dv_PEp9qAqg