kubernetes挂载ceph rbd和cephfs

朴灿烈づ我的快乐病毒、 2023-02-15 10:14 28阅读 0赞

微信公众号搜索 DevOps和k8s全栈技术 ,关注之后,在后台回复 k8s视频,就可获取k8s免费视频和文档,也可扫描文章最后的二维码关注公众号。

目录

  • k8s挂载Ceph RBD
    • 创建secret
    • 创建StorageClass
    • 创建PVC
    • 创建secret
    • 创建PV
    • 创建PVC
    • 创建deployment挂载PVC
    • PV & PVC方式
    • StorageClass方式
  • k8s挂载Cephfs

k8s挂载Ceph RBD

k8s挂载Ceph RBD有两种方式,一种是传统的PV&PVC的方式,也就是说需要管理员先预先创建好相关PV和PVC,然后对应的deployment或者replication来挂载PVC使用。而在k8s 1.4以后,kubernetes提供了一种更加方便的动态创建PV的方式,即StorageClass。使用StorageClass时无需预先创建固定大小的PV来等待使用者创建PVC使用,而是直接创建PVC即可使用。

需要说明的是,要想让k8s的node节点执行挂载ceph rbd的指令,需要在所有节点上安装ceph-common包。直接通过yum安装即可。

PV & PVC方式

创建secret

  1. #获取管理key并进行64位编码
  2. ceph auth get-key client.admin | base64

创建ceph-secret.yml文件,内容如下:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: ceph-secret
  5. data:
  6. #Please note this value is base64 encoded.
  7. # echo "keystring"|base64
  8. key: QVFDaWtERlpzODcwQWhBQTdxMWRGODBWOFZxMWNGNnZtNmJHVGc9PQo=

创建PV

创建test.pv.yml文件,内容如下:

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: test-pv
  5. spec:
  6. capacity:
  7. storage: 2Gi
  8. accessModes:
  9. - ReadWriteOnce
  10. rbd:
  11. #ceph的monitor节点
  12. monitors:
  13. - 10.5.10.117:6789
  14. - 10.5.10.236:6789
  15. - 10.5.10.227:6789
  16. #ceph的存储池名字
  17. pool: data
  18. #在存储池里创建的image的名字
  19. image: data
  20. user: admin
  21. secretRef:
  22. name: ceph-secret
  23. fsType: xfs
  24. readOnly: false
  25. persistentVolumeReclaimPolicy: Recycle
  26. kubectl create -f test.pv.yml

创建PVC

创建test.pvc.yml文件,内容如下:

  1. kind: PersistentVolumeClaim
  2. apiVersion: extensions/v1beta1
  3. metadata:
  4. name: test-pvc
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. resources:
  9. requests:
  10. storage: 2Gi
  11. kubectl create -f test.pvc.yml

创建deployment挂载PVC

创建test.dm文件,内容如下:

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: test
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. app: test
  11. spec:
  12. containers:
  13. - name: test
  14. image: dk-reg.op.douyuyuba.com/op-base/openresty:1.9.15
  15. ports:
  16. - containerPort: 80
  17. volumeMounts:
  18. - mountPath: "/data"
  19. name: data
  20. volumes:
  21. - name: data
  22. persistentVolumeClaim:
  23. claimName: test-pvc
  24. kubectl create -f test.dm.yml

StorageClass方式

创建secret

由于StorageClass要求ceph的secret type必须为kubernetes.io/rbd,所以在上面PV & PVC方式中创建的secret无法使用,需要重新创建。如下:

  1. # 其中key的部分为ceph原生的key,未使用base64重新编码
  2. kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==' --namespace=kube-system
  3. kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==' --namespace=default

创建StorageClass

创建test.sc.yml文件,内容如下:

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: test-storageclass
  5. provisioner: kubernetes.io/rbd
  6. parameters:
  7. monitors: 192.168.1.11:6789,192.168.1.12:6789,192.168.1.13:6789
  8. # Ceph 客户端用户ID(非k8s的)
  9. adminId: admin
  10. adminSecretName: ceph-secret
  11. adminSecretNamespace: kube-system
  12. pool: data
  13. userId: admin
  14. userSecretName: ceph-secret

创建PVC

创建test.pvc.yml文件,内容如下:

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: test-sc-pvc
  5. annotations:
  6. volume.beta.kubernetes.io/storage-class: test-storageclass
  7. spec:
  8. accessModes:
  9. - ReadWriteOnce
  10. resources:
  11. requests:
  12. storage: 2Gi
  13. kubectl create -f test.pvc.yml

至于挂载,与PV & PVC的方式一致,不再重复说明

k8s挂载Cephfs

上面大致说明了使用k8s挂载ceph rbd块设备的方法。这里简单说下k8s挂载ceph 文件系统的方法。

首先secret可以直接与上面复用,不用再单独创建。也不需要再创建pv和pvc。直接在deployment中挂载即可,方法如下:

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: test
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. app: test
  11. spec:
  12. containers:
  13. - name: test
  14. image: dk-reg.op.douyuyuba.com/op-base/openresty:1.9.15
  15. ports:
  16. - containerPort: 80
  17. volumeMounts:
  18. - mountPath: "/data"
  19. name: data
  20. volumes:
  21. - name: data
  22. cephfs:
  23. monitors:
  24. - 10.5.10.117:6789
  25. - 10.5.10.236:6789
  26. - 10.5.10.227:6789
  27. path: /data
  28. user: admin
  29. secretRef:
  30. name: ceph-secret

往期精彩文章回顾

kubernetes面试题汇总

DevOps视频和资料免费领取

kubernetes技术分享-可用于企业内部培训

kubernetes系列文章第一篇-k8s基本介绍

kubernetes系列文章第二篇-kubectl

kubernetes集群中部署EFK日志管理系统

Kubernetes中部署MySQL高可用集群

Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统-超详细文档

k8s1.18多master节点高可用集群安装-超详细中文官方文档

Kubernetes Pod健康检查-livenessProbe和readinessProbe

kubernetes pod生命周期管理-postStart和preStop

k8s中蓝绿部署、金丝雀发布、滚动更新汇总

运维常见问题汇总-tomcat篇

运维常见问题汇总-tomcat部署java项目大量close_wait解决方案

关于linux内核参数的调优,你需要知道


点击在看少个 bug????

技术交流群

  1. **扫码加群????**

format_png

微信:luckylucky421302

微信公众号

长按指纹关注公众号????

format_png 1

参考资料

  1. https://www.cnblogs.com/breezey/p/8849501.html

发表评论

表情:
评论列表 (有 0 条评论,28人围观)

还没有评论,来说两句吧...

相关阅读