做者: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格式化)建立持久存储卷。
但愿您以为这个有帮助。