使用Rook+Ceph在Kubernetes上作持久儲存
使用Rook+Ceph在Kubernetes上作持久儲存
作者:Earl C. Ruby III
我想在新的Kubernetes叢集上安裝Prometheus和Grafana,但為了使這些軟體包能夠工作,他們需要一些地方來儲存持久資料。當我在Seagate擔任雲架構師時,我已經對Ceph進行了效能和規模測試,並且在過去的一年裡玩過Rook,所以我決定安裝Rook+Ceph,並將其用於Kubernetes叢集的資料儲存。
Ceph是一個分散式儲存系統,提供物件、檔案和塊儲存。在每個儲存節點上,您將找到Ceph儲存物件的檔案系統和Ceph OSD(物件儲存守護程式)程序。在Ceph叢集上,您還可以找到Ceph MON(監控)守護程式,它們確保Ceph叢集保持高可用性。
Rook充當Ceph在Kubernetes的業務流程層,將OSD和MON流程部署為POD副本集。來自Rook的README檔案:
Rook將儲存軟體轉變為自我管理、自我擴充套件和自我修復的儲存服務。它通過自動化部署,引導,準備,配置,擴充套件,升級,遷移,災難恢復,監控和資源管理來實現此目的。 Rook使用底層雲原生容器管理,排程和編排平臺提供的工具來執行其職責。
當我建立叢集時,我構建了具有40GB硬碟的VM,所以使用5個Kubernetes節點,在我的叢集上提供了大約200GB的儲存空間,其中大部分都將用於Ceph。
安裝Rook+Ceph
安裝Rook+Ceph非常簡單。在我的個人群集上,我按照以下步驟安裝了Rook+Ceph v0.9.0:
git clone [email protected]:rook/rook.git
cd rook
git checkout v0.9.0
cd cluster/examples/kubernetes/ceph
kubectl create -f operator.yaml
kubectl create -f cluster.yaml
Rook將POD部署在兩個名稱空間中,即rook-ceph-system和rook-ceph。 在我的群集上,POD花了大約2分鐘來部署,初始化並進入執行狀態。當我等待一切都完成時,我檢查了POD狀態:
$ kubectl -n rook-ceph-system get pod
NAME READY STATUS RESTARTS AGE
rook-ceph-agent-8tsq7 1/1 Running 0 2d20h
rook-ceph-agent-b6mgs 1/1 Running 0 2d20h
rook-ceph-agent-nff8n 1/1 Running 0 2d20h
rook-ceph-agent-vl4zf 1/1 Running 0 2d20h
rook-ceph-agent-vtpbj 1/1 Running 0 2d20h
rook-ceph-agent-xq5dv 1/1 Running 0 2d20h
rook-ceph-operator-85d64cfb99-hrnbs 1/1 Running 0 2d20h
rook-discover-9nqrp 1/1 Running 0 2d20h
rook-discover-b62ds 1/1 Running 0 2d20h
rook-discover-k77gw 1/1 Running 0 2d20h
rook-discover-kqknr 1/1 Running 0 2d20h
rook-discover-v2hhb 1/1 Running 0 2d20h
rook-discover-wbkkq 1/1 Running 0 2d20h
$ kubectl -n rook-ceph get pod
NAME READY STATUS RESTARTS AGE
rook-ceph-mgr-a-7d884ddc8b-kfxt9 1/1 Running 0 2d20h
rook-ceph-mon-a-77cbd865b8-ncg67 1/1 Running 0 2d20h
rook-ceph-mon-b-7cd4b9774f-js8n9 1/1 Running 0 2d20h
rook-ceph-mon-c-86778859c7-x2qg9 1/1 Running 0 2d20h
rook-ceph-osd-0-67fff79666-fcrss 1/1 Running 0 35h
rook-ceph-osd-1-58bd4ccbbf-lsxj9 1/1 Running 1 2d20h
rook-ceph-osd-2-bf99864b5-n4q7v 1/1 Running 0 2d20h
rook-ceph-osd-3-577466c968-j8gjr 1/1 Running 0 2d20h
rook-ceph-osd-4-6856c5c6c9-92tb6 1/1 Running 0 2d20h
rook-ceph-osd-5-8669577f6b-zqrq9 1/1 Running 0 2d20h
rook-ceph-osd-prepare-node1-xfbs7 0/2 Completed 0 2d20h
rook-ceph-osd-prepare-node2-c9f55 0/2 Completed 0 2d20h
rook-ceph-osd-prepare-node3-5g4nc 0/2 Completed 0 2d20h
rook-ceph-osd-prepare-node4-wj475 0/2 Completed 0 2d20h
rook-ceph-osd-prepare-node5-tf5bt 0/2 Completed 0 2d20h
最後工作
現在我需要再做兩件事,才能安裝Prometheus和Grafana:
- 我需要讓Rook成為我的叢集的預設儲存提供程式。
- 由於Prometheus Helm chart請求使用XFS檔案系統格式化的卷,因此我需要在所有Ubuntu Kubernetes節點上安裝XFS工具。(預設情況下,Kubespray尚未安裝XFS,儘管目前有一個PR解決這個問題。)
要使Rook成為預設儲存提供程式,我只需執行kubectl命令:
kubectl patch storageclass rook-ceph-block -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
這會更新rook-ceph-block儲存類,並使其成為群集上儲存的預設值。如果沒有指定特定的儲存類,我安裝的任何應用程式都將使用Rook+Ceph進行資料儲存。
由於我使用Kubespray構建叢集,而Kubespray使用Ansible,因此在所有主機上安裝XFS工具的最簡單方法之一,是使用Ansible“在所有主機上執行單個命令”功能:
cd kubespray
export ANSIBLE_REMOTE_USER=ansible
ansible kube-node -i inventory/mycluster/hosts.ini \
--become --become-user root \
-a 'apt-get install -y xfsprogs'
現在已經安裝了XFS,我可以使用Helm成功部署Prometheus和Grafana:
helm install --name prometheus stable/prometheus
helm install --name grafana stable/grafana
Helm chart安裝Prometheus和Grafana,並在Rook+Ceph上為Prometheus Server和Prometheus Alert Manager(使用XFS格式化)建立持久儲存卷。
Prometheus儀表板
Grafana儀表板
Rook給Prometheus伺服器的持久儲存
希望您覺得這個有幫助。