Kubernetes中用Helm安装Ceph存储服务
注意:
- 本文仅供参考。在Kubernetes中建议使用Rook项目,更为方便、兼容性更好。
- 在Kubernetes中使用Ceph已经有专门的项目 rook(https://rook.io)。
- Rook-Kubernetes云原生存储系统,https://my.oschina.net/u/2306127/blog/1819630
- Rook定位为Cloud Native的存 储系统,支持CSI接口,使用Ceph作为基础实现。
- 了解Ceph概念和使用方法,参见Ceph的官方文档,http://docs.ceph.org.cn/。
本文翻译自Ceph官方文档,括号内的内容为注释。
安装
ceph-helm 项目可让你在Kubernetes 环境以托管方式部署Ceph . 本文档假定Kubernetes 环境已经可用。
当前的限制
- Public网络和Cluster网络必须是同一个网络
- 如果 storage class 用户标识不是admin, 则必须在Ceph集群中手动创建用户并在Kubernetes中创建其secret
- ceph-mgr只能运行1个replica
安装并使用Helm
可以按照此说明instructions安装Helm。
Helm通过从本地读取Kubernetes配置文件来查找Kubernetes集群; 确保文件已下载和且helm客户端可以访问。
Kubernetes群集必须配置并运行Tiller服务器,并且须将本地Helm客户端网络可达。查看init的Helm文档获取帮助。要在本地运行Tiller并将Helm连接到它,请运行如下命令(此命令会在Kubernetes集群部署一个tiller实例):
ceph-helm项目默认使用本地的Helm repo来存储charts。要启动本地Helm repo服务器,请运行:
添加Ceph-Helm charts到本地repo
$ git clone https://github.com/ceph/ceph-helm $ cd ceph-helm/ceph $ make
配置Ceph集群
创建一个包含Ceph配置的ceph-overrides.yaml文件。这个文件可能存在于任何地方,本文档默认此文件在用户的home目录中。
注意 如果未设置日志(journal)设备,它将与device设备同位置。另ceph-helm/ceph/ceph/values.yaml文件包含所有可配置的选项。
创建Ceph 集群的namespace
默认情况下,ceph-helm组件在Kubernetes的ceph namespace中运行。如果要自定义,请自定义namespace的名称,默认namespace请运行:
配置RBAC权限
Kubernetes> = v1.6使RBAC成为默认的admission controller。ceph-helm要为每个组件提供RBAC角色和权限:
rbac.yaml文件假定Ceph集群将部署在ceph命名空间中。
给Kubelet节点打标签
需要设置以下标签才能部署Ceph集群:
ceph-osd-device-标签是基于我们的ceph-overrides.yaml中定义的osd_devices名称值创建的。从我们下面的例子中,我们将得到以下两个标签:ceph-osd-device-dev-sdb和ceph-osd-device-dev-sdc。
每个 Ceph Monitor节点:
每个 OSD node节点:
Ceph 部署
运行helm install命令来部署Ceph:
helm install的输出显示了将要部署的不同类型的资源。
将使用ceph-rbd-provisioner Pod创建ceph.com/rbd类型的名为ceph-rbd的StorageClass。这允许创建PVC时自动提供RBD。第一次挂载时,RBD设备将被格式化(format)。所有RBD设备都将使用ext4文件系统。ceph.com/rbd不支持fsType选项。默认情况下,RBD将使用镜像格式2和镜像分层特性。可以在values文件中覆盖以下storageclass的默认值:
使用下面的命令检查所有Pod是否正常运行。这可能需要几分钟时间:
注意 因为我们没有用ceph-rgw = enabled或ceph-mds = enabled 给节点打标签(ceph对象存储特性需要ceph-rgw,cephfs特性需要ceph-mds),因此MDS和RGW Pod都处于pending状态,一旦其他Pod都在运行状态,请用如下命令从某个MON节点检查Ceph的集群状态:
配置一个POD以便从Ceph申请使用一个持久卷
为〜/ ceph-overwrite.yaml中定义的k8s用户创建一个密钥环,并将其转换为base64:
编辑ceph namespace中存在的用户secret:
将base64值复制到key位置的值并保存::
我们创建一个在default namespace中使用RBD的Pod。将用户secret从ceph namespace复制到default namespace:
创建并初始化RBD池:
重要 重要的 Kubernetes使用RBD内核模块将RBD映射到主机。Luminous需要CRUSH_TUNABLES 5(Jewel)。这些可调参数的最小内核版本是4.5。如果您的内核不支持这些可调参数,请运行ceph osd crush tunables hammer。
重要 由于RBD映射到主机系统上。主机需要能够解析由kube-dns服务管理的ceph-mon.ceph.svc.cluster.local名称。要获得kube-dns服务的IP地址,运行kubectl -n kube-system get svc/kube-dns。
创建一个PVC:
检查集群上是否已创建RBD:
创建一个使用此PVC的Pod:
检查Pod:
日志
可以通过kubectl logs [-f]命令访问OSD和Monitor日志。Monitors有多个日志记录流,每个流都可以从ceph-mon Pod中的容器访问。
在ceph-mon Pod中有3个容器运行:ceph-mon,相当于物理机上的ceph-mon.hostname.log,cluster-audit-log-tailer相当于物理机上的ceph.audit.log,cluster-log-tailer相当于物理机上的ceph.log或ceph -w。每个容器都可以通过–container或-c选项访问。例如,要访问cluster-tail-log,可以运行:
本文转自开源中国-Kubernetes中用Helm安装Ceph存储服务
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
是时候使用Helm了:Helm, Kubernetes的包管理工具
目前我们的一个产品共有4套环境:dev环境、test环境、staging环境、production环境。 其中dev, test, staging环境在一个Kubernetes集群上以不同namespace部署,production环境部署在另一个Kubernetes集群上。这个产品总共有14个微服务 组成,对应gitlab中14个代码库,Kubernetes的deployment yaml文件也保存在代码库,为每个服务的每套环境以环境名创建了一个目录,里面是yaml文件,yaml文件的内容使用sed实现了简单的模板功能。14个服务*4套环境总共56个yaml文件,比较原始。 最近需要新起另外的一套测试环境这里称它为test2吧,需要在第一个Kubernetes集群上创建新的namespace,要维护的yaml文件马上也要增加到70个,有点噩梦的感觉了。 因此我们需要一个模板工具来管理这些yaml文件。早就知道helm这个东西,但为了保持简单,一直遵循着最少引入新东西的原则,那么现在是时候使用Helm了吧? 1.Helm的基本概念 Helm是Kubernetes的一个包管理工具,用来简...
- 下一篇
Traefik Kubernetes 初试
一、Kubernetes 服务暴露介绍 从 kubernetes 1.2 版本开始,kubernetes提供了 Ingress 对象来实现对外暴露服务;到目前为止 kubernetes 总共有 三种暴露服务的方式: LoadBlancer Service NodePort Service Ingress 1.1、LoadBlancer Service LoadBlancer Service 是 kubernetes 深度结合云平台的一个组件;当使用 LoadBlancer Service 暴露服务时,实际上是通过向底层云平台申请创建一个负载均衡器来向外暴露服务;目前 LoadBlancer Service 支持的云平台已经相对完善,比如国外的 GCE、DigitalOcean,国内的 阿里云,私有云 Openstack 等等,由于 LoadBlancer Service 深度结合了云平台,所以只能在一些云平台上来使用 1.2、NodePort Service NodePort Service 顾名思义,实质上就是通过在集群的每个 node 上暴露一个端口,然后将这个端口映射到某个具体的...
相关文章
文章评论
共有0条评论来说两句吧...