一、概述 Ceph在k8s中用做共享存储还是非常方便的,Ceph是比较老牌的分布式存储系统,非常成熟,功能也强大,支持三种模式(快存储、文件系统存储、对象存储),所以接下来就详细讲解如何在k8s使用ceph,关于ceph的介绍可以参考我以下几篇文章:分布式存储系统Ceph介绍与环境部署 分布式存储系统Ceph实战操作 前提是需要一个k8s环境,k8s环境的部署可以参考我这篇文章:云原生Kubernetes(k8s)最完整版环境部署(V1。24。1) 二、CephRook介绍 Rook是一个开源的云原生存储编排工具,提供平台、框架和对各种存储解决方案的支持,以和云原生环境进行本地集成。Rook将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。Rook利用扩展功能将其深度地集成到云原生环境中,并为调度、生命周期管理、资源管理、安全性、监控等提供了无缝的体验。有关Rook当前支持的存储解决方案的状态相关的更多详细信息,可以参考Rook仓库的项目介绍。Rook目前支持Ceph、NFS、MinioObjectStore和CockroachDB。 官网:https:rook。io 项目地址:https:github。comrook三、通过Rook在k8s中部署Ceph 官方文档:https:rook。iodocsrookv1。10GettingStartedquickstart 【温馨提示】k8s节点各挂载一块(或者多块)20GB的未使用的磁盘。1)下载部署包gitclonesinglebranchbranchv1。10。8https:github。comrookrook。git 部署所用到的镜像如下: 由于镜像源在国外,国内无法下载,这里需要修改一些镜像或者提前下载tag,操作如下:cdrookdeployexamples(registry。aliyuncs。comgooglecontainersimage:tag),后四个镜像我FQ下dockerpullregistry。aliyuncs。comgooglecontainerscsinodedriverregistrar:v2。5。1dockertagregistry。aliyuncs。comgooglecontainerscsinodedriverregistrar:v2。5。1registry。k8s。iosigstoragecsinodedriverregistrar:v2。5。1dockerpullregistry。aliyuncs。comgooglecontainerscsisnapshotter:v6。1。0dockertagregistry。aliyuncs。comgooglecontainerscsisnapshotter:v6。1。0registry。k8s。iosigstoragecsisnapshotter:v6。1。0dockerpullregistry。aliyuncs。comgooglecontainerscsiattacher:v4。0。0dockertagregistry。aliyuncs。comgooglecontainerscsiattacher:v4。0。0registry。k8s。iosigstoragecsiattacher:v4。0。0dockerpullregistry。aliyuncs。comgooglecontainerscsiresizer:v1。6。0dockertagregistry。aliyuncs。comgooglecontainerscsiresizer:v1。6。0registry。k8s。iosigstoragecsiresizer:v1。6。0dockerpullregistry。aliyuncs。comgooglecontainerscsiresizer:v1。6。0dockertagregistry。aliyuncs。comgooglecontainerscsiresizer:v1。6。0registry。k8s。iosigstoragecsiresizer:v1。6。0dockerpullregistry。aliyuncs。comgooglecontainerscsiprovisioner:v3。3。0dockertagregistry。aliyuncs。comgooglecontainerscsiprovisioner:v3。3。0registry。k8s。iosigstoragecsiprovisioner:v3。3。02)部署RookOperatorcdrookdeployexampleskubectlcreatefcrds。yamlfcommon。yamlfoperator。yaml检查kubectlnrookcephgetpod 也可以通过helm部署helmrepoaddrookreleasehttps:charts。rook。ioreleasehelminstallcreatenamespacenamespacerookcephrookcephrookreleaserookcephfvalues。yaml3)创建RookCeph集群 现在RookOperator处于Running状态,接下来我们就可以创建Ceph集群了。为了使集群在重启后不受影响,请确保设置的dataDirHostPath属性值为有效得主机路径。cdrookdeployexampleskubectlapplyfcluster。yaml4)部署RookCeph工具cdrookdeployexampleskubectlcreateftoolbox。yaml5)部署CephDashboardcdrookdeployexampleskubectlapplyfdashboardexternalhttps。yaml获取dashboardadmin密码kubectlnrookcephgetsecretrookcephdashboardpasswordojsonpath{〔data〕〔password〕}base64d 通过CephDashboard查看Ceph集群状态查看对外端口kubectlgetsvcnrookceph https::nodePort 6)检查kubectlgetpods,svcnrookceph 6)通过cephtool工具pod查看ceph集群状态kubectlexecitkubectlgetpodsnrookcephgreprookcephtoolsawk{print1}nrookcephbashcephs 四、测试验证1)块存储(RBD)测试1、创建StorageClasscdrookdeployexamples创建一个名为replicapool的rbdpoolkubectlapplyfcsirbdstorageclass。yaml 2、部署WordPresskubectlapplyfmysql。yamlkubectlapplyfwordpress。yaml2)文件系统(CephFS)测试1、创建StorageClasskubectlapplyfcsicephfsstorageclass。yaml2、部署应用kubectlapplyffilesystem。yaml3)对象存储(RGW)测试1、创建对象存储kubectlcreatefobject。yaml验证rgwpod正常运行kubectlnrookcephgetpodlapprookcephrgw2、创建对象存储userkubectlcreatefobjectuser。yaml3、获取accesskeysecretkey获取AccessKeykubectlnrookcephgetsecretrookcephobjectusermystoremyuseroyamlgrepAccessKeyawk{print2}base64decode获取SecretKeykubectlnrookcephgetsecretrookcephobjectusermystoremyuseroyamlgrepSecretKeyawk{print2}base64decode4、部署rgwnodeportkubectlapplyfrgwexternal。yamlkubectlnrookcephgetservicerookcephrgwmystorerookcephrgwmystoreexternal5、通过api接口使用Ceph存储存储首先,我们需要安装pythonboto包,用于测试连接S3。:yuminstallpythonbotoy然后,编写python测试脚本。cats3。py!usrbinpythonimportbotoimportboto。s3。connectionaccesskeyC7492VVSL8O11NZBK3GTsecretkeylo8IIwMfmow4fjkSOMbjebmgjzTRBQSO7w83SvBdconnboto。connects3(awsaccesskeyidaccesskey,awssecretaccesskeysecretkey,host192。168。182。110,port30369,issecureFalse,callingformatboto。s3。connection。OrdinaryCallingFormat(),)bucketconn。createbucket(myfirsts3bucket)forbucketinconn。getallbuckets():print{name}{created}。format(namebucket。name,createdbucket。creationdate,) 具体测试过程在我之前的文章中有很详细的介绍,可以参考:分布式存储系统Ceph实战操作 Ceph在k8s中应用介绍就先到这里了,有任何疑问欢迎给我留言,后续会持续更新【大数据云原生】相关的文章,请小伙伴耐心等待!!!