k8s学习笔记——cephfs
cephfs安装参考://创建 Ceph 文件系统 — Ceph Documentation//CephFs的操作方法 - 系统运维 - 亿速云
cephfs安装
参考://创建 Ceph 文件系统 — Ceph Documentation
//k8s使用cephfs动态存储 - 流年晕开时光 - 博客园
关于动态创建cephfs和动态创建ceph-rbd还不大一样,首先也是需要安装cephfs provisioner
GitHub - rootfs/cephfs-provisioner: Kubernetes CephFS PV Provisionerc
参考github上的地址,安装go的编译环境,先运行运行
go build cephfs-provisioner.go 将go代码编译为可执行文件,然后用
docker build -t cephfs-provisioner . 将代码打包成docker镜像
我这里是将打包后的镜像上传到了私有的harbor仓库里,在安装时通过仓库下载镜像。
github上没有安装的yaml,自己参考ceph-rbd的写了一个cephfs-provisioner.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cephfs-provisioner
namespace: cephfs
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["get", "list", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services"]
resourceNames: ["kube-dns", "coredns"]
verbs: ["list", "get"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cephfs-provisioner
namespace: cephfs
subjects:
- kind: ServiceAccount
name: cephfs-provisioner
namespace: cephfs
roleRef:
kind: ClusterRole
name: cephfs-provisioner
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: cephfs-provisioner
namespace: cephfs
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "create"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cephfs-provisioner
namespace: cephfs
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cephfs-provisioner
subjects:
- kind: ServiceAccount
name: cephfs-provisioner
namespace: cephfs
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cephfs-provisioner
namespace: cephfs
labels:
app: cephfs-provisioner
spec:
replicas: 1
selector:
matchLabels:
app: cephfs-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: cephfs-provisioner
spec:
nodeSelector:
app: rbd-provisioner
containers:
- name: cephfs-provisioner
image: "core.harbor.shell.com:32042/library/cephfs-provisioner:v1"
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
volumeMounts:
- name: ceph-conf
mountPath: /etc/ceph
volumeMounts:
- name: kube-conf
mountPath: /kube/config
env:
- name: PROVISIONER_NAME
value: ceph.com/cephfs
command:
- "/bin/sh"
- "-c"
- "/usr/local/bin/cephfs-provisioner"
serviceAccount: cephfs-provisioner
volumes:
- name: ceph-conf
hostPath:
path: /etc/ceph
volumes:
- name: kube-conf
hostPath:
path: /root/.kube/config
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: cephfs-provisioner
namespace: cephfs
这里与前面的创建rbd-provisioner在权限设置上略有不同,cephfs动态建立pv时需要动态创建secret,event事件需要list权限,所以在ClusterRole中event中增加了list权限,在Role中secrets中增加了create权限。否则动态创建时会报权限不足。
另外,好像这里创建pvc只能在cephfs的名称空间里创建,具体什么原因我还没弄明白,好像要想在其他名称空间创建pvc应在别的名称空间部署cephfs-provisioner,需要更改cephfs-provisioner.yaml文件中的配置。
创建cephfs-secret.yaml文件与github中的ceph-secret-admin.yaml内容相同,key的值要用过
ceph auth get client.admin 2>&1 |grep "key = " |awk '{print $3'} |base64获取
创建class.yaml文件
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: cephfs
allowVolumeExpansion: true
provisioner: ceph.com/cephfs
parameters:
monitors: 10.12.70.201:6789,10.12.70.202:6789,10.12.70.203:6789 //使用cephfs创建的地址
adminId: admin
adminSecretName: cephfs-secret-admin //这里的需要和创建的secret名称一致
adminSecretNamespace: cephfs
然后部署claim.yaml文件创建的空间大小自己定义
创建成功后就会如下显示
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cephfs-pvc-geoserver Bound pvc-7dc33ba0-b043-476b-9594-d118d3acc9ba 100Gi RWO,ROX,RWX cephfs 44m
status显示Bound状态
使用kubectl get pv查看,可以看到
pvc-7dc33ba0-b043-476b-9594-d118d3acc9ba 100Gi RWO,ROX,RWX Delete Bound cephfs/cephfs-pvc-geoserver cephfs
pv已动态创建
在看通过kubectl get secret -n cephfs
NAME TYPE DATA AGE
ceph-kubernetes-dynamic-user-562ae916-3fb6-11ec-a6e9-6a9df5d0a806-secret Opaque 1 47m
这里创建也动态创建了secret
之前在//CephFs的操作方法 - 系统运维 - 亿速云 中手动挂载的cephfs是创建的整个pool空间可以看到磁盘中的所有内容,也包括k8s动态创建的pv如下
//在挂载的目录下面会多一个volumes目录
//目录下有一个kubernetes目录,目录下就有pvc动态绑定的pv目录
kubernetes _kubernetes:kubernetes-dynamic-pvc-562ae89f-3fb6-11ec-a6e9-6a9df5d0a806.meta
通过test-pod.yaml 可以使用cephfs了,登录pod上后,在挂载的目录下创建文件,就可以在其他挂载cephfs的目录后/volumes/kubernetes/kubernetes-dynamic-pvc-562ae89f-3fb6-11ec-a6e9-6a9df5d0a806/目录下就有刚才pod中创建的文件,文件内容相同。
在cephfs中删除pvc动态创建的pv也就动态删除,但是动态创建的secret还在,并且/volumes/kubernetes/kubernetes-dynamic-pvc-562ae89f-3fb6-11ec-a6e9-6a9df5d0a806目录及创建的文件都会继续存在,不会删除。
更多推荐
所有评论(0)