长时间以来,为了使Ceph
易于安装和管理,社区出现了各种各样的Ceph
部署工具。这些工具大多数都利用了Ansible
,Puppet
和Salt
等现有的自动化工具,因为他们带来了现有的用户管理生态,并且与其保持一致。但结果是,Ceph
社区的精力被分散在许多额外的工作上。新用户在入门时面临着艰难的工具选择,而且当用户试图简化这些工具并且与Ceph
自身集成也是非常困难的。
Cephadm
的目标是提供一个功能齐全、健壮且维护良好的安装和管理层,可供不在Kubernetes
中运行Ceph
的任何环境使用。具体特性如下:
将所有组件部署在容器中。 使用容器简化了不同发行版之间的依赖关系和打包复杂度。当然,我们仍在构建RPM
和Deb
软件包,但是随着越来越多的用户过渡到cephadm
(或Rook
)并构建容器,我们看到的特定于操作系统的bug
就越少。
与Orchestrator API紧密集成。 Ceph
的Orchestrator
界面在cephadm
的开发过程中得到了广泛的发展,以匹配实现并清晰地抽象出Rook
中存在的(略有不同)功能。最终结果是不管是看起来还是感觉都像Ceph
的一部分。
不依赖管理工具。 Salt
和Ansible
之类的工具在大型环境中进行大规模部署时非常出色,但是使Ceph
依赖于这种工具意味着用户还需要学习该相关的软件。更重要的是,与专为管理Ceph
而专门设计的部署工具相比,依赖这些工具(Salt
和Ansible
等)的部署最终可能变得更加复杂,难以调试并且(最显着)更慢。
最小的操作系统依赖性。 Cephadm
需要Python 3
,LVM
和container runtime
(Podman
或Docker
)。任何当前的Linux
发行版都可以。
将群集彼此隔离。 支持多个Ceph
集群同时存在于同一主机上一直是一个比较小众的场景,但是确实存在,并且以一种健壮,通用的方式将集群彼此隔离,这使得测试和重新部署集群对于开发人员和用户而言都是安全自然的过程。
自动升级。 一旦Ceph
“拥有”自己的部署方式,它就可以以安全和自动化的方式[升级Ceph
。
从“传统”部署工具轻松迁移。 我们需要从现有工具(例如ceph-ansible
,ceph-deploy
和DeepSea
)中现有的Ceph
部署轻松过渡到cephadm
。
所有这一切的目的是将Ceph
开发人员和用户社区的注意力集中在仅这两个平台上:cephadm
用于“裸机”部署,Rook
用于在Kubernetes
环境中运行Ceph
,并为这两个平台提供类似的管理体验。
cephadm
模型有一个简单的“ Bootstrap
”步骤,该步骤从命令行启动,该命令行在本地主机上启动一个最小的Ceph
群集(一个monitor
与 manager
守护程序)。然后,使用orchestrator
命令部署集群的其余部分,以添加其他主机,使用存储设备并为集群服务部署守护程序。
引导群集很简单:
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadmchmod +x cephadmmkdir -p /etc/ceph./cephadm bootstrap --mon-ip
30到60秒后,最小的Ceph
集群将启动并运行,并且cephadm
将打印出命令以访问Ceph CLI
(通过容器化shell
)和URL
来访问dashboard
:
INFO:cephadm:Ceph Dashboard is now available at: URL: https://gnit:8443/ User: admin Password: 07j394z550INFO:cephadm:You can access the Ceph CLI with: sudo ./cephadm shell --fsid 2d2fd136-6df1-11ea-ae74-002590e526e8 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyringINFO:cephadm:Bootstrap complete.
由于Ceph
已完全容器化(podman ps
或docker ps
进行验证),因此主机上尚未安装任何软件,通常的ceph
命令将不起作用(至少现在还不行)。有几种与新群集进行交互的方法。
一种方法是使用cephadm shell
命令。用于引导的cephadm
也可以启动装有所有Ceph
软件(包括CLI
)的容器话Shell
。因为bootstrap
在默认情况下会将ceph config
和admin keyring
的副本放在/etc/ceph
中,而shell
命令在默认情况下会在那里显示,所以您可以通过以下的命令启动一个shell并进入CLI管理端:
./cephadm shellceph status
cephadm
命令还使在主机上安装Ceph
软件包变得更加容易。如下命令是将Ceph CLI
命令和cephadm
命令安装在标准位置:
./cephadm add-repo --release octopus./cephadm install cephadm ceph-common
它支持一些常见的Linux
发行版(CentOS/RHEL
,Debian/Ubuntu
,OpenSUSE/SLE
),并且可以轻松扩展以支持新发行版。
任何生产环境的Ceph
集群都跨越多个主机。Cephadm
通过使用SSH
从ceph mgr
守护程序连接到集群中的主机来管理集群,从而内省环境、监视ceph
守护进程以及部署或删除守护程序。每个Ceph
集群生成一个惟一的SSH
标识和密钥,用于连接到主机。引导过程会将此密钥添加到本地主机的根用户的authorized_keys
中。但是,添加其他主机需要一些手动步骤。
首先,我们需要集群密钥的公钥部分。默认情况下,引导程序会将副本放在/etc/ceph/ceph.pub
,或者可以使用ceph cephadm get ssh pub key
从集群获取公钥副本。
对于每个主机,我们首先需要在远程系统上添加密钥。使用任何最新版本的ssh
附带的ssh copy id
命令最容易实现这一点:
ssh-copy-id -f -i /etc/ceph/ceph.pub root@new-host
如果您当前的用户尚未设置免密码的SSH
访问,则此命令可能会提示您输入root
密码。
接下来,我们需要告诉Ceph
有关新主机的信息。在此我们假设所有主机都有一个唯一的主机名,该主机名与主机本身上配置的主机名匹配。如果您的本地环境还没有配置DNS
以使我们可以连接到这些主机名,或者您希望避免依赖DNS
,则还可以为每个主机提供IP
地址:
ceph orch host add
[ ]
您可以使用以下命令查看群集中的所有主机
ceph orch host ls
Cephadm
中的每个服务或守护进程集合都有一个相关的 placement
规范,或者描述应该在哪里部署守护程序以及部署多少守护程序。默认情况下,带有cephadm
的新Ceph
集群知道集群应该在每个主机上部署5个monitor
、2个manager
和一些其他服务(如crash dump collector
)。新的monitor
和manager
会在向群集添加其他主机后自动部署。您可以使用ceph orch ls
和ceph orch ps
命令查看新的集群服务和已部署的守护程序:
# ceph orch lsNAME RUNNING REFRESHED AGE PLACEMENT IMAGE NAME IMAGE ID alertmanager 1/1 71s ago 22m count:1 docker.io/prom/alertmanager:latest 0881eb8f169f crash 1/1 71s ago 23m * docker.io/ceph/ceph:v15 204a01f9b0b6 grafana 1/1 71s ago 22m count:1 docker.io/ceph/ceph-grafana:latest 87a51ecf0b1c mgr 1/2 71s ago 23m count:2 docker.io/ceph/ceph:v15 204a01f9b0b6 mon 1/5 71s ago 23m count:5 docker.io/ceph/ceph:v15 204a01f9b0b6 node-exporter 1/1 71s ago 22m * docker.io/prom/node-exporter:latest e5a616e4b9cf prometheus 1/1 71s ago 22m count:1 docker.io/prom/prometheus:latest e935122ab143 # ceph orch psNAME HOST STATUS REFRESHED AGE VERSION IMAGE NAME IMAGE ID CONTAINER ID alertmanager.gnit gnit running (21m) 96s ago 22m 0.20.0 docker.io/prom/alertmanager:latest 0881eb8f169f 15ceff5ae935 crash.gnit gnit running (22m) 96s ago 23m 15.2.0 docker.io/ceph/ceph:v15 204a01f9b0b6 0687711365e4 grafana.gnit gnit running (21m) 96s ago 22m 6.6.2 docker.io/ceph/ceph-grafana:latest 87a51ecf0b1c fa1db4647c4c mgr.gnit.xmfvjy gnit running (24m) 96s ago 24m 15.2.0 docker.io/ceph/ceph:v15 204a01f9b0b6 6a29bc868357 mon.gnit gnit running (24m) 96s ago 24m 15.2.0 docker.io/ceph/ceph:v15 204a01f9b0b6 072f5926faa8 node-exporter.gnit gnit running (22m) 96s ago 22m 0.18.1 docker.io/prom/node-exporter:latest e5a616e4b9cf eb5f715005fc prometheus.gnit gnit running (22m) 96s ago 22m 2.16.0 docker.io/prom/prometheus:latest e935122ab143 6ee6de1b3cc1
在上面的示例输出中,您会注意到部署了许多非Ceph
守护程序:Prometheus
,Grafana
,alertmanager
和node-exporter
。它们提供了一个基本但配置完整且功能齐全的监视堆栈,该堆栈允许Ceph Dashboard
的所有指标和图形都可以立即使用。如果您已经希望Ceph
使用的现有的Prometheus
,则可以通过传递--skip-monitoring-stack
给bootstrap
命令来告诉cephadm
跳过这些。
对于大多数用户来说,这种默认行为就是您所需要的。对于想要精确控制在哪些主机上部署monitor
或选择具体IP
的高级用户,需要一些附加步骤来定制这些守护程序的位置。甚至可以完全禁用特定服务(如monitor
)的自动分布,尽管这样做的理由相对较少。
一旦集群开始运行,一个最小但足够的ceph.conf
访问群集的主机的文件可以通过以下方式获取:
# ceph config generate-minimal-conf
将OSD
添加到Ceph
集群通常是部署中最棘手的部分之一。HDD
和SSD
可以通过多种方式组合以平衡性能和成本,并且告诉Ceph
使用哪种设备可能很棘手。
对于大部分用户,我们希望以下命令就足够了:
ceph orch apply osd --all-available-devices
这将消耗Ceph
集群中通过所有安全检查的任何主机上的任何设备(HDD
或SSD
),这意味着没有分区、没有LVM
卷、没有文件系统等。每个设备将部署一个OSD
,这是适用于大多数用户的最简单情况。
对于我们其他人,我们有几种工具可供使用。我们可以使用以下方法列出所有主机上的所有设备(以及上述安全检查的状态):
ceph orch device ls
可以使用以下命令在单个设备上显式创建单个OSD
:
ceph orch daemon add osd host-foo:/dev/foo
但是,对于更复杂的自动化,orchestrator API
引入了DriveGroups
的概念,该概念允许按照设备属性(SSD
与HDD
,型号名称,大小,主机名模式)以及“hybrid
” OSD
来描述OSD
部署。组合多个设备(例如,用于元数据的SSD
和用于数据的HDD
)以半自动化的方式进行部署。
其他Ceph
守护程序是无状态的,这意味着它们不会在本地存储任何数据,并且可以在任何主机上轻松地重新部署。这些对于cephadm
来说很容易……对于CephFS
,它们的部署是完全自动化的。例如,创建一个名为的CephFS
文件系统foo
ceph fs volume create foo
将创建必要的数据和元数据池,并一步一步部署MDS
守护程序。守护程序的数量和位置可以在以后通过ceph orch ls
和ceph orch apply mds ...
命令进行检查和调整,或者可以将可选的placement
参数传递给volume create
命令。
对于使用RGW
的对象存储,事情还没有完全简化,但是orchestrator
和cephadm
可以用来管理底层守护进程。对于独立对象存储群集:
radosgw-admin realm create --rgw-realm=myorg --defaultradosgw-admin zonegroup create --rgw-zonegroup=default --master --defaultradosgw-admin zone create --rgw-zonegroup=default --rgw-zone=us-east-1 --master --defaultceph orch apply rgw myorg us-east-1
对于现有(multi-site
或standalone
)部署,部署守护程序可以像ceph orch apply rgw
一样简单,前提是rgw
配置选项已存储在群集的配置数据库(ceph config set client.rgw.$realmname.$zonename ...
)中而不是ceph.conf
文件。
一旦部署了新集群(或升级并转换了现有集群),cephadm
的最佳功能之一就是它能够自动执行升级。在大多数情况下,这很简单:
ceph orch upgrade start --ceph-version 15.2.1
可以从ceph status
命令监视升级进度,该命令的输出将包含一个进度条,例如:
Upgrade to docker.io/ceph/ceph:v15.2.1 (3m) [===.........................] (remaining: 21m)
能够更深入地了解cephadm
在后台运行以在远程主机上运行服务是非常有帮助的。首先,您可以使用podman ps
或docker ps
查看容器。您会注意到所有容器的名称中都有集群fsid UUID
,这样多个集群就可以出现在同一个主机上,而不会相互冲突。(除守护进程使用固定端口(如Ceph monitor
)或prometheus node-exporter
之类的命令外。)
这些文件也都是单独的。在/var/lib/ceph
和/var/log/ceph
中,您将发现由集群fsid
分隔开的内容。并且在每个守护程序目录中,您都会看到一个名为unit.run
的文件,该文件具有启动守护程序的docker
或podman
命令——这就是systemd
执行的操作。
尽管您可能还记得Bootstrap
步骤将文件写入/etc/ceph
,但它这样做只是为了方便,这样在主机上单个集群的常见情况下,只需安装ceph common
包就可以让ceph CLI
正常工作。传递--output-dir
(或类似方式)引导程序会将这些文件写入其他位置。
事实上,主机操作系统唯一的其他变化是:
/etc/systemd/system
为每个集群(ceph-$fsid.target
对于[email protected]
所有守护程序共享的每个集群)写入的systemd
文件
ceph.target
启动/停止所有 Ceph
服务
logrotate
文件位于/etc/logrotate.d/ceph-$fsid
,以防启用了对文件的日志记录。(默认情况下,cephadm
守护进程将日志记录到stderr
,并由容器运行时捕获日志。)
同时,在ceph-mgr
守护程序中运行的cephadm
模块可以更改。通过Orchestrator
界面配置服务,可以通过内部Python
界面(例如,Dashboard
)或CLI
进行访问。要查看所有可用命令,请尝试ceph orch -h
。 ceph orch ls
特别是将描述当前配置的服务。
在后台,cephadm
具有“reconciliation loop
”,就像Kubernetes
一样,该loop
将当前状态与所需状态进行比较,这由配置的服务指定。要监视其活动,ceph -W cephadm
将实时显示正在输出的最后的日志,或ceph log last cephadm
显示最近的消息。这个后台工作可以在任何时候用ceph orch pause
暂停,使用ceph orch resume
继续。
在最初的Octopus
版本中,cephadm
对核心Ceph
服务提供了可靠的支持:RADOS
,CephFS
,RBD
和RGW
。大量辅助服务正在积极开发中,包括NFS
和iSCSI
网关支持,并且此后有望再提供CIFS
支持(通过Samba
)。所有这些更改将在完成后被反向移植到Octopus
。
同时,我们还期望提高“scheduling
”算法的健壮性和智能性,该算法决定在哪里运行服务。现在cephadm
只是将服务守护进程分散到主机上,但是(默认情况下)随机选择这些主机。我们希望通过对守护进程容器(例如CPU
和内存)设置资源限制,并根据每个主机上的可用资源智能地选择守护进程的位置来改进这一点。
最后,我们希望在下一个开发周期中花费大量时间通过Ceph Dashboard
展示更多的编排功能,以简化总体用户体验,尤其是对于初始部署、群集扩展和更换故障存储设备等常见操作。
最后但并非最不重要的一点:Cephadm
是全新的,我们正在寻找真实用户的反馈,以便在真实环境中首次部署Cephadm
,以了解哪些是有效的,哪些是不起作用的,以及我们可以做些什么来改进!
有关Cephadm
的更多信息,请参阅在线文档。
原文: https://ceph.io/ceph-management/introducing-cephadm/
了解新钛云服
当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议
新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照
深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资
新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁
新钛云服一周年,完成两轮融资,服务五十多家客户
上海某仓储物流电子商务公司混合云解决方案
新钛云服出品的部分精品技术干货
低代码开发,全民开发,淘汰职业程序员!
国内主流公有云VPC使用对比及总结
万字长文:云架构设计原则|附PDF下载
刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
Ceph OSD故障排除|万字经验总结
七个用于Docker和Kubernetes防护的安全工具
运维人的终身成长,从清单管理开始|万字长文!
OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等
什么是云原生?
IT混合云战略:是什么、为什么,如何构建?