做者:Earl C. Ruby IIInode
我想在新的Kubernetes集羣上安裝Prometheus和Grafana,但爲了使這些軟件包可以工做,他們須要一些地方來存儲持久數據。當我在Seagate擔任雲架構師時,我已經對Ceph進行了性能和規模測試,而且在過去的一年裏玩過Rook,因此我決定安裝Rook+Ceph,並將其用於Kubernetes集羣的數據存儲。git
Ceph是一個分佈式存儲系統,提供對象、文件和塊存儲。在每一個存儲節點上,您將找到Ceph存儲對象的文件系統和Ceph OSD(對象存儲守護程序)進程。在Ceph集羣上,您還能夠找到Ceph MON(監控)守護程序,它們確保Ceph集羣保持高可用性。github
Rook充當Ceph在Kubernetes的業務流程層,將OSD和MON流程部署爲POD副本集。來自Rook的README文件:shell
Rook將存儲軟件轉變爲自我管理、自我擴展和自我修復的存儲服務。它經過自動化部署,引導,準備,配置,擴展,升級,遷移,災難恢復,監控和資源管理來實現此目的。 Rook使用底層雲原生容器管理,調度和編排平臺提供的工具來執行其職責。
當我建立集羣時,我構建了具備40GB硬盤的VM,因此使用5個Kubernetes節點,在個人集羣上提供了大約200GB的存儲空間,其中大部分都將用於Ceph。架構
安裝Rook+Ceph很是簡單。在個人我的羣集上,我按照如下步驟安裝了Rook+Ceph v0.9.0:分佈式
git clone git@github.com: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成爲默認存儲提供程序,我只需運行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格式化)建立持久存儲卷。
但願您以爲這個有幫助。