Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
利用rook在k8s集群快速搭建ceph文件系统
2019-03-06
kubernetes
> 本文介绍如何利用rook在k8s集群中快速搭建ceph文件系统 对于运行在k8s集群中的系统,持久性存储是一个重要的部分。 Ceph是一个开源的分布式存储系统,提供出色的性能,可靠性和可扩展性,可以说是目前虽受欢迎的私有存储方案了。 Rook是一个开源的存储服务,它与k8s深度集成,利用它可以很方便的在k8s集群中搭建、使用Ceph提供的存储系统。 ## 准备工作 下载 rook 源码: git clone https://github.com/rook/rook.git git checkout release-0.9 cd rook/cluster/examples/kubernetes/ceph ## 部署 Rook Operator Rook Operator会在每个node上创建一个代理容器,用于后续的集群建立等。 kubectl create -f operator.yaml 然后检查所有 pods 的状态已经变为 running kubectl -n rook-ceph-system get pod ## 部署 Rook Cluster kubectl create -f cluster.yaml 检查 ceph 的容器状态 kubectl -n rook-ceph get pod ## 暴露 ceph dashboard 检查服务是否有正常运行: kubectl -n rook-ceph get service ``` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rook-ceph-mgr ClusterIP 10.43.14.242 <none> 9283/TCP 5h rook-ceph-mgr-dashboard ClusterIP 10.43.169.205 <none> 8443/TCP 5h ``` 暴露Nodeport: kubectl apply -f dashboard-external-https.yaml. kubectl -n rook-ceph get service ``` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rook-ceph-mgr ClusterIP 10.43.14.242 <none> 9283/TCP 5h rook-ceph-mgr-dashboard ClusterIP 10.43.169.205 <none> 8443/TCP 5h rook-ceph-mgr-dashboard-external-https NodePort 10.43.18.209 <none> 8443:31096/TCP 5h ``` 然后就可以通过 https://nodeip:31096 访问 dashboard 了 登录用户名为 admin,密码可以通过如下命令获取: kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o yaml | grep "password:" | awk '{print $2}' | base64 --decode ## 部署 ceph tool box kubectl create -f toolbox.yaml 然后就可以通过如下命令进入容器管理ceph了 kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash ## 测试存储 通过部署 mysql, wordpress 来测试存储 部署storageclass、ceph block pool: kubectl apply -f storageclass.yaml 部署 mysql kubectl apply -f ../mysql.yaml 部署 WordPress kubectl apply -f ../wordpress.yaml 查看pod状况 kubectl get pods 我在这里遇到了 pod 无法创建成功的问题:timeout expired waiting for volumes to attach or mount for pod 搜寻了一些解决方案,有提到要升级 os 到 ubuntu 18的,有提到要升级 k8s 到最新版本的,当然最终找到了问题所在:Rook使用FlexVolume与Kubernetes集成以执行存储操作,而FlexVolume插件的路径与目前kubectl环境配置的插件路径不同导致。 下面有详细讨论到这个问题: * https://github.com/rook/rook/issues/1501 * https://rook.io/docs/rook/master/flexvolume.html 笔者的k8s集群是通过rancher搭建,参考rancher的解决方案,在 cluster.yaml 文件配置 kubelet 的插件目录,更新集群以后,volume就可以正常挂载了。 ```yaml services: kubelet: extra_args: volume-plugin-dir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec extra_binds: - /usr/libexec/kubernetes/kubelet-plugins/volume/exec:/usr/libexec/kubernetes/kubelet-plugins/volume/exec ``` ## 参考 * [Ceph](https://ceph.com/) * [Rook](https://rook.github.io/)
×
本文为博主原创,如需转载,请注明出处:
http://www.supperxin.com
返回博客列表