先決條件
為確保您有一個准備就緒的 Kubernetes 集群Rook,您可以按照這些說明進行操作。
為了配置 Ceph 存儲集群,至少需要以下本地存儲選項之一:
- 原始設備(無分區或格式化文件系統)
- 這需要lvm2在主機上安裝。為了避免這種依賴性,您可以在磁盤上創建一個完整的磁盤分區(見下文)
- 原始分區(無格式化的文件系統)
- block模式下存儲類可用的持久卷
部署 Rook Operator
$ git clone --single-branch --branch release-1.7 https://gitee.com/Aaron-23/rook.git
cd rook/cluster/examples/kubernetes/ceph
第一步是部署 Rook 算子。檢查您是否正在使用與您的 Rook 版本相對應的示例 yaml 文件。有關更多選項,請參閱示例文檔。
cd cluster/examples/kubernetes/ceph
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# verify the rook-ceph-operator is in the `Running` state before proceeding
kubectl -n rook-ceph get pod
修改cluster.yaml文件中storage.node的相關信息,至少需要三個節點
kubectl create -f cluster.yaml
使用kubectl到列表莢的rook-ceph命名空間。一旦它們全部運行,您應該能夠看到以下 pod。osd pod 的數量取決於集群中的節點數量和配置的設備數量。如果cluster.yaml上面沒有修改,預計每個節點會創建一個OSD。
如果rook-ceph-mon,rook-ceph-mgr或rook-ceph-osd不創建豆莢,請參閱 Ceph的常見問題的詳細信息和可能的解決方案。
$ kubectl -n rook-ceph get pod
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-provisioner-d77bb49c6-n5tgs 5/5 Running 0 140s
csi-cephfsplugin-provisioner-d77bb49c6-v9rvn 5/5 Running 0 140s
csi-cephfsplugin-rthrp 3/3 Running 0 140s
csi-rbdplugin-hbsm7 3/3 Running 0 140s
csi-rbdplugin-provisioner-5b5cd64fd-nvk6c 6/6 Running 0 140s
csi-rbdplugin-provisioner-5b5cd64fd-q7bxl 6/6 Running 0 140s
rook-ceph-crashcollector-minikube-5b57b7c5d4-hfldl 1/1 Running 0 105s
rook-ceph-mgr-a-64cd7cdf54-j8b5p 1/1 Running 0 77s
rook-ceph-mon-a-694bb7987d-fp9w7 1/1 Running 0 105s
rook-ceph-mon-b-856fdd5cb9-5h2qk 1/1 Running 0 94s
rook-ceph-mon-c-57545897fc-j576h 1/1 Running 0 85s
rook-ceph-operator-85f5b946bd-s8grz 1/1 Running 0 92m
rook-ceph-osd-0-6bb747b6c5-lnvb6 1/1 Running 0 23s
rook-ceph-osd-1-7f67f9646d-44p7v 1/1 Running 0 24s
rook-ceph-osd-2-6cd4b776ff-v4d68 1/1 Running 0 25s
rook-ceph-osd-prepare-node1-vx2rz 0/2 Completed 0 60s
rook-ceph-osd-prepare-node2-ab3fd 0/2 Completed 0 60s
rook-ceph-osd-prepare-node3-w4xyz 0/2 Completed 0 60s
驗證集群是否處於健康狀態
使用Rook tools並運行該 ceph status命令。
kubectl create -f toolbox.yaml
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools
$ kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
$ ceph status
[root@rook-ceph-tools-7869bc54f6-67rvk /]# ceph status
cluster:
id: 1f70694e-df88-4a1f-b77e-d2dd0ded9977
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c (age 23h)
mgr: a(active, since 20h), standbys: b
mds: 1/1 daemons up, 1 hot standby
osd: 3 osds: 3 up (since 20h), 3 in (since 20h)
data:
volumes: 1/1 healthy
pools: 3 pools, 192 pgs
objects: 25 objects, 50 KiB
usage: 107 MiB used, 300 GiB / 300 GiB avail
pgs: 192 active+clean
io:
client: 1.2 KiB/s rd, 2 op/s rd, 0 op/s wr
存儲
有關 Rook 公開的三種存儲類型的演練,請參閱以下指南:
Block:創建由 Pod (RWO) 使用的塊存儲
共享文件系統:創建一個跨多個 Pod 共享的文件系統 (RWX)
Object:創建一個可以在 Kubernetes 集群內部或外部訪問的對象存儲
創建共享文件系統
kubectl create -f filesystem.yaml
Rook operator將創建啟動服務所需的所有池和其他資源。這可能需要一分鍾才能完成。
# To confirm the filesystem is configured, wait for the mds pods to start
kubectl -n rook-ceph get pod -l app=rook-ceph-mds
NAME READY STATUS RESTARTS AGE
rook-ceph-mds-myfs-7d59fdfcf4-h8kw9 1/1 Running 0 12s
rook-ceph-mds-myfs-7d59fdfcf4-kgkjp 1/1 Running 0 12s
要查看文件系統的詳細狀態,請啟動並連接到Rook tools。將ceph status為該mds服務顯示一個新行。在此示例中,有一個 MDS 的活動實例已啟動,其中一個 MDS 實例處於standby-replay模式以備故障轉移。
$ ceph status
...
services:
mds: myfs-1/1/1 up {[myfs:0]=mzw58b=up:active}, 1 up:standby-replay
供應存儲
在 Rook 開始供應存儲之前,需要根據文件系統創建一個 StorageClass。這是 Kubernetes 與 CSI 驅動程序互操作以創建持久卷所必需的。
注意:此示例使用 CSI 驅動程序,它是 K8s 1.13 和更新版本的首選驅動程序。示例可以在CSI CephFS目錄中找到。有關使用 flex 驅動程序(K8s 1.12 及更早版本需要)的卷的示例,請參閱下面的Flex 驅動程序部分。
kubectl create -f storageclass.yaml
存儲配額
重要提示:CephFS CSI 驅動程序使用配額來強制執行請求的 PVC 大小。只有較新的內核支持 CephFS 配額(內核版本至少為 4.17)。如果您需要強制執行配額並且內核驅動程序不支持它,您可以禁用內核驅動程序並使用 FUSE 客戶端。這可以通過CSI_FORCE_CEPHFS_KERNEL_CLIENT: false 在操作員部署 ( operator.yaml) 中設置來完成。但是,重要的是要知道,當 FUSE 客戶端啟用時,存在一個問題,即在升級過程中應用程序 pod 將與掛載斷開連接,需要重新啟動。有關 更多詳細信息,請參閱升級指南。
dashboard
獲取svc,在平台上代理
kubectl -n rook-ceph get service rook-ceph-mgr-dashboard
連接到儀表板后,您需要登錄以進行安全訪問。Rook 創建一個默認用戶, admin並rook-ceph-dashboard-password在 Rook Ceph 集群運行的命名空間中生成一個名為的秘密。要檢索生成的密碼,您可以運行以下命令:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo