在我的公司,多年来我们一直在使用 Ceph,同时使用 ceph-ansible 作为部署程序(以及用于升级、扩展操作等)。最近,我被分配迁移到“cephadm”进行安装和第二天的操作。
在做 POC 时,我遇到了 2 个问题,其中一个比另一个更准确:
- 我们有与 ceph-ansible 相关的不同独立网络:
A。配置网络,用于 ssh 以及在 ceph 相关主机(具有 mons/osds/clients 的节点)上远程运行任务
b.公共网络 - 用于托管 mons、mgrs、mdss 的节点。这些地址是不支持 ssh。我们的 Ceph 集群以这种方式完美运行。
C。集群网络 - 用于内部 ceph 流量,如心跳、复制等。也不能使用 ssh。
因此,对于 cephadm,在引导时它迫使我“结合”公共网络和配置。换句话说,除非我允许该网络支持 ssh(出于安全原因,我们不希望这样做),否则 bootstrap 命令将失败并显示以下消息。我找不到一种方法来安装具有用于 ssh 和 ceph 目的的单独网络(用于监视器的公共网络)的 ceph 集群:
/usr/bin/ceph: stderr File "/usr/share/ceph/mgr/orchestrator/_interface.py", line 225, in raise_if_exception
/usr/bin/ceph: stderr e = pickle.loads(c.serialized_exception)
/usr/bin/ceph: stderr TypeError: __init__() missing 2 required positional arguments: 'hostname' and 'addr'
/usr/bin/ceph: stderr
ERROR: Failed to add host <HOSTNAME>: Failed command: /usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --net=host --entrypoint /usr/bin/ceph --init -e CONTAINER_IMAGE=<registry:port>/ceph/daemon:quincy-rockylinux-8-x86_64 -e NODE_NAME=<hostname> -e CEPH_USE_RANDOM_NONCE=1 -v /var/log/ceph/a0a19cd2-44ec-11ee-a922-ec0d9a94e986:/var/log/ceph:z -v /tmp/ceph-tmpb0u6hlv7:/etc/ceph/ceph.client.admin.keyring:z -v /tmp/ceph-tmpooy56ocy:/etc/ceph/ceph.conf:z <registry:port>/ceph/daemon:quincy-rockylinux-8-x86_64 orch host add <HOSTNAME> <IP>
- 我们使用了原始的 ceph 服务,其名称类似于“[电子邮件受保护]'。使用 cephadm,每个服务和每个容器名称都必须将 fsid 作为名称的一部分。我尝试搜索可以更改的位置,但没有找到任何内容。
答案1
- 这就是 cephadm 的工作原理,它需要 ssh 访问所有节点才能运行所有检查和远程命令。由于它提供了一个协调器来远程管理集群,因此没有办法绕过它。
- 关于服务名称:使用 cephadm,您可以在容器中运行 Ceph 集群,这使您能够在同一硬件服务器上运行多个集群。如果服务中没有 fsid,您将无法区分集群。是否有任何特定原因不希望服务名称中包含 fsid?其实并不痛,而且转换现有集群to cephadm 会自动为您配置服务。