Rook快速上手——Ceph三位一体存储
快速上手
官网地址:https://rook.io/
项目地址:https://github.com/rook/rook
安装集群
准备osd存储介质
硬盘符号 | 大小 | 作用 |
---|---|---|
sdb | 50GB | OSD Data |
sdc | 50GB | OSD Data |
sdd | 50GB | OSD Data |
sde | 50GB | OSD Metadata |
> 安装前使用命令lvm lvs
,lvm vgs
和lvm pvs
检查上述硬盘是否已经被使用,若已经使用需要删除,且确保硬盘上不存在分区和文件系统
确保开启内核rbd模块并安装lvm2
modprobe rbd
yum install -y lvm2
安装operator
git clone --single-branch --branch release-1.2 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph
kubectl create -f common.yaml
kubectl create -f operator.yaml
安装ceph集群
---
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook-ceph
spec:
cephVersion:
image: ceph/ceph:v14.2.5
allowUnsupported: false
dataDirHostPath: /var/lib/rook
skipUpgradeChecks: false
mon:
count: 3
allowMultiplePerNode: true
mgr:
modules:
- name: pg_autoscaler
enabled: true
dashboard:
enabled: true
ssl: true
monitoring:
enabled: false
rulesNamespace: rook-ceph
network:
hostNetwork: false
rbdMirroring:
workers: 0
annotations:
resources:
removeOSDsIfOutAndSafeToRemove: false
useAllNodes: false
useAllDevices: false
config:
nodes:
- name: "minikube"
devices:
- name: "sdb"
- name: "sdc"
- name: "sdd"
config:
storeType: bluestore
metadataDevice: "sde"
databaseSizeMB: "1024"
journalSizeMB: "1024"
osdsPerDevice: "1"
disruptionManagement:
managePodBudgets: false
osdMaintenanceTimeout: 30
manageMachineDisruptionBudgets: false
machineDisruptionBudgetNamespace: openshift-machine-api
安装命令行工具
kubectl create -f toolbox.yaml
在toolbox中使用命令ceph -s
查看集群状态
> 在重装ceph集群时需要清理rook数据目录(默认:/var/lib/rook)
为ceph-dashboard服务添加ingress路由
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rook-ceph-mgr-dashboard
namespace: rook-ceph
annotations:
kubernetes.io/ingress.class: "nginx"
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/server-snippet: |
proxy_ssl_verify off;
spec:
tls:
- hosts:
- rook-ceph.minikube.local
secretName: rook-ceph.minikube.local
rules:
- host: rook-ceph.minikube.local
http:
paths:
- path: /
backend:
serviceName: rook-ceph-mgr-dashboard
servicePort: https-dashboard
获取访问dashboard所需的admin账号密码
kubectl get secret rook-ceph-dashboard-password -n rook-ceph -o jsonpath='{.data.password}'|base64 -d
将域名rook-ceph.minikube.local加入/etc/hosts后通过浏览器访问
https://rook-ceph.minikube.local/
使用rbd存储
创建rbd存储池
---
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook-ceph
spec:
failureDomain: osd
replicated:
size: 3
> 由于仅有一个节点和三个OSD,因此采用osd作为故障域
创建完成后在rook-ceph-tools中使用指令ceph osd pool ls
可以看到新建了以下存储池
- replicapool
以rbd为存储介质创建storageclass
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: replicapool
imageFormat: "2"
imageFeatures: layering
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
使用statefulset测试通过storageclass挂载rbd存储
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: storageclass-rbd-test
namespace: default
labels:
app: storageclass-rbd-test
spec:
replicas: 2
selector:
matchLabels:
app: storageclass-rbd-test
template:
metadata:
labels:
app: storageclass-rbd-test
spec:
restartPolicy: Always
containers:
- name: storageclass-rbd-test
imagePullPolicy: IfNotPresent
volumeMounts:
- name: data
mountPath: /data
image: 'centos:7'
args:
- 'sh'
- '-c'
- 'sleep 3600'
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: rook-ceph-block
使用cephfs存储
创建mds服务与cephfs文件系统
---
apiVersion: ceph.rook.io/v1
kind: CephFilesystem
metadata:
name: myfs
namespace: rook-ceph
spec:
metadataPool:
failureDomain: osd
replicated:
size: 3
dataPools:
- failureDomain: osd
replicated:
size: 3
preservePoolsOnDelete: true
metadataServer:
activeCount: 1
activeStandby: true
placement:
annotations:
resources:
创建完成后在rook-ceph-tools中使用指令ceph osd pool ls
可以看到新建了以下存储池
- myfs-metadata
- myfs-data0
以cephfs为存储介质创建storageclass
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-cephfs
provisioner: rook-ceph.cephfs.csi.ceph.com
parameters:
clusterID: rook-ceph
fsName: myfs
pool: myfs-data0
csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Delete
mountOptions:
使用deployment测试通过storageclass挂载cephfs共享存储
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-storageclass-cephfs-test
namespace: default
labels:
app: storageclass-cephfs-test
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: csi-cephfs
volumeMode: Filesystem
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: storageclass-cephfs-test
namespace: default
labels:
app: storageclass-cephfs-test
spec:
replicas: 2
selector:
matchLabels:
app: storageclass-cephfs-test
template:
metadata:
labels:
app: storageclass-cephfs-test
spec:
restartPolicy: Always
containers:
- name: storageclass-cephfs-test
imagePullPolicy: IfNotPresent
volumeMounts:
- name: data
mountPath: /data
image: 'centos:7'
args:
- 'sh'
- '-c'
- 'sleep 3600'
volumes:
- name: data
persistentVolumeClaim:
claimName: data-storageclass-cephfs-test
使用s3存储
创建对象存储网关
---
apiVersion: ceph.rook.io/v1
kind: CephObjectStore
metadata:
name: my-store
namespace: rook-ceph
spec:
metadataPool:
failureDomain: osd
replicated:
size: 3
dataPool:
failureDomain: osd
replicated:
size: 3
preservePoolsOnDelete: false
gateway:
type: s3
sslCertificateRef:
port: 80
securePort:
instances: 1
placement:
annotations:
resources:
创建完成后在rook-ceph-tools中使用指令ceph osd pool ls
可以看到新建了以下存储池
- .rgw.root
- my-store.rgw.buckets.data
- my-store.rgw.buckets.index
- my-store.rgw.buckets.non-ec
- my-store.rgw.control
- my-store.rgw.log
- my-store.rgw.meta
为ceph-rgw服务添加ingress路由
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rook-ceph-rgw
namespace: rook-ceph
annotations:
kubernetes.io/ingress.class: "nginx"
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- rook-ceph-rgw.minikube.local
secretName: rook-ceph-rgw.minikube.local
rules:
- host: rook-ceph-rgw.minikube.local
http:
paths:
- path: /
backend:
serviceName: rook-ceph-rgw-my-store
servicePort: http
将域名rook-ceph-rgw.minikube.local加入/etc/hosts后通过浏览器访问
https://rook-ceph-rgw.minikube.local/
使用S3用户
添加对象存储用户
---
apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:
name: my-user
namespace: rook-ceph
spec:
store: my-store
displayName: "my display name"
创建对象存储用户的同时会生成以{{.metadata.namespace}}-object-user-{{.spec.store}}-{{.metadata.name}}
为命名规则的secret,其中保存了该S3用户的AccessKey和SecretKey
获取AccessKey
kubectl get secret rook-ceph-object-user-my-store-my-user -n rook-ceph -o jsonpath='{.data.AccessKey}'|base64 -d
获取SecretKey
kubectl get secret rook-ceph-object-user-my-store-my-user -n rook-ceph -o jsonpath='{.data.SecretKey}'|base64 -d
根据上述步骤获取到的信息,使用S3客户端进行连接即可使用该S3用户
使用S3存储桶
创建以s3为存储的storageclass
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-delete-bucket
provisioner: ceph.rook.io/bucket
reclaimPolicy: Delete
parameters:
objectStoreName: my-store
objectStoreNamespace: rook-ceph
region: default
> 目前不支持以s3存储创建pvc,仅可用于创建存储桶
为storageclass创建对应的存储桶资源申请
apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
name: ceph-delete-bucket
spec:
generateBucketName: ceph-bkt
storageClassName: rook-ceph-delete-bucket
存储桶创建后会生成与桶资源申请同名的secret,其中保存着用于连接该存储桶的AccessKey和SecretKey
获取AccessKey
kubectl get secret ceph-delete-bucket -n rook-ceph -o jsonpath='{.data.AWS_ACCESS_KEY_ID}'|base64 -d
获取SecretKey
kubectl get secret ceph-delete-bucket -n rook-ceph -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}'|base64 -d
> 使用该方式获取的s3用户已经做了配额限制只能使用一个存储桶
以上就是对于rook ceph的三位一体(rbd,cephfs,s3)简单上手体验,相比较ceph-deploy和ceph-ansible而言更加地简单方便,适合新手上手体验ceph,稳定性如何需要时间观察,暂不推荐用于生产环境

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
怎样在 Akka Persistence 中实现分页查询
在 Akka Persistence 中,数据都缓存在服务内存(状态),后端存储的都是一些持久化的事件日志,没法使用类似 SQL 一样的 DSL 来进行分页查询。利用 Akka Streams 和 Actor 我们可以通过编码的方式来实现分页查询的效果,而且这个分页查询还是分步式并行的…… EventSourcedBehavior Akka Persistence的EventSourcedBehavior里实现了CQRS模型,通过commandHandler与eventHandler解耦了命令处理与事件处理。commandHandler处理传入的命令并返回一个事件,并可选择将这个事件持久化;若事件需要持久化,则事件将被传给eventHandler处理,eventHandler处理完事件后将返回一个“新的”状态(也可以不更新,直接返回原状态)。 def apply[Command, Event, State]( persistenceId: PersistenceId, emptyState: State, commandHandler: (State, Command) => E...
-
下一篇
ThinkSNS+ 3.0 更新播报
ThinkSNS一直不断优化,持续更新,旨在为大家带来更好的系统体验,在功能丰富、代码规范的同时,不断全面升级软件系统的细节体验,本月ThinkSNS+ 3.0主要新增/优化内容: 1、新增活动功能、会员卡功能; 2、优化圈子逻辑、视频播放页、资讯展示样式; 3、升级编辑器,修复bug等。 软件系统ThinkSNS+ 3.0更新内容详情如下: 一、活动功能 更新如下 1、创建活动相关 2、增加发送到聊天中的报名UI 3、活动列表页面自定义导航 4、创建活动入口以及完善创建活动交互 5、发布活动页面增加封面选取、地址选取、时间选取、内容详情的相关逻辑; 6、增加活动搜索 7、通过地图选择/搜索位置搜索活动 8、修改活动地址传入信息 9、增加活动卡片显示 10、视频评论列表增加活动卡片显示 11、个人主页增加活动列表 12、活动-活动详情,点击“发起人”进入个人主页 13、[活动-活动详情增加举报功能 14、[活动] 增加"推荐"分类 …… 二、圈子功能 更新如下 1、圈子创建和编辑时审核权限调整; 2、圈子详情页付费圈子动态数量调整,圈子成员调整; 3、圈子列表加入圈子审核付费等按钮样...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果