1. 安裝 CEPH 方法介紹
推薦方法
Cephadm使用容器和 systemd 安裝和管理 Ceph 集群,並與 CLI 和儀表板 GUI 緊密集成。
- cephadm 僅支持 Octopus 和更新版本。
- cephadm 與新的編排 API 完全集成,並完全支持新的 CLI 和儀表板功能來管理集群部署。
- cephadm 需要容器支持(podman 或 docker)和 Python 3。
Rook部署和管理在 Kubernetes 中運行的 Ceph 集群,同時還支持通過 Kubernetes API 管理存儲資源和配置。我們推薦 Rook 作為在 Kubernetes 中運行 Ceph 或將現有 Ceph 存儲集群連接到 Kubernetes 的方式。
- Rook 僅支持 Nautilus 和更新版本的 Ceph。
- Rook 是在 Kubernetes 上運行 Ceph 或將 Kubernetes 集群連接到現有(外部)Ceph 集群的首選方法。
- Rook 支持新的 Orchestrator API。完全支持 CLI 和儀表板中的新管理功能。
其他方法
ceph-ansible 使用 Ansible 部署和管理 Ceph 集群。
- ceph-ansible 被廣泛部署。
- ceph-ansible 未與 Nautlius 和 Octopus 中引入的新編排器 API 集成,這意味着較新的管理功能和儀表板集成不可用。
ceph-deploy是一個快速部署集群的工具。
重要的 ceph-deploy 不再積極維護。它沒有在比 Nautilus 更新的 Ceph 版本上進行測試。它不支持 RHEL8、CentOS 8 或更新的操作系統。
2. Cephadm 介紹
Cephadm 通過從管理器守護進程通過 SSH 連接到主機來部署和管理 Ceph 集群,以添加、刪除或更新 Ceph 守護進程容器。它不依賴於 Ansible、Rook 或 Salt 等外部配置或編排工具。
Cephadm 管理 Ceph 集群的整個生命周期。它首先在單個節點(一個監視器和一個管理器)上引導一個小型 Ceph 集群,然后使用編排接口(“day 2”命令)擴展集群以包含所有主機並提供所有 Ceph 守護進程和服務。這可以通過 Ceph 命令行界面 (CLI) 或儀表板 (GUI) 執行。
Cephadm 是 Octopus v15.2.0 版本中的新功能,不支持舊版本的 Ceph。
Cephadm 是新的。在使用 cephadm 部署生產系統之前,請閱讀穩定性。
穩定性
Cephadm 是 Octopus 版本中的一項新功能,在生產和規模上的使用有限。我們希望用戶嘗試使用 cephadm,尤其是對於新集群,但請注意,某些功能仍然很粗糙。我們期望在 Octopus 的前幾個錯誤修復版本中進行相當頻繁的更新和改進。
目前支持以下組件的 Cephadm 管理:
- Monitors
- Managers
- OSDs
- CephFS file systems
- rbd-mirror
以下組件正在使用cephadm,但文檔沒有我們想要的那么完整,並且在不久的將來可能會有一些變化:
- RGW
- dmcrypt OSD
Cephadm 對以下功能的支持仍在開發中:
- NFS
- iSCSI
如果遇到問題,您可以隨時使用以下命令暫停 cephadm:
ceph orch pause
或者使用以下命令完全關閉 cephadm:
ceph orch set backend ''
ceph mgr module disable cephadm
3. 部署一個新的 CEPH 集群
Cephadm 通過在單個主機上“引導”創建一個新的 Ceph 集群,擴展集群以包含任何額外的主機,然后部署所需的服務。
要求
- Systemd
- 用於運行容器的 Podman 或 Docker
- 時間同步(如chrony或NTP)
- LVM2 用於配置存儲設備
任何現代 Linux 發行版都應該足夠了。依賴項由下面的引導程序自動安裝。
當前建議使用 Ubuntu 20.04 LTS 發行版,因其自帶 octopus 的安裝包。
引導一個新集群
您需要知道集群的第一個監視器守護程序使用哪個IP 地址。這通常只是第一台主機的 IP。如果有多個網絡和接口,請確保選擇一個可供訪問 Ceph 集群的任何主機訪問的網絡和接口。
要引導集群:
# mkdir -p /etc/ceph
# cephadm bootstrap --mon-ip *<mon-ip>*
此命令將:
- 在本地主機上為新集群創建一個 monitor 和 manager 守護進程。
- 為 Ceph 集群生成一個新的 SSH 密鑰並將其添加到 root 用戶的/root/.ssh/authorized_keys文件中。
- 將與新集群通信所需的最小配置文件寫入/etc/ceph/ceph.conf.
- 將client.admin管理(特權!)密鑰的副本寫入/etc/ceph/ceph.client.admin.keyring.
- 將公鑰的副本寫入 /etc/ceph/ceph.pub.
默認引導行為適用於絕大多數用戶。請參閱下面的一些可能對某些用戶有用的選項,或運行以查看所有可用選項:cephadm bootstrap -h
- 為了方便起見,Bootstrap 將訪問新集群所需的文件寫入/etc/ceph中 ,以便安裝在主機本身上的任何 Ceph 包(例如,訪問命令行界面)可以輕松找到它們。
但是,使用 cephadm 部署的守護進程容器根本不需要 /etc/ceph。使用 --output-dir
- 您可以通過將任何初始 Ceph 配置選項放入標准 ini 樣式配置文件並使用 --config
選項,將它們傳遞給新集群。例如:
# cat <<EOF > initial-ceph.conf
[global]
osd crush chooseleaf type = 0
EOF
# cephadm bootstrap --config initial-ceph.conf ...
-
您可以使用 --ssh-user
選項選擇 cephadm 將用於連接到主機的 ssh 用戶。ssh 密鑰將被添加到 /home/ /.ssh/authorized_keys. 此用戶將需要無密碼的 sudo 訪問權限。 -
如果您在需要登錄的經過身份驗證的注冊表上使用容器,您可以添加三個參數 --registry-url
,--registry-username ,--registry-password 或者 --registry-json 。Cephadm 將嘗試登錄此注冊表,以便它可以拉取您的容器,然后將登錄信息存儲在其配置數據庫中,以便添加到集群的其他主機也可以使用經過身份驗證的注冊表。
啟用 CEPH CLI
Cephadm 不需要在主機上安裝任何 Ceph 包。但是,我們建議啟用對ceph 命令的輕松訪問。做這件事有很多種方法:
- 該命令會在安裝了所有 Ceph 包的容器中啟動一個 bash shell。
# cephadm shell
- 要執行ceph命令,您還可以像這樣運行命令:
# cephadm shell -- ceph -s
- 您可以安裝該ceph-common軟件包,其中包含所有ceph命令,包括ceph、rbd、mount.ceph(用於掛載 CephFS 文件系統)等:
# cephadm add-repo --release octopus
# cephadm install ceph-common
或者,本實驗使用APT直接安裝軟件包:apt install ceph-common ceph-base
確認該ceph命令可訪問:
# ceph -v
使用以下ceph命令確認該命令可以連接到集群及其狀態:
# ceph status
將主機添加到集群
要將每個新主機添加到集群,請執行兩個步驟:
- 在新主機的 root 用戶authorized_keys文件中安裝集群的公共 SSH 密鑰 :
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*
例如:
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@host2
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@host3
- 告訴 Ceph 新節點是集群的一部分:
# ceph orch host add *newhost*
例如:
# ceph orch host add host2
# ceph orch host add host3
部署額外的監視器(可選)
一個典型的 Ceph 集群有三個或五個分布在不同主機上的監視器守護進程。如果集群中有五個或更多節點,我們建議部署五個監視器。
當 Ceph 知道監視器應該使用哪個 IP 子網時,它可以隨着集群的增長(或收縮)自動部署和擴展監視器。默認情況下,Ceph 假定其他監視器應該使用與第一個監視器的 IP 相同的子網。
如果您的 Ceph 監視器(或整個集群)位於單個子網上,那么默認情況下,cephadm 會在您向集群添加新主機時自動添加最多 5 個監視器。不需要進一步的步驟。
- 如果監視器應該使用特定的 IP 子網,您可以使用CIDR格式(例如,10.1.2.0/24)配置它:
# ceph config set mon public_network *<mon-cidr-network>*
例如:
# ceph config set mon public_network 10.1.2.0/24
Cephadm 僅在已配置子網中配置了 IP 的主機上部署新的監視器守護進程。
- 如果要調整 5 台監視器的默認值:
# ceph orch apply mon *<number-of-monitors>*
- 在一組特定的主機上部署監視器:
# ceph orch apply mon *<host1,host2,host3,...>*
確保在此列表中包含第一個(引導)主機。
- 您可以通過使用主機標簽來控制監視器在哪些主機上運行。將mon標簽設置為適當的主機:
# ceph orch host label add *<hostname>* mon
查看當前主機和標簽:
# ceph orch host ls
例如:
# ceph orch host label add host1 mon
# ceph orch host label add host2 mon
# ceph orch host label add host3 mon
# ceph orch host ls
HOST ADDR LABELS STATUS
host1 mon
host2 mon
host3 mon
host4
host5
告訴 cephadm 根據標簽部署監視器:
# ceph orch apply mon label:mon
- 您可以為每個監視器和控件的放置位置明確指定 IP 地址或 CIDR 網絡。要禁用自動監視器部署:
# ceph orch apply mon --unmanaged
要部署每個額外的監視器:
# ceph orch daemon add mon *<host1:ip-or-network1> [<host1:ip-or-network-2>...]*
例如,要在網絡中使用 IP 地址 10.1.2.123 和 10.1.2.0/24 部署第二個監視器 newhost1 和第三個監視器 newhost2
# ceph orch apply mon --unmanaged
# ceph orch daemon add mon newhost1:10.1.2.123
# ceph orch daemon add mon newhost2:10.1.2.0/24
ceph orch apply mon 命令可能會造成混淆。因此,我們建議使用 YAML 規范。
每個“ceph orch apply mon”命令都會取代之前的命令。這意味着當您想要將監視器應用於多個主機時,您必須使用正確的基於逗號分隔的列表語法。如果您不使用正確的語法,您將在進行中破壞您的操作。
例如:
# ceph orch apply mon host1
# ceph orch apply mon host2
# ceph orch apply mon host3
這導致只有一台主機應用了監視器:host3。
(第一個命令在 host1 上創建一個監視器。然后第二個命令破壞了 host1 上的監視器並在 host2 上創建了一個監視器。然后第三個命令破壞了 host2 上的監視器並在 host3 上創建了一個監視器。在這個場景中,此時,僅在 host3 上有一個監視器。)
要確保將監視器應用於這三個主機中的每一個,請運行如下命令:
# ceph orch apply mon "host1,host2,host3"
或者不要使用“ceph orch apply mon”命令,運行如下命令:
# ceph orch apply -i file.yaml
這是一個示例file.yaml文件:
service_type: mon
placement:
hosts:
- host1
- host2
- host3
部署 OSD
可以通過以下方式顯示所有群集主機上的存儲設備清單:
# ceph orch device ls
如果滿足以下所有條件,則認為存儲設備可用:
-
設備必須沒有分區。
-
設備不得具有任何 LVM 狀態。
-
不得安裝設備。
-
設備不得包含文件系統。
-
設備不得包含 Ceph BlueStore OSD。
-
設備必須大於 5 GB。
Ceph 拒絕在不可用的設備上配置 OSD。
有幾種方法可以創建新的 OSD:
- 告訴 Ceph 消耗任何可用和未使用的存儲設備:
# ceph orch apply osd --all-available-devices
- 從特定主機上的特定設備創建 OSD:
# ceph orch daemon add osd *<host>*:*<device-path>*
例如:
# ceph orch daemon add osd host1:/dev/sdb
- 使用OSD 服務規范根據設備的屬性來描述要使用的設備,例如設備類型(SSD 或 HDD)、設備型號名稱、大小或設備所在的主機:https://docs.ceph.com/en/octopus/cephadm/drivegroups/#drivegroups
# ceph orch apply osd -i spec.yml
例如:
service_type: osd
service_id: default_drive_group <- name of the drive_group (name can be custom)
placement:
host_pattern: '*' <- which hosts to target, currently only supports globs
data_devices: <- the type of devices you are applying specs to
all: true <- a filter, check below for a full list
在所有匹配全局模式“*”的主機上,將任何可用設備(ceph-volume 決定什么是“可用”)轉換為 OSD。(glob 模式與來自 host ls 的注冊主機匹配)
部署 MDS
使用 CephFS 文件系統需要一個或多個 MDS 守護進程。如果使用較新的 ceph fs volume 接口來創建新的文件系統,則會自動創建這些文件。有關更多信息,請參閱FS 卷和子卷。
https://docs.ceph.com/en/octopus/cephfs/fs-volumes/#fs-volumes-and-subvolumes
部署元數據服務器:
# ceph orch apply mds *<fs-name>* --placement="*<num-daemons>* [*<host1>* ...]"
有關放置規范的詳細信息,請參閱:https://docs.ceph.com/en/octopus/mgr/orchestrator/#orchestrator-cli-placement-spec