专栏名称: HULK一线技术杂谈
HULK是360的私有云平台,丰富的一线实战经验,为你带来最有料的技术分享
目录
相关文章推荐
电子商务研究中心  ·  申报通道开启!《2024年中国涉农电商“百强 ... ·  2 天前  
蛋先生工作室  ·  2月13日蛋价:喝点小酒,说点实话...... ·  2 天前  
体坛周报  ·  热议 | ... ·  3 天前  
体坛周报  ·  热议 | ... ·  3 天前  
电商头条  ·  国美通讯被强制退市,黄光裕焦头烂额 ·  3 天前  
51好读  ›  专栏  ›  HULK一线技术杂谈

Kubernetes持久化存储Cephfs

HULK一线技术杂谈  · 公众号  ·  · 2018-05-24 18:00

正文

女主宣言

上一篇 kubernetes持久化存储Ceph RBD 介绍了Ceph RBD在kubernetes中的使用,本篇将会介绍Cephfs在kubernetes中的使用。 本文最先发布于 opsdev,转载已获取作者授权。

PS:丰富的一线技术、多元化的表现形式,尽在“ HULK一线技术杂谈 ”,点关注哦!

Kubernetes volume

熟悉kubernetes volume的同学应该了解,kubernetes 对volume的提供支持“静态PV”和“动态PV”两种方式。


  • 静态PV

集群管理员创建一些PV,之后便可用于PVC消费。


  • 动态PV

相比静态PV而言,动态PV无需管理员手动创建PV,PV的操作是由一个叫StorageClass的控制器创建。对于Cephfs volume来说,截止到kubernetes 1.10版本并没有直接提供Cephfs的StorageClass。



虽然官方并没有直接提供对Cephfs StorageClass的支持,但是社区给出了类似的解决方案 external-storage/ cephfs,后面我们会使用到。


1

静态PV

Ceph RBD 和 secret 的创建详见此链接:

https://www.opsdev.cn/post/Ceph-RBD.html

编辑 Cephfs PV 对象文件 cephfs-pv.yaml:

apiVersion: v1

kind: PersistentVolume

metadata:

name: cephfs-pv

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteMany

cephfs:

monitors:

- 192.168.0.3:6789

user: kube

secretRef:

name: secret-for-cephfs

readOnly: false

persistentVolumeReclaimPolicy: Recycle

创建 PV:

$ kubectl create -f cephfs-pv.yaml -n cephfs

persistentvolume "cephfs-pv" created


$ kubectl get pv -n cephfs

创建PVC

$ vim cephfs-pv-claim.yaml


apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: cephfs-pv-claim

namespace: cephfs

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 1Gi

在 deployment 中使用 PV:

metadata:

name: cephfs-pvc

namespace: cephfs

spec:

replicas: 2

template:

metadata:

labels:

app: cephfs-pvc

spec:

containers:

- name: nginx

image: busybox:latest

volumeMounts:

- name: cephfs-pv

mountPath: /data/cephfs

readOnly: false

volumes:

- name: cephfs

persistentVolumeClaim:

claimName: cephfs-pv-claim

这样,在同一个deployment中的2个pod容器内都可以读写同一个cephfs volume了。


2

动态PV

对于规模不大的容器平台而言,静态PV方式就可以满足需求;但是当容器规模很大时,你不知道用户什么时候创建PV,因此动态PV方式就非常有用了。下面我们看下如何基于 external-storage/cephfs 来实现动态PV。


部署 cephfs-provisioner

cephfs-provisioner 是 kubernetes 官方社区提供的Cephfs的StorageClass支持。用于动态的调用后端存储Cephfs创建PV。

cephfs-provisoner 的实现机制如图所示:

它主要是包含两部分:


  • cephfs-provisoner.go

是cephfs-provisoner(cephfs的StorageClass)的核心,主要是 watch kubernetes中 PVC 资源的CURD事件,然后以命令行方式调用 cephfs_provisor.py脚本创建PV。


  • cephfs_provisoner.py

python 脚本实现的与cephfs交互的命令行工具。cephfs-provisoner 对cephfs端volume的创建都是通过该脚本实现。里面封装了volume的增删改查等功能。


创建 StorageClass

#kubectl create -f class.yaml


# kubectl get sc -n cephfsNAME      PROVISIONER       AGEcephfs    ceph.com/cephfs   33d

基于RBAC授权方式启动cephfs-provisioner

# kubectl create -f  *


# kubectl get deploy -n cephfs

这样动态创建PV的环境就准备好了。


动态PV方式,无需再手动创建PV,只需创建PVC,cephfs-provisoner会自动的为该PVC在后端cephfs存储上创建对应的PV。

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: pvc-1

annotations:

volume.beta.kubernetes.io/storage-class: "cephfs"

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 1Gi

此时,我们创建PVC后,会看到同时会自动创建并绑定上一个PV。







请到「今天看啥」查看全文